DNS ブラックリストによる SPAM フィルタリング
2005-09-20
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 メール送信を防ぐためのリストなのかも。
むむ…。