新しいスパム対策手法を提案します。
これは、初めて接続してきたIPからのメールは、1日*1以上そのIPがメールサーバとして使われてないと、スパムの可能性が高い、と判断するというものです。
greylistingにほぼ近いですが、再送してきたかを確認するのではなく、IPの生存期間を確認することでスパムかどうかを判断する、というのがミソです。
最近、主に株スパム系のもので、tarpittingやgreylistingだけでなく、ベイジアンフィルタやDNSBLも抜けてくるものがあります。
ちゃんと遅延待ちや再送もするし、画像スパムなのでベイジアンフィルタも抜けるし、DNSBLに登録される前に頻繁に接続を変えて来るみたいで、当然、HELOの特徴だとか、簡単なフィルタでは捉えられないようになっていて、相当やっかいなスパムです。
ただ、S25Rには引っかかります。
つまり、動的IPから出してきており、そして、DNSBLを回避するため、頻繁に接続を繋ぎ直してるように見えます。
以前のエントリーでも書いたのですが、同一IPから1日以上にわたってスパムが出されることはまれです。
だから、greylistingのように、同一IPから同じfromとtoで確認して、ちゃんと再送で送ってきた、というのを見なくても、単にそのIPがこれまでに1日以上にわたってメールを送ろうとしているか、を確認するだけで、ほぼスパムかどうか判別できます。
例えば、1ヶ月くらいのログから、同一のIPを1日以上の期間使っていないところからのメールを抽出すると、99.9%以上スパムになります。
こういうアクセスポリシーサーバを作るのはとても簡単で、実はgreylistingサーバのパラメータを少しいじって(必要ならfromとtoの部分を見ないようにチェックを甘くして)やるだけでOKです。
つまり、再送要求待ちの時間を1ヶ月にして、再送として認めない期間を通常何分とかのところを、1日とか12時間とかにするだけです。
ただ、これだけだと必ず誤検出が起きます。
初めて受け取る「正しい」メールサーバからのメールが、必ず1日とか大きく遅延してしまいます。
これだと副作用として大きすぎるので、最低でもS25Rで引っかかったもののみ、このフィルタを掛けるとかは必要でしょう。この場合には1日ではなくて12時間とか6時間とか、そのぐらいにしておいたほうが良いと思います。
そうした場合でも、大きなメールサーバでは副作用や誤検出が気になると思うので、greylistingの返しをPREPEND使って、これにマッチした場合はスパムの可能性が高いよ、というフラグを渡してやったほうが良いと思います。
で、後段のSpamAssassinでもってフィルタの参考に使うようにします。
これだと画像スパムみたいな、他の手法で落とすのが難しいものも、高確率で落とせるようになるのでは、と期待。
まだ、自分とこでもちゃんと試してないんで、実際に運用してテストしてから詳しい設定方法とかパッチとかについて、まとめる予定。
(関連)
モーグルとカバとパウダーの日記 - 同一IPからスパムが出されている期間
モーグルとカバとパウダーの日記 - taRgrey(S25R+tarpitting+greylisting)というスパム対策のアイデア
ちなみにS25Rを提唱されてる浅見さんのブログでも、再送を認めない期間を長くすることで、再送してくるスパムを排除できるのでは、という同じ方向性のアイデアを書かれています。
S25R雑情報: リトライするスパムをRgreyで蹴る
*1:もしくは、12時間とか6時間とか。なるべく1日以上の長い期間が望ましい。