(追記)
このStarpitの課題点を改善したtaRgreyというものを提案しています。
こちらのほうがいろいろな点でよりベターなものになっていますので、こちらのエントリーをご覧いただいた後は、このエントリーもご確認下さい。
taRgrey - S25R + tarpitting + greylisting (tarpit + greylist policy server)
モーグルとカバとパウダーの日記 - taRgrey - S25R + tarpitting + greylisting
(修正 2009/05/19)
現時点でのスパムに対応するように遅延時間を85秒に変更しました。またS25RのパターンをIPv6での誤検出が無いように変更されたのを、今更ながら反映しました。
Starpitというスパム対策方法を提案します。*1
これはMTAで「ほぼ誤検出無く」93%程度のスパムを排除できる手法です。さらに特定業者フィルタと組み合わせて98%強の排除率にすることが出来ます。(2006/7 時点で)
S25Rという接続元IPのFQDNから動的IPを見分けるパターンにマッチするものだけ、tarpitting*2という「返答の遅延」を掛けることで、スパム送信側が時間を待ちきれずに勝手に接続を切る*3、というものです。
ですから正確には、スパムを拒否しているのではなくて、スパム送信側が勝手に送信をやめているということになります。
同様な手法でRgreyという、S25Rにマッチするものだけgreylisting(一度再送要求を出し、再送してきた場合は受け取る)を掛ける、という手法を提案していますが、それのtarpitting版と考えても良いでしょう。
S25Rにマッチするような動的なIPから送ろうとしているメールで、かつ通常のMTAではタイムアウトが5分と設定されている*4ところを、例えば1分以内で送信するのをやめてしまうようなメールサーバの場合、ほぼスパムと断定出来ると考えられます。
自宅サーバなど動的IPからの送信の場合でも、通常のMTAを利用している場合はtarpittingでタイムアウトしないため、問題なく送信することが出来ます。
弊社のメールサーバではこの設定で半年以上の運用実績がありますが、今のところまだ誤検出での問い合わせはありません。
また、もっと大規模(数万アカウント)な環境での5ヶ月ほどの運用では、数件の問い合わせ(しかもほぼDNSの設定ミスによるもの)でした。
Starpitはスパムの排除率ではなく、誤検出や副作用が少なくなることを目標として、まず間違いなくスパムだというものを排除するための1次フィルタとして利用することを想定しているため、単体ではそれほどの排除率は高くありません。
S25R単体での排除率は98%強ほどですが、S25R+tarpittingとすることで93%程度にまで排除率が落ちます。
しかし、他のフィルタ設定を併用することで、排除率も上げることが出来ます。
Starpit+Rgreyという構成では96%強の排除率でした。
Starpit+特定業者フィルタでは誤検出を増すことなく98%程の排除率でした。
tarpittingを掛ける時間や他のフィルタを併用した場合の、スパム排除率等のグラフ (小さくて見にくいですが、紫の線が最終的なスパムの検出率で、一番右の結果が、Starpit90s+特定業者フィルタのものになります。)
さらに排除率を上げるために、後段に検出手法が全く異なるベイジアンフィルタなどのコンテンツフィルタを利用することも効果的で、コンテンツフィルタの負荷低減や人間の誤検出確認の負荷*5にも効果が有ります。
また、Starpitではsmtpdプロセス数の増加が起るため、非常に負荷の高いメールサーバには向かない場合もあります。
その場合は、StarpitではなくRgreyのみで運用したほうが良いかもしれません。
そのサーバの状況や運用ポリシーに合わせて、どういう組み合わせで利用するかを決定すると良いでしょう。(参考 RgreyとStarpitの比較)
*1:Postfix2.3の正式版が出てから書こうと思ってたんですが、実は何度か日記やコメントにちょろっと書いてたんで、少しずつStarpitとその関連の情報をまとめることにしました。
*2:throttlingやgreet pauseなどとも呼ばれる
*3:スパムは時間内になるべく大量にメールを送りたいため、反応の遅いメールサーバには送信をあきらめるように設定されている
*4:RFC2821 #4.5.3.2 Timeoutsでは「RCPT Command: 5 minutes」と規定されている
*5:100通のスパム候補から1通の誤検出を検出するのは手間ですが、10通の中からならだいぶ楽です