at posts/single.html

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 メール送信を防ぐためのリストなのかも。

むむ…。

関連する日記