意外と簡単。
手元の環境は:
OS: CentOS release 6.4 (Final)
MTA: Postfix 2.6.6
POP/IMAP: Dovecot 2.0.9
Pop-before-smtp パッケージは yum ではインストールできないようなので、Pop-before-smtp プロジェクトのサイト (http://popbsmtp.sourceforge.net/) からダウンロードしてインストールする。
Quickstart Guide が用意されているので、基本的にはそれを元に作業すればOK。
1. Pop-before-smtp のインストールと起動
まずは、必要なパッケージのインストール:# yum install perl-TimeDate perl-Net-Netmask perl-DB_File
Pop-before-smtp のファイル一式をダウンロードして展開したら、ファイルをコピーする (なんと手作業インストール!)。
# cp pop-before-smtp.init /etc/rc.d/init.d/pop-before-smtp
# cp pop-before-smtp /usr/sbin/
# cp pop-before-smtp-conf.pl /etc
設定ファイル
/etc/pop-before-smtp-conf.pl
を編集する。- 以下の行を探し、必要に応じて設定:
# Set the log file we will watch for pop3d/imapd records. #$file_tail{'name'} = '/var/log/maillog';
$pat
を定義していると箇所を探し出し、システムの設定に合ったものをコメントアウト。
今回は Dovecot + syslog なので、以下の部分をコメントアウトした:
# For Dovecot POP3/IMAP when using syslog. $pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' . 'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]'; $out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' . 'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
$pat
の設定が正しいかどうかは、以下のコマンドでテストできる。
# pop-before-smtp --debug --nowrite --reproces
Feb 2 17:21:32 starting up (v1.42)
Feb 2 17:21:32 Using 2 values for pre-authorized networks: `XX.XX.XX.XX/32', `127.0.0.0/8'
Feb 2 03:14:02 startup log-scan complete
Feb 2 03:14:02 ignoring local-net ip=XX.XX.XX.XX
:
Feb 2 15:34:02 ignoring local-net ip=XX.XX.XX.XX
Feb 2 15:44:05 ignoring local-net ip=XX.XX.XX.XX
Feb 2 15:44:41 found ip=XX.XX.XX.XX (-1)
Feb 2 15:54:09 ignoring local-net ip=XX.XX.XX.XX
:
デーモンをスタートしてみる:
# chkconfig --add pop-before-smtp
# chkconfig --list | grep -i pop
pop-before-smtp 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# service pop-before-smtp start
Starting pop-before-smtp: done
正常に動作すれば、データベースファイルが作られる:
# ls -l /etc/postfix/pop-before-smtp*
-rw-r--r-- 1 root root 12288 Feb 2 18:00 /etc/postfix/pop-before-smtp.db
2. Postfix の設定
設定ファイル/etc/postfix/main.cf
を開き、どこかに:check_client_access = hash:/etc/postfix/pop-before-smtp
ついでに、説明書のアドバイスに従って以下の設定も追加:
smtpd_recipient_restrictions =
permit_mynetworks,reject_non_fqdn_recipient,
check_client_access hash:/etc/postfix/pop-before-smtp,
reject_unauth_destination
# service postfix reload
3. 動作の確認
まず、Pop-before-smtp に登録されている IP アドレスのリストを確認してみる。# pop-before-smtp --list
The database holds 0 IPs.
この状態で、メール送信を試してみると、メールーサーバのログに:
Feb 2 19:25:58 localhost postfix/smtpd[3537]: connect from xxx.yyy.zzz[XX.XX.XX.XX]
Feb 2 19:25:58 localhost postfix/smtpd[3537]: NOQUEUE: reject: RCPT from xxx.yyy.zzz[XX.XX.XX.XX]: 554 5.7.1 <aaa@bbb.ccc.ddd>: Relay access denied; from=<k-ishik@ll.mm.nn> to=<aaa@bbb.ccc.ddd> proto=ESMTP helo=<[192.168.0.10]>
Feb 2 19:25:58 localhost postfix/smtpd[3537]: disconnect from xxx.yyy.zzz[XX.XX.XX.XX]
(メール転送が許可されない)
次に、POP 受信した後に試してみる。
# pop-before-smtp --list
The database holds 1 IP:
XX.XX.XX.XX
メール送信も正常に行われる (はず)。