夏休みの自由研究:スパム退治

Pocket

入院でほんのわずかしか残らなかった夏休み。
せっかくなので何か有意義なことに使いたいと思いまして、かねてから計画していたサーバレベルでのスパム対策を実験してみることにしました。
実を言うと、会社に来るスパムがあまりにひどい量なのでどうにかしなきゃと思って、以前からいろいろ対策方法を調査していたんです。
でも、いきなり会社のサーバに導入してトラブったら洒落にならないので、今回とりあえず自前のサーバ(polaire.org)で実験してみて、うまくいったら会社でもやってみようという、そういう腹なのでございます。
まあ、もちろんうちのサーバにもけっこうスパムは来るので、うまくいけば一石二鳥というわけで。
以下、今日調べたこととやったことのメモです。


■対策の方針と手法
サーバレベルでのスパム対策といっても古今東西様々な方法が開発されていますが、今回は
 ・メーラー側での“賢い”処理に期待しない=スパムメールはそもそも受信しない
 ・「false negative」(スパムメールを受信すること)があってもいいから、
  「false positive」(受信すべきメールを誤って拒否すること)は起こさない
というけっこう虫のいい方針で行くことにしました。
で、いろいろ調べてみたところ、false positiveを防ぐという観点から着目すると「S25R」「tarpitting」「greylisting」という3つの手法を併用するが一番良さげなようです。
S25Rについての技術的な文書はこちら
greylistingについての技術的な文書はこちら(英文)
tarpittingについては……ちゃんとした文書がないんですよね。テクニックとして単純だから?
S25R+tarpitting+greylistingという手法については、こちらのページが詳しいです。今回、大いに参考にさせて頂きました。
どういうものなのか、ものすごくかみ砕いて説明すると、
1.メールを送ろうとしている相手の名前がメールサーバっぽいかどうか調べる(S25R)
2.相手がメールサーバっぽくない名前(=ウイルスで操られてるボットの可能性あり)だったら、「あんた怪しいからちょっと待て」と送信の受付をしばらく保留する(tarpitting) → 大抵のボットはここで我慢できずに送信をあきらめる
3.相手がしぶとく待っていたら、もしかしたら真っ当なメールサーバかもしれないので「念のためにまた後で送ってね」と一度追い返す(greylisting) → ボットだったら再送してくる可能性は低い
4.追い返した相手がもう一度メールを送ってきたら、真っ当なメールサーバからのメールとみなして受信する
てな感じです。
要するに、「世の中のほとんどのスパムはボットから送信されている」という仮定の下に、真っ当なメールサーバからのメールのみを受信することを目指しているわけです。
逆に言うと、真っ当なメールサーバから送信されたスパムには完全に無力です。とほい。
■実装について
うちのサーバ(と会社のサーバ)はqmailを使っているので、qmail用のgreylistingツール「qgreylist」と、それにS25R+tarpitting機能を追加するパッチを使いました。
qgreylistの適用方法やパッチを当てる手順については各々のページを参照して下さい。
qgreylistのページにもあるとおり、qgreylistはSMTP認証とは同時に使えません。
うちのサーバはqmail-vidaでSMTP認証をしていたので、対策として25番とは別のポートを参照する送信専用のqmail-smtpdを別に動かすことにしました。
■実装してみた結果
ログを見る限りだと、かなりの数の接続がS25R+tarpittingで排除されているようで、なかなかいい感じです。
ただ、tarpittingをしのいでから何度も再送を行なってきて、結局greylistingをも抜けてきたボットもいくつか見つかりました。
qgreylistのデフォルトでは2分以内の再送は拒否するようになっている(普通のメールサーバならそんな短時間のうちに再送しないから)のですが、相手のボットが再送を繰り返してくると、2分たった時点でgreylistingの条件を満たしたと見なして受信してしまうのです。
false positiveを警戒する意味で締め付けをゆるくしているのかもしれませんが、RFC2821によれば「再送のインターバルは少なくとも30分は取るべきだ」とありますから、2分以内に再送してくるような“せっかち”な相手は延々とgreylisting地獄にはめてやってもいいような気がしないでもありません。
デフォルトの設定からもっと長くするか、2分以内に再送してきたらまた2分待たせるようにソースを変更してみるか、様子を見ていろいろ試してみたいと思います。
あとは……tarpittingの時間ですね。デフォルトは65秒となっているんですが、taRgreyのページでは125秒くらいが効果的、みたいなことも書かれているので、どうしたものかと少し気になっています。
まだ動かしたばかりなので評価はこれからになりますが、明日以降どれくらいスパムが減っているか、楽しみです。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)