「Qmail over SSL でメール通信を暗号化する」 は6編に分けてあります。他の記事は ▼ をご参照ください。
ここまでの作業をまとめると、QmailAdmin の WEB インターフェイスで、より簡単かつ便利にメールを設定することができました。また、IMAP over SSL と SMTP over SSL を適用して、よりセキュアな Qmail over SSL 環境でのメールの送受信が可能になりました。今回はメールの転送速度に非常に影響を与える dnscache を追加した後、ezmlm を使ってメーリングリスト機能も実装します。
djbdns は Qmail の著者である D.J. Bernstein が作った DNSサーバ です。djbdns は cacheサーバ、コンテンツサーバ に分離されていて、ここでは DNS cache サーバである dnscache を設置および設定します。
事前準備
djbdns を設置するためには、daemontools-0.70 以降のバージョンと ucspi-tcp が設置されていることが条件です。
djbdns-1.05 の設置
cd /usr/local/src wget https://github.com/shomichiru/djbdns/raw/master/djbdns-1.05.errno.patch wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz tar xvfz djbdns-1.05.tar.gz cd djbdns-1.05 echo gcc -O2 -include /usr/include/errno.h > conf-cc patch -p1 < ../djbdns-1.05.errno.patch make make setup check
dnscache の設定
ユーザを作成
groupadd -g 530 djbdns useradd -u 530 -g djbdns -d /var/djbdns -s /sbin/nologin dnslog useradd -u 531 -g djbdns -d /var/djbdns/dnscache -s /sbin/nologin dnscache
設置時、自動作成されたディレクトリを再作成
rm -rf /var/djbdns mkdir /var/djbdns
設定ファイルを作成
dnscache-conf コマンドで設定ファイルが作成できます。
許可する IP アドレスを 127.0.0.1、自分自身のみに cache サーバ を利用できるように設定します。
/usr/local/bin/dnscache-conf dnscache dnslog /var/djbdns/dnscache 127.0.0.1
実行すると、/var/djbdns/dnscache の下に env, log, root などのディレクトリが作られます。
dnscache を daemontools のサービスに登録する
ln -s /var/djbdns/dnscache /service # ステータスを確認 svstat /service/dnscache
外部 DNS Cache の使用設定
DNS Resolver 設定 ( resolv.conf ) で nameserver は自分自身 ( 127.0.0.1 ) のみに設定されているので、自分の cache にまだ保存されていないリクエストの場合、問い合せるサーバ ( Rootネームサーバ ) を設定します。
Root ネームサーバのリスト ( IP アドレス ) をダウンロードするスクリプトを作成します。
vi /var/djbdns/dnscache/root/rootnamesrv.get
#!/bin/sh wget ftp://ftp.internic.net/domain/named.cache > /dev/null 2>&1 awk '$1 ~ /.ROOT-SERVERS.NET/ {print $4}' named.cache > /var/djbdns/dnscache/root/servers/@ sleep 1 rm -f /var/djbdns/dnscache/root/named.cache
rootnamesrv.get ファイルに実行権限を追加して Cron に登録します。
毎月 15日 0時 0分に INTERNIC から named.cache ファイルをダウンロードした後、必要な IP 情報のみ抽出して、そのファイルを更新します。
#実行権限を追加 [root@centos7 root]# chmod a+x /var/djbdns/dnschache/root/rootnamesrv.get [root@centos7 root]# ./rootnamesrv.get # << 問題ないか確認しておく! ... # Cronに登録する [root@centos7 root]# crontab -e 0 0 15 * * /var/djbdns/dnscache/root/rootnamesrv.get &
クエリに応答するネットワークを設定
実際のネットワークを追加しておきます。( 例:192.168.10.0/24 )
[root@centos7 root]# touch /var/djbdns/dnscache/root/ip/192.168.10
FORWARDONLY を設定
[root@centos7 root]# echo 1 > /service/dnscache/env/FORWARDONLY # dnscacheをリロード [root@centos7 root]# /usr/local/bin/svc -t /service/dnscache/
rootnamesrv.get を実行すると、
ルートサーバの IP アドレスが /service/dnscache/root/servers/@ に作成されます。これから dnscache は Resolve リクエストに対して答えを自分が持っていないときは、ここ ( @ ) に記載された外部の DNS サーバにクエリを実行し、その結果をキャッシュした上で、応答するようになります。
dnscache run script を作成
vi /var/djbdns/dnscache/run
#!/bin/sh exec 2>&1 exec <seed exec envdir ./env sh -c 'exec envuidgid dnscache softlimit -o250 -d "$DATALIMIT" /usr/local/bin/dnscache'
dnscache log run script を作成
$ vi /var/djbdns/dnscache/log/run #!/bin/sh exec setuidgid dnslog multilog t s1000000 n20 –'*' +'* stats * * *' ./dnsstatus +'*' ./main chown dnslog:djbdns /var/djbdns/dnscache/log
dnscache cache サイズ調整 ( 任意 )
dnscache は、基本的に1MB のメモリを自分の cache として使用します。
100MB cache に変更する場合、下記のように CACHESIZE と DATALIMIT ファイルを修正します。
echo 10000000 > /service/dnscache/env/CACHESIZE echo 104857600 > /service/dnscache/env/DATALIMIT /usr/local/bin/svc -t /service/dnscache
DNS Resolver 設定を変更
dnscache を利用するため、DNS Resolver 設定を変更します。
[root@centos7 root]# cat /etc/resolv.conf nameserver 127.0.0.1 # << 追加
念のため、dnscache を再起動して確認します。
# 再起動して、 [root@centos7 ~]# /usr/local/bin/svc -t /service/dnscache # 確認 [root@centos7 ~]# /usr/local/bin/svstat /service/dnscache /service/dnscache: up (pid 12254) 57266 seconds
特定のドメインの IP アドレスを検索できるかどうか確認して見ます。(任意)
[root@centos7 ~]# dnsip www.cnn.com 151.101.109.67 [root@centos7 ~]# dnsip www.fsf.org 209.51.188.174
dnscache のログは /service/dnscache/log/main/current で確認できます。
[root@centos7 ~]# tail -f /service/dnscache/log/main/current | tai64nlocal
次は qmail 用の使いやすくて高速なメーリングリストマネージャである ezmlm を設置および設定します。
autorespond-2.0.5 を設置
メールの自動応答機能を有効にします。QmailAmdin 上で「自動応答先」メニューとして表示されます。
cd /usr/local/src wget http://qmail.ixip.net/download/autorespond-2.0.5.tar.gz tar zxvf autorespond-2.0.5.tar.gz cd autorespond-2.0.5 make make install cp autorespond /usr/local/bin
ezmlm を設置
cd /usr/local/src wget http://cr.yp.to/software/ezmlm-0.53.tar.gz wget http://ezmlm.sericyb.com.au/archive/5.1.2/ezmlm-idx-5.1.2.tar.gz tar zxvf ezmlm-0.53.tar.gz tar zxvf ezmlm-idx-5.1.2.tar.gz mv -f ezmlm-idx-5.1.2/* ezmlm-0.53/ cd ezmlm-0.53 patch < idx.patch
MySQL の使用設定
conf-sqlcc、conf-sqlld、conf-sub ファイルを下記のように修正してください。
[root@centos7 ~]# cd /usr/local/src/ezmlm-0.53/sub_mysql [root@centos7 sub_mysql]# vi conf-sqlcc -I/usr/include/mysql [root@centos7 sub_mysql]# cat conf-sqlld -L/usr/lib64/mysql -lmysqlclient -lnsl -lm [root@centos7 sub_mysql]# cd /usr/local/src/ezmlm-0.53 [root@centos7 ezmlm-0.53]# vi conf-sub mysql cd /usr/local/src/ezmlm-0.53 make make man make setup
mysqlclient not found 関連エラーが発生したら、下記のようにソフトリングを掛けた後、再度 make してください。
cd /usr/lib/ ln -s /usr/lib64/mysql .
ezmlm 用データベースを作成
TABLE 作成用 SQL 文を確認
[root@centos7 ezmlm]# /usr/local/bin/ezmlm/ezmlm-mktab /* Main address table */ /* Need varchar. Domain = 3 chars => fixed length, as opposed to varchar */ /* Always select on domain and hash, so that one index should do */ /* primary key(address) is very inefficient for MySQL. */ /* MySQL tables do not need a primary key. Other RDBMS require one. For */ /* the log tables, just add an INT AUTO_INCREMENT. For the address table,*/ /* do that or use address as a primary key. */ create TABLE list ( hash TINYINT UNSIGNED NOT NULL, address VARCHAR(255) NOT NULL, INDEX h (hash), INDEX a (address(12))); ....
画面上に表示された SQL 文 をコピペして使いますが、SQL 文 だけをまとめた ezmlm_db_create_script ファイルを使ってもいいです。
MySQL へ接続して DB を作成
[root@centos7 ezmlm]# mysql -u root -p mysql> mysql> CREATE DATABASE ezmlm; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ezmlm | | mysql | | performance_schema | | sys | | vpopmail | +--------------------+ 6 rows in set (0.00 sec) mysql> use ezmlm Database changed mysql> show tables; # << まだ、テーブルがない状態 Empty set (0.00 sec) # << ここで、先ほどコピーしていたSQL文を貼り付けます。 mysql> mysql> show tables; # << 14個のテーブルが表示される +--------------------+ | Tables_in_ezmlm | +--------------------+ | list | | list_allow | | list_allow_slog | | list_cookie | | list_deny | | list_deny_slog | | list_digest | | list_digest_cookie | | list_digest_mlog | | list_digest_slog | | list_mlog | | list_mod | | list_mod_slog | | list_slog | +--------------------+ 14 rows in set (0.00 sec) mysql> grant all on ezmlm.* to vpopmail; # << vpopmail が ezmlm を使えるように権限を付与 Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> show grants for vpopmail; +--------------------------------------------------------------------------------------+ | Grants for vpopmail@% | +--------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `vpopmail`@`%` | | GRANT ALL PRIVILEGES ON `ezmlm`.* TO `vpopmail`@`%` | | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `vpopmail`.* TO `vpopmail`@`%` | +--------------------------------------------------------------------------------------+ 3 rows in set (0.03 sec) mysql> quit
QmailAdmin で確認する
Postmaster アカウントで接続すると、「自動応答先」「メーリングリスト」「新しい自動応答先」「新しいメーリングリスト」メニューが表示されると思います。それぞれ押下し詳細を確認して見てください。
QmailAdmin は Basic 認証 を掛けておく!
# 設定例: apache2 vi /usr/local/apache2/conf/httpd.conf <Directory "/usr/local/apache2/cgi-bin"> Options Indexes MultiViews FollowSymLinks AllowOverride None ↓↓↓ AllowOverride AuthConfig Limit Order allow,deny Allow from all </Directory> systemctl restart httpd /usr/bin/htpasswd -bc /usr/local/apache2/cgi-bin/.htpasswd username password vi /usr/local/apache2/cgi-bin/.htaccess AuthType Basic AuthName "Please Enter Your Password" AuthUserFile /usr/local/apache2/cgi-bin/.htpasswd Require valid-user
参考文献
djbdns
How to install djbdns
How to run a cache on a workstation
How to adjust the cache size
ezmlm
コメント