インストールメモ
[pop-before-smtp]
1.qpopper の改造
まずは qpopper のソースを取ってくる
ftp.rthunter.gr.jp/pub/unix/src/qpopper/qpopper2_53_tar.Z
2.アーカイブの解凍、展開
# gzip -d qpopper2_53_tar.Z
# tar -xvf qpopper2_53_tar
3.ソースの改造
展開したディレクトリに移動し、pop_pass.c を編集する。
# cd qpopper2.53
# vi pop_pass.c
最後の方の認証成功から return する寸前に, --- で挟まれている 3行を加える。
(--- は入れない事)
/* Initialize the last-message-accessed number */
p->last_msg = 0;
-----------------------------------------------------------
pop_log(p, POP_PRIORITY,
"POPAUTH %s %lu %s %s",
p->ipaddr, (unsigned long)time(0), p->user, p->client);
-----------------------------------------------------------
/* Authorization completed successfully */
return (pop_msg (p,POP_SUCCESS,
"%s has %d message%s (%d octets).",
p->user,p->msg_count, p->msg_count == 1 ? "" : "s", p->drop_size));
4.インストール
あとは普通にインストールして inetd.conf を変更する。
# ./configure
# make
# cp popper /usr/libexec/popper
/etc/inetd.conf に下記の行を追加する。
pop3 stream tcp nowait root /usr/libexec/popper popper -s
inetd に HUP を掛ける。
# kill -HUP [inetd.pid.NO]
5.ログの吐き出し設定
/etc/syslog.conf に下記の1行を追加します。
local0.notice /var/log/popper.log
/var/log/popper.log の作成
# touch /var/log/popper.log
ssyslogd に HUP を送りましょう。
# kill -HUP [syslogd.pid.NO]
popper にアクセスして /var/log/popper.log にログが吐かれる事を確認しましょう。
6.watcher2 の設定
まずは watcher2 のソースを取ってくる
ftp.rthunter.gr.jp/pub/unix/src/watcher2/watcher2.1-5.pl
perl スクリプトそのままなので自分の環境に合わせて書き換えます。
ハンターネットでは下記を書き換えました。
#!/usr/bin/perl <--- perl へのパス
$popperlog = "/var/log/popper.log"; <--- popper のログ
$popauthlog = "/var/log/popauth.log"; <--- watcher2 のログ
$syslogpid = "/var/run/syslog.pid"; <--- syslog.pid の場所
$popauth = "/etc/mail/popauth"; <--- sendmail が参照するデータベース
$makemap = "/usr/sbin/makemap"; <--- makemap の場所
$expire = 600; <--- pop 認証後 smtp を許可する時間(秒)
設定が済んだら動かしてみましょう。
# cp watcher2.1-5.pl /etc/mail/watcher2.1-5.pl
# chmod 755 watcher2.1-5.pl
# /etc/mail/watcher2.1-5.pl &
/etc/mail/popauth.db が出来ていれば OK です。
最終的に sendmail はこの popauth.db を見て smtp 許可するかどうかの判断をします。
7.sendmail.cf の設定変更
ここでは sendmail が普通に動作している事を前提に cf ファイルの変更を行います。
sendmail.cf の先頭の方に --- で挟まれている 1行を加える。
(--- は入れない事)
#F{RoamIP} -o /etc/sendmail.roamip
#C{RoamDom} my.romaing.domain
#F{RoamDom} -o /etc/sendmail.roamdomain
-----------------------------------------------
Kpopauth hash /etc/mail/popauth
-----------------------------------------------
##
## upon MAIL FROM response
##
さらに Scheck_rcpt のセクションに --- で挟まれている 2行を加える。
(--- は入れない事)
# client address check -- accept messages from hosts within allowed domain
R$={RoamIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_roam $4 $| $5
R$* $| $*$={RoamDom} $| $* $| $* $@ $>Check_rcpt_roam $4 $| $5
R$={LocalIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5
R$* $| $*$={LocalDom} $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5
R$={ClientIP}$* $| $* $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5
R$* $| $*$={ClientDom} $| $* $| $* $@ $>Check_rcpt_inside $4 $| $5
-----------------------------------------------------------------------------
R$* $| $* $| $* $| $* $: $(popauth $1 $) $| $2 $| $3 $| $4
ROK $| $* $| $* $| $* $@ OK
-----------------------------------------------------------------------------
R$* $| $* $| $* $| $* $: $>Check_rcpt_local $3 $| $4 remove client info
R $@ OK destination is local
R$* $@ $>Check_rcpt_outside $1
以上で sendmail.cf の変更が終わりました。
sendmail に HUP を掛けて動作試験をしましょう。
8.動作試験
/etc/popauth に記載されていない IP アドレスから、設定した sendmail に向けて不正中継
メールを送って、reject されれば OK です。
次に pop 認証を行ってから再度中継メールを送って、中継される事を確認しましょう。
中継後、指定の時間が過ぎれば中継不可となります。
<参考> http://www.kuee.kyoto-u.ac.jp/~kitano/popauth/