«前の日記(2005-09-19 (月)) 最新 次の日記(2005-09-21 (水))»  

まちゅダイアリー


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

むむ…。

Tags: memo
本日のツッコミ(全1件) [ツッコミを入れる]
荒川 (2005-09-23 (金) 06:26)

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