2004/9/30 (lastupdate 2005/10/5)
Selective SMTP Rejection (S25R) - 阻止率99%のスパム対策方式の研究報告 を読んで、簡単な仕組みながら効果が高いと思いました。
これはFQDNのパターンから、PPPなどの接続先と思われるところから直接出されているものを拒否することで、スパムやウイルスメールを排除するというものです。
しかし、この報告でも述べられているように、大規模なサイトで運用するには、間違って阻止されてしまうメールのリスクが高く、rejectで再送要求し、それでも再度送ってきたらホワイトリストに登録する、ということが薦められています。
そこで、その運用を自動化するためのスクリプトを書こうと考えていたのですが、よく考えるとそれは、Greylistingそのものだということに気が付きました。
Greylistingという方式については、下記記事を参照ください。
[postfix-jp:03911] Greylisting
つまり、一度必ず再送要求で返して、ちゃんと再送してきたら受け取るというものです。
これを、あやしい接続元に対してだけ再送要求で返せば、Greylistingによる
副作用 - 再送待ちによるメールの遅延や、正しいメール送信元からのメールの排除(まれに再送要求に応じない
メールサーバを使っているところがある) - がなく、スパムも受け取らなくて済むという、いいとこどりのシステムになるはずです。
FQDNのチェックとGreylistingを2重に掛けるからと言って、排除するための条
件がandになるわけですから、排除率が上がるわけではありません。FQDNチェッ
クとGreylistingの排除率が掛けられた率に下がってしまいます。
駆除率を上げるのではなく、フィルタリングによる悪影響を最小限にするため
の追加と考えてください。
ちなみに、自分宛に平均したところ200通/日で届いていた、スパム・ウイルスメールのうち、平均10通程すり抜けてきています。
内訳は、ドメイン名チェックですり抜けたものが7通程、Greylistingのチェッ
クですり抜けたものが3通程となっています。
約95%の駆除率となっています。
このフィルタは接続要求元を逆引きしてパターンマッチ掛けるだけなので、コンテンツフィルタと比較して非常に負荷が軽くなっています。
そのため、これを1次フィルタとして、2次フィルタにClamAV等のウイルスチェックフィルタや、SpamAssassin等のスパムフィルタを用いると、負荷低減という意味でも利用価値があります。
また、ベイジアンフィルタ等を用いたスパムフィルタでは、どうしても誤検出されることがあるので、スパムにより分けられたものを一度チェックしてから捨てることが多いと思います。
一日に届くスパムメールが100通以上もあると、そのゴミ漁りすらうっとおしいのではないでしょうか。
S25Rにマッチする接続元で、かつ再送要求にも応じないような送信元は、ほぼスパムかウイルスと断定してしまってよいと思います。
そういうわかりやすいものを先に捨ててしまうことで、一日に届くスパムはこのフィルタで100通から10通以内に減りますから、その後のフィルタで引っ掛けたゴミを漁るときに、楽になる効果も狙えます。
Postfixは2.1よりSMTPDアクセスポリシーという機能が使えるようになり、外部のポリシーサーバにより、接続の許可などを行わせることが出来るようになっています。
Postfix SMTP Access Policy Delegation
この機能を使って、Greylistingの実装がサンプルで付いてきているのですが、その他にも、
Postgrey - Postfix Greylisting Policy Server
というものが公開されています。
postgrey では whitelists が指定できるのですが、これをちょこっと改造して、まず先にチェックすべき接続元、ここでは greylists と呼ぶとすると、これのどれかに合致しているなら、チェックする必要がある、という機能を追加しました。
そのほかに、qmail用にもいくつかgreylistingの実装が公開されており、そのうちの一つ、
qgreylist - simple greylisting for qmail
に対してのS25R対応パッチ、Qgreyも作成しました。
postgrey-1.16用
パッチ本体:postgrey-namecheck
このパッチを使ったインストールメモを参照し
てください。
また、こちらではmomonga用のrpmを公開いただいています。
[linux] Rgrey - S25R + postgrey パッチ - 寝言に相槌日記フォ〜!!! (2005-09-23)
postgrey-1.21-1m.nosrc.rpm