- ∞ RBL(DNSBL)でコメント・スパムをブロックする (2007/02/11)
-
一部お気付きの方もいるだろうが、 ここ最近執拗なコメント・スパムに襲われるようになった。 そこで、いわゆるRBL(DNSBL)を使って本格的にスパム対策をすることにした。
RBL(DNSBL)は元々はスパム・メール対策用のものだが、 基本的な仕組みはDNSを使ったものなので、メール以外のCGIなどでも簡単に利用できる。 そのあたりの話は、 BBS/コメント/トラックバックspam対策[http://www.rbl.jp/bbstbspam.html] が、サンプル・スクリプトもあって、参考になる。
さて、一口にRBL(DNSBL)と言っても、IPベースの物と、URIベースの物の2種類がある。
IPベースの物(こちらが一般的)としては、 DSBL.org[http://dsbl.org/]、 SpamCop.net[http://www.spamcop.net/]、 RBL.jp[http://www.rbl.jp/] などがある。 スパムの送信元IPアドレスで判定するもので、 例えばIPアドレス「10.20.30.40」からPOSTされたコメントの場合は、 それぞれ次のような問い合わせをすればよい。 ([IPアドレスの逆順].[RBLのアドレス]という形式)
$ nslookup 40.30.20.10.list.dsbl.org $ nslookup 40.30.20.10.bl.spamcop.net $ nslookup 40.30.20.10.all.rbl.jp
URIベースの物としては、 SURBL[http://www.surbl.org/]、 URIBL.com[http://www.uribl.com/]、 RBL.jp[http://www.rbl.jp/](IP/URI両方ある) などがある。 こちらはコメント等の内容に書かれたURIのドメイン名で判定する。 例えばコメントに「http://spam.example.com/spam.html」のようなURIが書いてあった場合、それぞれ次のような問い合わせをすれば良い。 ([ドメイン名].[RBLのアドレス]という形式)
$ nslookup example.com.multi.surbl.org $ nslookup example.com.list.uribl.com $ nslookup example.com.url.rbl.jp
いずれの場合も、上のような問い合わせの結果、 127.x.x.xのアドレスが返ってきた場合はスパム、というわけ。 C/perl/PHPなどでは、gethostbyname関数を使えば簡単に実装できる。
そんなわけで、RBL(DNSBL)でスパムをブロックするblosxom用のプラグインrbl_spamblockをざっくりと作ってみた。 (ファイル名の先頭に0を付けたのは、プラグインの中で一番最初に動作させるため。) ただ、それでもまだすり抜けてくるスパムもあるので、 1コメント中のURIの最大数を設定して、それ以上のURIが書かれたコメントもブロックするようにした。 今後もちょくちょく機能は調整するかも。