Postgreyインストールメモ

環境

作業手順

以下,root権限で作業を行う.
前提条件として,csup, portupgradeなどを用いてFreeBSD 5-STABLE上に最新のPortsを用いたアプリケーション環境を導入済みであること.

(1) Postgreyを導入

# cd /usr/ports
# portinstall mail/postgrey
  :
---> Starting post-install script:
---> Keeping existing config file /usr/local/etc/postfix/postgrey_whitelist_clients
---> Installing new config file /usr/local/etc/postfix/postgrey_whitelist_recipients
===> Installing rc.d startup script(s)
===>   Registering installation for postgrey-1.27
===>  Cleaning for pkg_install-20060113
===>  Cleaning for p5-Net-Server-0.96
===>  Cleaning for p5-IO-Multiplex-1.09
===>  Cleaning for p5-BerkeleyDB-0.31
===>  Cleaning for perl-5.8.8
===>  Cleaning for db44-4.4.20.4
===>  Cleaning for ldconfig_compat-1.0_8
===>  Cleaning for postgrey-1.27
[Updating the pkgdb <format:bdb_btree> in /var/db/pkg ... - 78 packages found (-0 +3) ... done]
# 

portinstallの過程で,ユーザ "postgrey" およびグループ "postgrey" が自動的に作成される.

(2) インストールされたファイル群の確認

# pkg_info -L /var/db/pkg/postgrey-1.27/
Information for postgrey-1.27:

Files:
/usr/local/sbin/postgrey
/usr/local/sbin/postgreyreport
/usr/local/etc/postfix/dist-postgrey_whitelist_recipients
/usr/local/etc/postfix/dist-postgrey_whitelist_clients
/usr/local/etc/rc.d/postgrey.sh

manは無い.仕方が無いので,以下サイトを参考に設定を進める.

(3) 設定ファイルを編集 (Postgrey)
/usr/local/etc/postfix以下に以下2ファイルがある.

  1. dist-postgrey_whitelist_clients
  2. dist-postgrey_whitelist_recipients

それぞれ以下のようにコピーする.

# cd /usr/local/etc/postfix
# cp dist-postgrey_whitelist_clients postgrey_whitelist_clients
# cp dist-postgrey_whitelist_recipients postgrey_whitelist_recipients

postgrey_whitelist_clientsには,よく(SPAMではない)メールが届くSMTPサーバや,ドメイン名を登録しておくとよい.登録することで,Greylistingの対象外にすることができる.

postgrey_whitelist_recipientsは,デフォルトのままでいいと思う.お好みで.

(4) プログラム起動用シェルスクリプトを確認 (Postgrey)

# lv /usr/local/etc/rc.d/postgrey.sh

起動用シェルスクリプトのファイルを読むことで,以下のことがわかる.

  • Graylistingデータベースが保存されるのは /var/db/postgrey以下
  • Port 10023でLISTENする.(UDPTCPかは不明)
  • /etc/rc.confに少なくとも以下を設定しなければ起動しない.
postgrey_enable=YES

(5) /etc/rc.confを編集
以下の行を追加する.

postgrey_enable=YES

(6) postgreyを起動

# /usr/local/etc/rc.d/postgrey.sh start
Starting postgrey.
#

きちんと起動したか確認

# ps xa|grep postgrey
51360  ??  Ss     0:00.01 /usr/local/sbin/postgrey --pidfile=/var/run/postgrey.
# sockstat |grep postgrey
postgrey perl5.8.8  51360 4  dgram  -> /var/run/log
postgrey perl5.8.8  51360 5  tcp4   127.0.0.1:10023       *:*
# netstat -na -f inet | grep 10023
tcp4       0      0  127.0.0.1.10023        *.*                    LISTEN
#

礼儀正しく,localhostのみでLISTENしている.大変よろしい.
TCP:10023を使っているようだ.

この段階では,まだGraylistingが有効になっていないことに注意.Graylistingを有効にするためにはpostfixへの設定変更が必要になる.

(7) 設定ファイルを変更 (Postfix)
main.cfに以下の行を追加.

smtpd_recipient_restrictions =
        permit_mynetworks, reject_unauth_destination,
        check_policy_service inet:127.0.0.1:10023

postconf | grep smtpd_recipient_restrictionsで念のため確認.

(8) Postfixへ設定変更を反映

# postfix reload
postfix/postfix-script: refreshing the Postfix mail system

(9) 動作確認
以下のコマンドでSMTPサーバの出すログを監視する.

# tail -f /var/log/maillog

無事,Graylistingが効いた場合には以下のようなログが出力される.

Apr 16 19:02:30 mera postfix/smtpd[51492]: NOQUEUE: reject: RCPT from *****.****.****[***.***.***.***]: 450 4.7.1 <****@****.****>: Recipient address rejected: Greylisted, see http://isg.ee.ethz.ch/tools/postgrey/help/****.****.****.html; from=<****@****.****> to=<****@****.****> proto=SMTP helo=<****.****.****>

別のメールサーバからためしにメールを送ってみて,5分経ったらメールを受信するさまを確認するとよいかも.

ToDo

Postgrey動作状況の監視

会社とかで使うなら,Postgreyデータベース件数の監視や,ファイル容量の監視などの定常監視が必要になると思う.いずれ監視スクリプトものを仕込みたい.