Qmail dnscacheezmlmIMAP over SSLQmail over SSLSMTP over SSL

Qmail over SSL でメール通信を暗号化する〜第 5 篇:dnscache ezmlm 設置〜|CentOS 7

qmail-setup-dnscache-ezmlm Qmail
スポンサーリンク

「Qmail over SSL でメール通信を暗号化する」 は6編に分けてあります。他の記事は ▼ をご参照ください。

ここまでの作業をまとめると、QmailAdmin の WEB インターフェイスで、より簡単かつ便利にメールを設定することができました。また、IMAP over SSLSMTP over SSL を適用して、よりセキュアな Qmail over SSL 環境でのメールの送受信が可能になりました。今回はメールの転送速度に非常に影響を与える dnscache を追加した後、ezmlm を使ってメーリングリスト機能も実装します。

djbdnsQmail の著者である D.J. Bernstein が作った DNSサーバ です。djbdnscacheサーバコンテンツサーバ に分離されていて、ここでは DNS cache サーバである dnscache を設置および設定します。

  • dnscache ( DNS cache サーバ )
  • tinydns ( DNS コンテンツサーバ )

事前準備

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 コマンドで設定ファイルが作成できます。

書式:dnscache-conf dnscacheの実行ユーザ dnscacheのログユーザ dnscacheのディレクトリ 許可するIPアドレス

許可する 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/@ に作成されます。これから dnscacheResolve リクエストに対して答えを自分が持っていないときは、ここ ( @ ) に記載された外部の 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 に変更する場合、下記のように CACHESIZEDATALIMIT ファイルを修正します。

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 アカウントで接続すると、「自動応答先」「メーリングリスト」「新しい自動応答先」「新しいメーリングリスト」メニューが表示されると思います。それぞれ押下し詳細を確認して見てください。

http://example.com/cgi-bin/qmailadmin
qmailadmin-ezmlm-autorespond
▲ qmailadmin ezmlm + autorespond

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

コメント

タイトルとURLをコピーしました