DNS ブラックリストによる SPAM フィルタリング
otsune さんに教えていただいた方法で、SPAMを防御するテスト。 スパマーや Open Proxy のリストを DNS に蓄積しておき、それをブラックリストとして使う方式らしい。
Net_DNSBLというPHP のモジュールが PEAR で公開されていたので、それを使ってサンプルを作ってみた。
Net_DNSBL のインストール
Debian にて。PEAR は依存関係を自動で解決してくれないらしい。
$ sudo apt-get install php4-pear $ sudo pear install Cache_Lite $ sudo pear install Net_CheckIP $ sudo pear install Net_URL $ sudo pear upgrade Net_Socket $ sudo pear install HTTP_Request $ sudo pear install Net_DNSBL
サンプルプログラム
PEAR Manual をほぼ流用。
<?php require_once 'Net/DNSBL.php'; $dnsbl = new Net_DNSBL(); $remoteIP = '220.0.224.25'; $dnsbl->setBlacklists(array('sbl-xbl.spamhaus.org', 'bl.spamcop.net', 'dnsbl.JAMMConsulting.com')); if ($dnsbl->isListed($remoteIP)) { print "true"; } else { print "false"; } ?>
220.0.224.25 は、 tDiary への SPAM として実際に飛んできたアドレス。 これを動かすと、結果は true だった。
PukiWiki にもこんな感じで組み込めそうだな。 それに、 tDiary の SPAM フィルタとしても有効かも。もうあるのかな。
仕組み
ソースを見るとブラックリストの仕組みは意外と単純だった。 調べたいIPアドレスを逆順にし、その後ろにブラックリストを格納している DNS サーバの名前をつけて、名前解決の問い合わせをするだけ。
例えば、dnsbl.JAMMConsulting.com というサーバに 220.0.224.25 というIPアドレスが(ブラックリストとして)登録されているかどうかは、
$ host 25.224.0.220.dnsbl.JAMMConsulting.com
の結果で分かるようになっている。
追記
.dnsbl.JAMMConsulting.com でチェックすると、ほとんどの接続元がチェックに引っかかってしまう。 .plala.or.jp とか、 .t-com.ne.jp とか、 .ppp.dion.ne.jp とか。 HTTP Proxyじゃなくて、ダイアルアップ接続による SPAM メール送信を防ぐためのリストなのかも。
むむ…。