2007年03月25日

postgreyをセットアップ

最近またspamが増えてきて困るという人が出てきた(nsフィルタが効かなくなってきたのもある)ので、まだ手を付けていなかったグレイリストを導入してみることにした。

現在運用しているPostfix MTAにベストマッチするのはpostgrey。Debian stable向けには、sarge標準のもの、volatileのもの、sarge-backportsのものがある。sarge-backportsのほうが新しいが、安定感を考えるとvolatileにしておくのがよさそうだ。

deb http://ftp.jp.debian.org/debian-volatile sarge/volatile main

postgreyパッケージのdebconf設定はとりあえずデフォルトのままに。ひととおりのホワイトリストは/etc/postgrey/whitelist_clients(接続してくるメールサーバに対するリスト)と/etc/postgrey/whitelist_recipients(宛先メールアドレスに対するリスト)が用意されている。ローカルのものは.localを付けて、たとえば/etc/postgrey/whitelist_clients.localというのを作り、ここに書いていく(recipientsは追加する必要があることはユーザーサポート以外はほとんどなさそう)。

まぁたとえばこんな感じで。複数の範囲を示すのに正規表現を使うこともできるし、個々のアドレスまたはホスト名を指定することもできる。

/^.*\.linux\.or\.jp$/
/^.*\.debian\.or\.jp$/
swordman.kmuto.jp

ホワイトリストファイルを更新したら、そのたびに/etc/init.d/postgrey reloadを実行して適用させておく。さて、ではこのグレイリストを有効にする段に。これは簡単で、/etc/postfix/main.cfのsmtpd_recipient_restrictions(受信時の制限設定)の最後にでもpostgreyを参照するようにしてやればよい。

smtpd_recipient_restrictions = permit_mynetworks, ... ,check_policy_service inet:127.0.0.1:60000

/etc/init.d/postfix reloadをして有効にする。これで、ホワイトリストにないところからSMTP送信要求がくると、300秒の拒否期間ができる。まっとうなMTAであれば再送するので、遅延する以外は問題ない(正常と診断されたMTAから5回正常送信があると、自動ホワイトリストにも登録される)。ボット化してるような大量送信spammer MTAでは再送はほとんどしないので、そのままサヨウナラ。

機構上メーリングリストにくるようなspamは避けられないけど、最近のspamへの対処としてはけっこう効果はありそうだ。ときどきはpostgreyreportでログを見てホワイトリストに入れたほうがよいホストがないか確認しておくのがよいだろう。

運用してしばらく経って、1つ罠に気付く。このgreyを動かしているサーバにssmtpを使って送出させているホストがあり、かつこれをホワイトリストに入れるのを忘れていたため、再送できずに消失したメールがあった(コミットメールなので大したことはないが)。内部でメールを送出するような独自デーモンを運用しているケースでは注意が必要だ。

また、携帯電話メールからの連絡など、今すぐ返事がほしいのにgreyで遅延というのも困るので、そういうアドレスは事前にリスト化してgreyを通さずに届ける必要がある。たとえば現在の環境ではpcre(postfix-pcreパッケージが必要)のテーブルを作って、(check_policy_serviceよりも前に)許可アドレスにOKを出すようにした。smtpd_recipient_restrictions = ... ,check_sender_access pcre:/etc/postfix/pcre_rcpt_table とかして、このファイルには「/^もげもげ@ezweb\.ne\.jp$/ OK」という風に書いておく。OKの代わりにREJECTとすればとっとと蹴るようにもできる。まぁhashマップでもいいんだけど、PCREのほうが正規表現で簡単に書けてrehashも必要ないので。