これからは、POP 機能を追加して、なおかつ APOP が できるようにします。
/etc/services に pop3 があるか、確認します。
/etc/services
pop3 110/tcp #Post Office Protocol - Version 3
pop3 110/udp #Post Office Protocol - Version 3
/somewhere/qmail-1.03/qmail-popup.c に qmapop 付属の パッチ qmail-popup.c.patch を当て、 qmail を再 make します。 qmail のインストール時にすでに当てている場合は 次に進んで下さい。
% cd /somewhere/qmail-1.03
% patch -s -p1 < /somewhere/qmail-popup.c.patch
% make
% su
Password:
# mv /var/qmail/bin/qmail-popup /var/qmail/bin/qmail-popup.orig
# cp /somewhere/qmail-1.03/qmail-popup /var/qmail/bin/
-u 7797 はなくてもいいです。
# pw useradd -n apopdb -u 7797 -d /var/qmail/apopdb -s /nonexistent
/somewhere/qmail-1.03 から /somewhere/qmapop-0.51 へ、 シェルスクリプト compile と load をコピーします。
# cp -p /somewhere/qmail-1.03/compile /somewhere/qmapop-0.51/
# cp -p /somewhere/qmail-1.03/load /somewhere/qmapop-0.51/
/somewhere/qmapop-0.51/Makefile を一箇所修正します。2行目最後の -lcrypt を付け足します。
checkpassword: checkpassword.o apopauth.o md5c.o load ./load checkpassword apopauth.o md5c.o -lcrypt
% cd /somewhere/qmapop-0.51
% make
% su
Password:
# make install
pop3 と smtp は tcpserver 経由で起ち上げますので、 /etc/inetd.conf ではすべてコメントアウトされていることを 確認します。
/etc/inetd.conf # example entry for the optional pop3 server #pop3 stream tcp nowait root /usr/local/libexec/popper popper #smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd
qmail-smtpd の起動スクリプトファイル、/var/qmail/rc を変更します。
/var/qmail/rc #!/bin/sh # Using splogger to send the log through syslog. # Using qmail-local to deliver messages to ~/Maildir/ by default. # Start qmail-daemons except for qmail-smtpd exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail & echo ' qmail-daemons' # Start qmail-smtpd via tcpserver exec env - PATH=/usr/local/bin/:/var/qmail/bin \ tcpserver -v -u 7791 -g 2108 -x /etc/tcp.smtp.cdb 0 \ smtp qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 3 & echo ' qmail-smtpd' # Start qmail-popup with APOP Patch via tcpserver exec env - PATH=/usr/local/bin/:/var/qmail/bin FORCEAPOP="" \ tcpserver -x /etc/tcp.pop.cdb 0 pop3 qmail-popup my.domain \ /var/qmail/bin/checkpassword qmail-pop3d Maildir & echo ' qmail-popup'以下の行数は、空白行は数えません。
上から10行目の 7791 は qmaild のユーザ ID 番号、 2108 は nofiles のグループ ID 番号です。
14行目の FORECEAPOP="" は POP を許可せず APOP による認証を強制しています。
15行目の -x /etc/tcp.pop.cdb は tcpserver で APOP のアクセス制限をする場合の、制限ルールデータベースを指定するオプションです。 tcp.pop.cdb (名前変更可)の作り方はTCP Serverのページを参照してください。
15行目の my.domain は、メールサーバの FQDN(フルネーム)を入れて下さい。
トラブルシューティング
tcpserver は DNS に接続元と接続先の身元を問い合わせることがあります。 よって、DNS サーバがコケていると、DNS への問い合わせをあきらめるまでの時間、 アクセスが止まっているように見えることがあります。 この時は、一時的に tcpserver をストップして、 inetd から立ち上げるとスムーズにアクセスができます。 ここでは、qmail-popup を /etc/hosts.allow によるアクセス制限付で inetd 経由で立ち上げる方法を示します。まずは、/etc/inetd.conf を書き換えます。
pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup (メールサーバ名) /var/qmail/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir (1行で書く)
次に、/etc/hosts.allow でアクセス制限をします。
これで、123.45.67.* からの qmail-popup へのアクセスが許可されました。
....
qmail-popup : 123.45.67. : allow
....
最後に、今までの tcpserver 経由の qmail-popup を止めて、 inetd 経由の qmail-popup を起ち上げます。
# ps aux | grep tcpserver (止めるべきプロセスの確認)
# kill -9 xxxxx (tcpserver のプロセスを止める)
# killall -HUP inetd
元に戻す場合は上の作業を逆にします。
- /etc/inetd.conf の pop3 の行をコメントアウトする
- inetd を killall -HUP で起ち上げなおす
- qmail-popup を tcpserver 経由で起ち上げる
/var/qmail/rc の該当部分のみ切り取って別のスクリプトを作っておくとよいでしょうなお、ちゃんとアクセスできるか確認するには、pop3 ポートの 110 を telnet で叩いてみるとよいでしょう。
+OK で始まる行の反応が帰って来ればOKです。quit で終っときましょう。
% telnet (ポップサーバネーム) 110
....
+OK ...
quit
この /var/qmail/rc を /usr/local/etc/rc.d あたりにリンクしておきます。
# ln -s /var/qmail/rc /usr/local/etc/rc.d/qmail.sh
# /var/qmail/bin/apop -i
APOP したいユーザ user は、各々次のようにします。
% /var/qmail/bin/apop
Initialising passphrase for mailbox "user"
Please enter the new passphrase:
Please reenter this passphrase:
root が登録する場合は、
です。
# /var/qmail/bin/apop -u (ユーザ名)