まちゅダイアリー
2005-09-20 (火)
■ 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 メール送信を防ぐためのリストなのかも。
むむ…。

Becky! のプラグイン BkASPil の場合ですが、<br>IPBL をそのまま使うのではなく、<br>ユーザが spam と見なした IP を複数の IPBL で問い合わせて BL として登録されていれば、その IP をフィルタリングするようです。<br>http://b2antispam.s33.xrea.com/doc/help/online/02_filtering/4-0_SpamfilterGaiyo.html