要約
Postfix でメールサーバを運用している管理者は、すべからく postscreen(8) を有効化しておくべし。
背景
3000人規模のアクティブユーザがいるメールサーバを Postfix で運用しています。今回、遠隔地 DC にラックを借りて設置していたメールサーバを廃止して、パブリッククラウド上の仮想マシンに引っ越しすることになり、それに併せて Postfix の設定の棚卸しを行ないました。その過程で、postscreen(8) を発見。
SMTP サーバがグリーティングメッセージを返す段階で遅延させて、spam ボットに接続をあきらめさせる?ああ、Starpit みたいな対策か。まあ、あれもすぐに効かなくなったからなあ…
と思いつつ、半信半疑で有効化してみました。すると、約8時間で以下のような成績になりました。
分類 | 件数 |
---|---|
postscreen によって弾かれたメール | 11988 |
smtpd によって弾かれたメール(送信者ドメインが見つからない等) | 1982 |
実際に受信・配送されたメール | 7684 |
実に55%もの負荷低減です。Starpit よりもさらに設定が簡単なので、Postfix でメールサーバを運用している方は、とりあえず設定しておいて損はないと思います。
設定
以下のように、/etc/postfix/master.cf
で smtp の行をコメントアウトして、postscreen の行と smtpd の行を有効化します。基本的な設定は、これだけです!
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
#smtp inet n - y - - smtpd
smtp inet n - y - 1 postscreen
smtpd pass - - y - - smtpd
後は、好みの設定をいくつか。筆者の環境では、以下のように、自組織のネットワークに対するホワイトリストに登録し、グリーティングメッセージの遅延を少し増やし(デフォルト6秒→15秒)、グリーティングメッセージを無視するなどプロトコルエラーをした接続元は接続拒否、という設定をしています。
postscreen_access_list = permit_mynetworks, cidr:/etc/postfix/postscreen_access.cidr
postscreen_greet_wait = 15s
postscreen_greet_action = enforce
192.0.2.0/24 permit