大量のSpamを減らすためにpostgreyを使うことにした。
postgreyは、送信されてきたメールを一旦拒否し(greyとし)、再送があった場合のみ受け取るというspam対策greylistingの実装のひとつ。
postfix自体も、greylist.plというgreylistingを持っているが、postgreyのほうが高機能なためpostgreyを使う。
公式サイト: Postgrey - Postfix Greylisting Policy Server
日本語サイト: Postgrey(Postfix Greylisting Policy Server)日本語ポータル
基本的な動作は、CLIENT_IP、SENDER、RECIPIENTの3つを監視記録し、5分以上前に送信された記録があれば再送と判断し、受け取る。
5分以内の送信記録があれば、再度拒否する。
35日で記録はexpireされる。
CentOS5では、yumでdagからインストールできる。
# yum install postgrey
そして、postgreyの接続ポートを指定する。
# vi /etc/init.d/postgrey
OPTIONS="--unix=$SOCKET --inet=10023"
また、postfixがpostgreyを使うように変更する。
# vi /etc/postfix/main.cf
smtpd_recipient_restrictions = permit_mynetworks, ..., check_policy_service inet:127.0.0.1:10023
postgreyを起動する。
# /etc/inet.d/postgrey start
修正したmail.cfをpostfixに読み込ませる。
# postfix reload
とりあえず、しばらくログを監視してみる。
# tail -f /var/log/maillog
とりあえず、記録されていないものはrejectされる。
Feb 10 17:01:35 tower postfix/smtpd[19810]: connect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:01:35 tower postgrey[19744]: action=greylist, reason=new, client_name=magdeliv01.itmedia.co.jp, client_address=202.218.219.97, sender=magowner-mailmag-mobileex@itmedia.co.jp, recipient=xxx@rally.or.jp
Feb 10 17:01:35 tower postfix/smtpd[19810]: NOQUEUE: reject: RCPT from magdeliv01.itmedia.co.jp[202.218.219.97]: 450 4.2.0 <xxx@rally.or.jp>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/rally.or.jp.html; from=<magowner-mailmag-mobileex@itmedia.co.jp> to=<xxx@rally.or.jp> proto=SMTP helo=<magdeliv01.itmedia.co.jp>
Feb 10 17:01:35 tower postfix/smtpd[19810]: disconnect from magdeliv01.itmedia.co.jp[202.218.219.97]
そして、一度送信されて拒否したものは、記録によりpassされる。
Feb 10 17:39:09 tower postfix/smtpd[20160]: connect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postgrey[19744]: action=pass, reason=triplet found, delay=2254, client_name=magdeliv01.itmedia.co.jp, client_address=202.218.219.97, sender=magowner-mailmag-mobileex@itmedia.co.jp, recipient=xxx@rally.or.jp
Feb 10 17:39:09 tower postfix/smtpd[20160]: 4323D19802D: client=magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postfix/cleanup[20164]: 4323D19802D: message-id=<20090210073335.9273.qmail@magdeliv01.itmedia.co.jp>
Feb 10 17:39:09 tower postfix/qmgr[19807]: 4323D19802D: from=<magowner-mailmag-mobileex@itmedia.co.jp>, size=13083, nrcpt=1 (queue active)
Feb 10 17:39:09 tower postfix/smtpd[20160]: disconnect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postfix/local[20165]: 4323D19802D: to=<xxx@rally.or.jp>, relay=local, delay=0.38, delays=0.16/0.03/0/0.19, dsn=2.0.0, status=sent (delivered to maildir)
正しく動作しているようなら、
postgreyを常時起動するように、変更。
#chkconfig postgrey on
また、postgreyのdbの中ものぞいてみる。
dbファイルへの登録はある程度(1時間程度?)遅延がある。
BerkeleyDB Version4を使っているので、db4-utilsもインストール。
# yum install db4-utils
# db_dump -p /var/spool/postfix/postgrey/postgrey.db
83.10.241.0/limbekcs@aegon.hu/webmaster@rally.or.jp
1234254582,1234254582,5
ただし、greylistingでは、最初はすべてのメールに対して再送要求を行なうため、メール配信の遅延が生じる。
そのための対策はあとで。