POP-before-SMTP
サーバー管理の省力化のため、できるだけup2dateでパッケージのアップデートができるように、極力Fedora CORE 1標準のものでPOP-before-SMTPを設定しようと思い、いろいろ調べた結果、http://popbsmtp.sourceforge.net/のpop-before-smtp-1.33-1.noarch.rpmを利用することにしました。
環境
OS :Fedora CORE 1
MTA:sendmail-8.12.10-1.1.1
POP:imap-2002d-3
1.準備
上のサイトからpop-before-smtpのrpmをダウンロードし、インストールします。
#rpm -i pop-before-smtp-1.33-1.noarch.rpm
/usr/share/doc/pop-before-smtp/README.QUICKSTARTを見るとperlのライブラリ?がいくつか必要なようです。
同じディレクトリーにあるgetfromcpanを実行するとソースを持ってきてコンパイルしてインストールしてくれますが、少々修正が必要です。
#perlmod2rpm 143行目
system "rpmbuild -ba $topdir/SPECS/$d{name}.spec"
and die unless $opt_n;
また、Time::HiResについては、ここで持ってくるバージョンよりも、FedoraのFTPサイトに新しいrpmがありますのでそちらを使いました。(既にインストールされてました)
perl-Time-HiRes-1.38-4.i386.rpm
そのため、getfromcpan の84行目〜108行目をコメントアウトしました。(Time::HiResの部分)
※perl-Time-HiResがインストールされていると競合しているというエラーでとまってしまいます。
2.設定
/etc/pop-before-smtp-conf.pl を編集します。
25行目 コメントを外す
$logto = '/var/log/pop-before-smtp';
28行目 認証されたIPアドレスを書き込むdbファイルの指定
$dbfile = '/etc/mail/popauth';
37行目 popで認証されたログが書き込まれるファイルの指定
$file_tail{'name'} = '/var/log/maillog';
74〜76行目 maillogからPOP認証OKのIPアドレスを切り出すスクリプト(コメントを外すだけでOKでした。)
$pat = '^(... .. ..:..:..) \S+ (?:ipop3s?d|imaps?d)\[\d+\]: ' .
'(?:Login|Authenticated|Auth) user=\S+ ' .
'host=(?:\S+ )?\[(\d+\.\d+\.\d+\.\d+)\]';
後いくつか適当にコメントを外しました。(IPを保持する時間等)
sendmail.cfを編集します。
http://popbsmtp.sourceforge.net/sendmail.txtに書かれているものをcfに追加します。
元のcfは、mcから適当に作成。自ドメインを受取るようにすることと、ローカルホスト以外からも接続できるようにした以外はほぼデフォルトのままです。但し、デフォルトでは、SMTP_AUTHが有効になってますので、これは外しました。
3.起動
/sbin/service/pop-before-smtp start
/sbin/service/sendmail restart
4.確認
POPでアクセスした後、/var/log/pop-before-smtp を見てみるとIPが追加されたのが分かります。
※/etc/pop-before-smtp-conf.pl の $debug=1 の場合だけかもしれません。
/usr/sbin/sendmail -bt
>.D{client_addr}**.**.**.** <= **.**.**.**=POPでアクセスしたIPアドレス
>.Dfaaa@bbb.ccc.ddd <= aaa@bbb.ccc.ddd=送信元の適当なアドレス
>check_rcpt 123@456.789 <= 123@456.789=送信先の適当なアドレス
その結果 最後に RELAY とでればOKです。 client_addr をPOPアクセスしたアドレス以外のものに変更してみて送信可能か? とか 送信元、送信先 をかえてみてどうか? 試してみてください。
基本的に、POP認証されたアドレスであれば、送信元、送信先のアドレスはなんでもRELAYとなるはずです。また、POP認証されていないアドレスの場合であれば、sendmailの設定にもよりますが、送信先が自ドメインの場合はRELAYとなり、それ以外はerrorとなるはずです。