OpenBSDとspamdでスパムを減らす

 勢いの衰えないスパムメールの問題は、皆さんもご承知のことだろう。考えられる解決策のほとんどすべては、メールサーバによって受信メッセージをスパムか正当なものかに分類して適切な措置(削除または転送)を取るというものだ。この方法の問題点は、結局メールサーバ側に余分なリソース消費を強いていることにある。ここでは、スパムがメールサーバに届かないようにすることでこうしたリソースの使用を最小限に抑え、それでいて従来と同様の結果が得られる方法を紹介する。

 この方法にはOpenBSDプラットフォームが使えるが、その理由は2つある。

  1. OpenBSDはセキュアで安定している。
  2. OpenBSDにはスパムの送信を食い止めるツールが付随している。それがSMTP(Simple Mail Transfer Protocol)サーバを模倣したspamdというツールで、SMTP接続を受けて送信者がスパマーかそうでないかを判断する。

 spamdは、電子メール用のコンテンツアナライザではない。電子メールのペイロードを実際に調査するわけではないからだ。spamdが行うのは送信者自体がスパマーかどうかの判断であり、しかもこの判断はそもそも電子メールがメールサーバに届く前に行われる。spamdは本来のメールサーバの手前に存在し、SMTP対話の内容を参照する。spamdは、SMTPのレベルで動作するため、sendmail、Postfix、exim、gmail、さらにはMicrosoft Exchange Serverなど、RFC 2821準拠のあらゆるSMTP MTAと連携させることができる。SpamAssassinのような電子メール用のコンテンツアナライザの機能を補うのにも適している。

 smapdの利用する主な手法の1つが、グレイリスティング(greylisting)という比較的新しい手法である。これにより、すべてのメールが最初は「一時的な障害が起こったので、後で再試行してください」という意味のSMTPエラー451によって拒否される。適切な振る舞いをするSMTPゲートウェイであれば、RFC 2821の規則に従って確実に後で再送を試みる。ところが、ほぼすべてのスパマーの手口では、再送が行われない。送出するスパムの数の最大化が狙いだからだ。

 このグレイリスティングの手法では、spamdにとって未知のメール送信者のすべてにエラーコード451が返される。また、設定された時間内(デフォルトは25分)に同じ送信者からメールの再送があると、引き続きこのエラーコードを返されるが、この処理は以下の3つのフィールドに基づいて行われる。

  1. 送信側のIPアドレス
  2. メールヘッダのFrom:フィールド
  3. メールヘッダのTo:フィールド

 タプル(tuple)と呼ばれるこの3項目は、遮断状態に置かれる。つまり、25分間の遮断が終了する前に送信者が再送を試みると、送信者には再びコード451のエラーが返されるわけだ。遮断の期限が過ぎると、送信者は一時的な「ホワイトリスト」に入れられ、この状態が数時間(デフォルトは、最初の25分間の遮断を含めて4時間)続く。これにより、正しい振る舞いをするMTAは再送に成功し、そのメールはspamdを通って本来の受信側MTAに届けられる。

 spamdは、「ターピッティング」(tarpitting)、つまりスパマーの時間を浪費させるためにその通信を遅延させることで、既知のスパマーに対処することもできる。既知のスパマーが送信を試みると、spamdがTCPウィンドウのサイズを1に縮小して1秒あたりの通信を1バイトに制限し、接続を妨げるというものだ。ターピッティングにかかった場合、スパマーのMTAはメッセージ1つの送信に10分もかかることがある。通常、私が見かけるのは、スパマーの送信に400~550秒(6分半~9分強)かけさせるというものだ。

 spamdが(スパマーにとって)さらに厄介なのは、それだけの時間を浪費しても、決してスパムを本来のSMTPサーバに通そうとはしないことだ。それどころか、spamdからはエラーコード450の「メールボックスが一杯です」というメッセージが返ってくる。スパマーは、何度再送を試みても、毎回ターピッティングにはまり込むことになる。以前、1日半にわたって再送を続け、その度に私の仕掛けたターピッティングにかかっていたスパマーがいたが、そのスパムメッセージが私のもとに届くことは一度もなかった。

 ターピッティングの実装は、別のスパム対策ツールでよく用いられているSPEWS/Spamhausブラックリスト上の送信者に対して行うことができる。spamdのデフォルト設定では、以下のIPアドレスに対して自動的にターピッティングが行われるようになっている。

  • SPEWSのLevel 1およびLevel 2のリストに含まれるすべてのIPネットブロック
  • 中国のすべてのIPネットブロック
  • 韓国のすべてのIPネットブロック

 SPEWSのリストが対象になっていることに説明はいらないだろう。中国と韓国がブロック対象になっているのは、非常に多くのスパムメールサーバがこれら2つの国に置かれているというのに両国のISPや行政機関がその排除にまったく関心を示していないように見えるからだ。私の設定には、同様の理由からロシアのIPネットブロックも追加してある。

 ブラックリストに載ったネットワークにいるスパマー以外の送信者のメールをspamdに通させる必要がある場合は、そうした送信者のメールサーバを、どんなグレイリスティングやブラックリスティングの機能よりも前に処理される永続的なホワイトリストに追加することができる。これにより、彼らのメールサーバについては、グレイリスティングやブラックリスティングの処理を迂回させ、直接受信側のメールサーバにつなげることが可能になる。

 spamdには、ほかにも便利な点がある。まず、メールログを監視したり、自分がメールを送った人の宛先側メールサーバに対して自動的にホワイトリスト処理を行ったりできるオプションが用意されている。

 また、OpenBSDを使ったグレイリスティングのもう1つのオプション機能が、グレイトラッピングと呼ばれるものだ。スパマーは、スパムの犠牲者を探し求めて、インターネット上のWebページからメールアドレスらしきものは何でも「収集」している。そのため、本来のメールサーバには存在しない偽のメールアドレスを自らのサイトに載せておけば、この偽のアドレス宛てにメール送信を試みてくる人物がスパマーだとわかるわけだ。spamdは、SMTPの”RCPT TO:”情報の受信者を、事前にチェックを行うように指示した偽の受信者メールアドレスリストに照らしてチェックする。fakeaddress@mydomain.comというアドレスが見つかれば、spamdはすぐさまそのメールサーバのIPアドレスをターピッティングの対象にする。

 spamdには、不満に思う点があまり見当たらない。では、どうすれば使えるようになるのだろうか。それについては後日紹介する予定だ。

NewsForge.com 原文