[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[postfix-jp:03911] Greylisting
- Subject: [postfix-jp:03911] Greylisting
- From: Tomoyuki Sakurai <ml-postfix-jp@xxxxxxxxxxxxxxx>
- Date: Fri, 30 Jan 2004 00:15:52 +0900
WARNING:
ここではPostfixを使用したGreylistingの実装について書きます。「spamをMTA
で拒否するのは検閲だ」、「spam対策は受信者がやるべきだ」とか、「spam対策
は言論の自由に反する」という議論は別の場所でお願いします。また、記述が不
正確かもしれませんから、必ずリンク先やdistributionなどの原文にあたるよう
にしてください。英語が読めない人は、誰か親切な人が訳してくれるまで待ちま
しょう。
* Greylisting
最近のspamの多くはopen proxy経由で送信される。open proxyなクライアントは
再接続することが少ない。次々と踏み台を変えて再送することはあるけど。
MTAは一時拒否されても、一定時間再接続して配送しようとする。
じゃあ、一定時間が経過するまで一時拒否(4xx)して、それでも接続してきたら、
たぶんopen proxyじゃないと思われるので受け取ることにしよう。
open proxyも一定時間後に再接続するようになるかもしれない。けど、時間が経
てば経つほどopen proxyとしてDNSBLなどに登録されてしまう確率が高くなるし、
配送コストも跳ね上がるので、それはそれで好都合。
* open proxyってなに?
第三者によって使用することのできるproxyのこと。こういうproxyはずいぶん前
から存在していて、主に匿名性を求めるユーザによって悪用されてきました(掲
示板の書き込みとか)。また、CONNECTメソッドで任意のポートに対するTCP接続
が可能なopen proxyが、数年前からspammerによって悪用されるようになりまし
た。ちなみにPOSTメソッドなどでも同じことが可能です。
virusやOS/アプリケーションの脆弱性を利用してホストにopen proxyをインストー
ルして、それを踏み台にするのが最近のトレンド(?)です。Sobigなどが有名です
ね。バックドアを仕掛けるvirus/wormの目的はopen proxyだと思ってもいいかも
しれません。特定のサイトに攻撃を仕掛けるよりも、spamを配送する方がお金に、
より直接的に結びつきますから。
しかも、外部(Internet)から接続できるproxyサーバの数は限られているけど、
脆弱なWindowsホストは腐るほどあるので、大量に配送するにはもってこい。IP
アドレスも静的に割り当てられたIPアドレスではないので、追跡も困難だし。電
源が入ったらspamを配送して、しばらくすればシャットダウンされて、次に接続
されたときにはIPアドレスも違うものが割り当てられる。特定のアドレス範囲を
MTAが拒否しても、別のopen proxyを試せばいい。これは便利ですね。
こうしたことから、open proxyはspammerに大人気。正確な統計を取ったことは
ないですけど、おそらく最近のspamの大半はopen proxy経由でしょう。SBLや
SPEWSよりlist.dsbl.orgによる拒否回数の方がはるかに多いですし。
* Greylistingの仕組み
あらかじめ、接続の記録用にデータベースを用意しておく。
クライアントのIPアドレスとenvelope-fromとenvelope-toを一組のtriplet(組み
合わせ)とする。
接続してきたクライアントのtripletがデータベースにない場合、tripletと接続
の時間をデータベースに記録する。で、一時拒否。
データベースにそのtripletがあれば、現在の時間とtripletの時間を比較して、
一定時間経過していなければ、一時拒否。
一定時間が経過していれば、受け取る、もしくはさらに判定すべき条件があれば
その判定を元に受け取るか拒否(4xxもしくは5xx)する。
詳しくは
The Next Step in the Spam Control War: Greylisting By Evan Harris
http://projects.puremagic.com/greylisting/
を読んでください。
* 一時拒否ってなに?
SMTPのエラーコード4xxを返すこと。4xxなエラーコードは一時的なエラーを意味
します。MTAはメッセージを一定期間再送しようとします。
詳しくは、
RFC 1893 - Enhanced Mail System Status Codes
http://www.faqs.org/rfcs/rfc1893.html
とか
RFC 2821 - Simple Mail Transfer Protocol
http://www.faqs.org/rfcs/rfc2821.html
の
4.2.1 Reply Code Severities and Theory
を読みましょう。
* Postfix experimental releaseのインストール
INSTALLに従ってインストールします。official releaseと手順はあまり変わり
ません。smtpd-policy.plはインストーラで(確か)インストールされないので、
適切なディレクトリにコピーします。
FreeBSDならmail/postfix-currentがあります。ただし、必ずしも最新版ではあ
りません。運がよければMakefileのバージョンとかを書き換えるだけでインストー
ルできるかもしれません。TLSとかのパッチがあたらない場合は、あきらめるか
自分で何とかします。けっこう何とかなったりします。-currentをそのまま入れ
てもいいでしょう。
あまり役に立たない作業メモ
http://trombik.mine.nu/pukiwiki/pukiwiki.php?PostfixCurrent#zc4a2b17
大きな仕様変更はないのですが、細かい挙動はofficial releaseから変更されて
いるものがあります。HISTORYを読みましょう。main.cfやmaster.cfはそのまま
使えるはずです。
* Postfixのアプローチ
Postfixではcheck_policy_serviceを使って実装されます。これはPostfixにおけ
る標準プロトコルとして実装されています。詳しくはSMTPD_POLICY_READMEを読
みましょう。こうすることでGreylistingに限らず、その他のポリシーによる制
限も柔軟に実装することができます。
smtpdは次のような属性(attributes)をpolicy serverに送ります。
request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
helo_name=some.domain.tld
queue_id=8045F2AB23
sender=foo@xxxxxxx
recipient=bar@xxxxxxx
client_address=1.2.3.4
client_name=another.domain.tld
policy serverは条件に応じて次のような返事を返します。
action=450 Service temporarily unavailable
返事に従ってsmtpdは5xx/4xx/dunno/permitなどの動作をします。
ちなみに、policy serverはUNIXドメインソケットだけではなくTCPによる接続も
可能です。複数のクライアントで一つのpolicy serverに接続するとか、ラウン
ドロビンによるpolicy serverの負荷分散とかも可能ですね。詳しくは
TCP_TABLE(5)を読みましょう。
で、policy serverの例としてPerlで書かれたsmtpd-policy.plがdistributionに
含まれています。名前からわかるように、あくまでsampleです。Witseさんも
「スケーラビリティが課題だよね」とか言っていたように記憶しています。だか
らといって、実用にならないわけではないですし、改善することはそう難しいこ
とではないでしょう。プロトコルは公開されているわけですし。実際、手元では
何の問題もなく動作しています。
* 設定
smtpd-policy.plに書いてあるとおり、master.cfとmain.cfに何行か書き加える
だけ。
あまり役に立たない作業メモ
http://trombik.mine.nu/pukiwiki/pukiwiki.php?PostfixCurrent#r9db16a2
FIXME: 作業メモから解説にする
設定後にpostfix reloadが必要。
また、デフォルトですべてのメッセージが一時拒否されるので、あらかじめホワ
イトリストの作成が必須。また、ユーザに対しての説明も必要。
* 運用
Greylistingに限った話ではないですが、ログを見ましょう。
遅延しては困る相手ならホワイトリストを整備しましょう。DNSBLを併用する場
合もホワイトリストの作成が重要です。DNSBLで拒否されて困る相手ならDNSBLに
問い合わせる必要はないです。
ローカルのブラックリストの整備もパフォーマンスの向上などに役に立つでしょ
う。でも、ホワイトリストの整備の方が効果は大きいようです。
現在のsmtpd-policy.plには一定時間後にtripletを破棄(expire)させる機能がな
いので、データベースはふくらむばかりです。一定時間後にデータベースを空に
するなどの対策が必要です。
また、一時拒否されるとIPアドレス、つまりホストを次々に変えて再接続してく
るMTAがあるので、これもホワイトリストに登録するなどの、何らかの対策が必
要でしょう。
メーリングリストなどのMTAをGreylistingで判定の対象にするのは、意味がない
のでこういったホストもホワイトリストに入れましょう。
* 効果
現在のところ、open proxy経由の(MTA経由ではない)spamはこれで十分対応でき
ています。この制限を回避するには、同じIPアドレスから、同じenvelope-from
で、同じenvelope-toのメッセージを一定時間後に再送するしかありません。そ
の間に、open proxyをリストするDNSBLに登録されてしまえば、やはり拒否され
てしまいます。しかもspammerはenvelope-fromや踏み台にするopen proxyを次々
と変えて接続しますから、さらに好都合ですね。
問題はMTAを経由して配送されるspamです。MTAなら一時拒否されても一定期間、
再配送しようとします。ですからMTA経由のspamには効果がありません。でも、
今時open relayなMTAや自分でたてたMTAを使ってspamを配送するのは、あまり賢
いとは言えません。すでにそういったIPアドレス範囲やspam friendlyなISPは軒
並みDNSBLで拒否されてしまいますから。ISPのMTAを使用するのも足がつきやす
いので継続的なspamの配送には向いていません。まぁ、例外はあるのですけど。
もう一つ、Greylistingの効果としてvirus/wormの拡散もある程度防ぐことがで
きます。なぜならvirus/wormの配送方法はopen proxyを利用したそれとそっくり
だからです。今回のMyDoomでも同じIPアドレス/envelope-from/envelope-toを使
用した再接続は2回程度のようです。
* 結論
結論を書きたいところですが、きちんとした統計がとれていないので、明確な結
論を書くことができません。ですので、PostfixにおけるGreylistingの実装を試
したらその結果を報告していただけると幸いです。手元では(他の手法も併用し
て)spamを一掃することができています。
--
Tomoyuki Sakurai - Tomi -
mailto:ml-postfix-jp@xxxxxxxxxxxxxxx
local dnsbl files updated daily at
rsync://trombik.mine.nu/spf/output/
[検索ページ]
[Postfix-JP ML Home]