APOP 対応にする

これからは、POP 機能を追加して、なおかつ APOP が できるようにします。


/etc/services の確認

/etc/services に pop3 があるか、確認します。
/etc/services
pop3 110/tcp #Post Office Protocol - Version 3
pop3 110/udp #Post Office Protocol - Version 3

qmail-popup.c にパッチを当てる

/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/

ユーザ apopdb の作成

# pw useradd -n apopdb -u 7797 -d /var/qmail/apopdb -s /nonexistent
-u 7797 はなくてもいいです。

シェルスクリプトのコピー

/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/

Makefile の修正

/somewhere/qmapop-0.51/Makefile を一箇所修正します。
 checkpassword: checkpassword.o apopauth.o md5c.o load 
        ./load checkpassword apopauth.o md5c.o  -lcrypt 
2行目最後の -lcrypt を付け足します。

コンパイルとインストール

% cd /somewhere/qmapop-0.51
% make
% su
Password:
# make install

/etc/inetd.conf の確認

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 でアクセス制限をします。
....
qmail-popup : 123.45.67. : allow
....
これで、123.45.67.* からの qmail-popup へのアクセスが許可されました。

最後に、今までの tcpserver 経由の qmail-popup を止めて、 inetd 経由の qmail-popup を起ち上げます。
# ps aux | grep tcpserver (止めるべきプロセスの確認)
# kill -9 xxxxx (tcpserver のプロセスを止める)
# killall -HUP inetd

元に戻す場合は上の作業を逆にします。

  1. /etc/inetd.conf の pop3 の行をコメントアウトする
  2. inetd を killall -HUP で起ち上げなおす
  3. qmail-popup を tcpserver 経由で起ち上げる
    /var/qmail/rc の該当部分のみ切り取って別のスクリプトを作っておくとよいでしょう

なお、ちゃんとアクセスできるか確認するには、pop3 ポートの 110 を telnet で叩いてみるとよいでしょう。
% telnet (ポップサーバネーム) 110
....
+OK ...
quit
+OK で始まる行の反応が帰って来ればOKです。quit で終っときましょう。

起動時に自動的に qmail を起ち上げるには

この /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 するユーザ登録

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 (ユーザ名)
です。


qmail サーバのページ

FreeBSD の部屋


Oct. 14, 2003