日曜日, 8月 20, 2006

Starpit

 佐藤さんが開発されたStarpitは、S25Rの拒否条件に引っかかる送信元に対してtarpitting(応答遅延)をかけることによってスパムを排除するという方式である。RFC2821では、RCPT TOコマンドに対する応答待ちは5分と推奨されていて、正当なメールサーバの大多数はこれを守っているが、スパム送信プログラムやウィルスの多くは、大量のメールを送信したいがために、応答がないと短時間で送信を打ち切ってしまう。このことを利用して、RCPT TOコマンドに対して65秒ほどの応答遅延をかけることによって、正当なメールは受信しながら、スパムやウィルスのほとんどを排除できるというものである。すでに大規模ネットワークサービスでの運用実績もあるとのことである。
 利点は、Postfixの2.3以降であれば設定だけで実現できるので、付加ソフトウェアなしでホワイトリスト作成の手間をほとんどなくすことができることである。また、リトライによってグレイリスティングを突き抜けることを狙ったスパムも、待ち時間が短いならば排除できる。
 ただ、問題点もいくつか報告されている。
 第一に、応答遅延をかける分だけsmtpdプロセスが長時間持続するので、リソース負荷が増えることである。これを軽減するために、佐藤さんは、送信元が接続を切ったらプロセスを終了させるためのパッチを作成されている。
 第二に、S25Rの拒否条件に引っかかる正当なメールサーバが送信を早々にあきらめることがまれにあることである。これはホワイトリスト登録で救済できるが、佐藤さんは、グレイリスティングとの組み合わせでこれも自動的に救済する方法を研究中とのことである。
 第三の問題は、受信者が複数でRCPT TOコマンドが複数回送られてくると、そのたびに応答遅延がかかってしまうことである。たとえば、応答遅延を65秒と設定していると、10人の受信者に宛てられたメールは受信まで650秒(10分50秒)遅延してしまう。これは、多人数でメールを交換する時にはけっこう切実な問題になる。2回目以降のRCPT TOコマンドに対しては応答遅延をかけないようにPostfixを改造できればよいのだが、可能だろうか。
 Starpitが、Postfixのパッチも付加ソフトウェアもなしに手軽に使えるものになるためには、tarpittingの手法にPostfixがもっと適応してくれる必要があるのではないかと思う。そんなわけで私は、ホワイトリスト作成を省力化できてかつ安定運用を重視するというニーズに対しては、今のところはまだRgreyを推奨したいと考えている。グレイリスティングは、すでに長く使われていて安定した技術だからである。また、リトライしてグレイリスティングを突き抜けるスパムが増えてきているようではあるが、全体の中での割合はまだ少なく、グレイリスティングは今なお効果的だからでもある。

# 佐藤さん、ごめんね。

4 件のコメント:

匿名 さんのコメント...

smtpd_client_restrictionsでかければ一度だけになりませんか?

deo さんのコメント...

 コメントに気付きませんですみません。
 smtpd_client_restrictionsでかけても、RCPT TOコマンドまで受けてから応答遅延をかけるので、RCPT TOコマンドが複数回あればそのたびに遅延がかかると聞いていました。今それが解決されているのかどうかはよく知らないです。

匿名 さんのコメント...

自宅鯖ではsendmailでstarpitを使っています。実装にはperlのSendmail::Milterを使っていますが、milterで2回目以降のRCPT TOで遅延をかけないようにするのは簡単です。自鯖では必要ないのでやってませんが。Postfix2.3以降でもmilterは使えるはず。

deo さんのコメント...

 情報ありがとうございます。Milterが使えるんですか。勉強してみます。
 S25Rを発展させたシステムがsendmailにまで進出しているんですね。うれしいです。