メイン

2008年04月21日

Spam対策

さすがにうんざり
とにかくすごいメールの数々・・・・どのくらいすごいかっていうと、あまりにすごくてサーバーが堪えられないので通常は受信しないようにしているのですが、ちょっと設定を変えて受信「可」にした瞬間にスパムがほんの一呼吸、3秒程度でしょうか、その間に200~300通届く。この数をまともに受けてたら、受信してもバウンスしてもサーバーは耐えられません。というわけで通常はそれらは無視しているのですが、ちゃんとスパム対策する事にしました。
あ、メールサーバーは数台管理してるのですが特にひどいのはそのなかの一つです。
以前からproscanというアンチウィルス兼アンチスパムのソフトがあるのですが、有料でサーバー用って結構高いんですよね。このproscanはsmtpが受けたあとMTAでキューを処理するのですが、この時点でサーバーの負担があるように感じます。そのproscanでも取り入れてるらしいスパムの判定理論が「S25R方式」でここに公開されています。これを利用すると結構な確率でスパムを排除できます。
私の場合qmail愛好者なのでこちらが参考になりますgreylistingは英語のページをみてインストールします。
こちらのシステムはsmtpのリクエストに対してのレスポンスなのでMTAが発動される前の段階なので理屈として受入れられます。早速これを試してみました。
さて、ここでも問題がでてまいります。やっぱりあまりのメールの数にサーバーが間に合わないっていうこともありますが、グレイリストといって定期的に繰り返すsmtp搬送を調査する機能のためgreylistというディレクトリにファイルをため込むのですがあまりにたくさんのファイルが作られる為にそこのリストを取り出すだけでもレスポンスがめちゃくちゃ下がるという事。想定を越えすぎてるのか?
ということでそのシステムから派生した、smtp応答までの遅延機能まで実装したこちらのシステムをつかわせて頂きました。
遅延機能でスパム発信元を排除するのがひとつと、グレイリストがテキストファイルなので扱いやすい。



これでもやっぱりメール判定と配送処理が間に合わないんだねー。とにかくブラックリストを積極的に作ってやるか・・・
という事で、定期的に maillogを調べて複数回に渡り異常な結果をlogに記録されている配送ホストはblacklistにリストアップするスクリプト、作りました。perlいじるの数年ぶり。
maillogったって、1日で100MBくらいにはなるので半端じゃない。
これでlogrotateを毎日実施するように設定し、定期的に昨日、本日のログを調査し、動的にblacklistを作成。
これで連続して数十回のスパムを送り込んでくるホストは速やかに排除する事ができるようになりました。

そこでクローズアップされるのは、正常な中継サーバーから送られてくるスパム。これはs25r技術じゃあ排除できないのです。これもうるさい。
いちいちblacklistに突っ込んでたんだけどあまりにうるさいので、qmailフル活用、適当なアドレスを作って.qmailにスクリプトを起動させて、そこにブラックリストのIPを送ると勝手にblacklistのテキストに書き出すスクリプトまで用意しました。
面倒だけど、だいぶいい具合になってきたなあ。