正規TB蹴ってた(ぉ)。

最初に…

まっとうなTBを送ろうとして蹴られた方、申し訳ございませんでした!!

実は、設定のポカによってspamTB以外のTBもがんがん蹴っていたことが判明。

このblogのspam防止システムは、内容に応じで蹴るQuasi Spam Filter Plugin (ver 0.20)と、ブラックリストに載っているIPからのTBを蹴るTBPingDSBL(v0.90)の2つあるのだが、問題があったのは後者のほう。

もともと、このプラグインはダウンロードした状態では「Net::DNSが使えればそれを使い、使えなければnslookupを使う」という仕組みになっていた。
それを、「Sephie」の環境に合わせて改造(→約定期blog: ついにspam対策)して使っていた。

しかし、最近全くTBが来ないのと、やけに蹴られるTBの数が多いので、もしや誤動作しているのでは…と思って調べるとOGNIB(悪い予感的中、BINGOの逆)。

本来、nslookupの出力は、

・問題ないIPの時
*** ネームサーバ can't find xxx.xxx.xx.xx.list.dsbl.org: Non-existent domain
Server: ネームサーバ
Address: ネームサーバのIP

・ブラックリストIPの時
Non-authoritative answer:
Server: ネームサーバ
Address: ネームサーバのIP

Name: ブラックリストIPの逆転.list.dsbl.org
Address: ブラックリストIP

となるはずである。
そこで、問題ないIPにはNon-existent domainが含まれていることを利用し、それでチェックしていた。

しかし、今回自分自身のIPをTBpingDSBLに実装してあるのと同じパラメータでnslookupにかけてみたところ

*** Request to MR404DV timed-out
Server: MR404DV
Address: 192.168.0.xxx

DNS request timed out.
timeout was 2 seconds.
DNS request timed out.
timeout was 2 seconds.

という結果に。
これはどういうことかというと、ネットワークの設定でプライマリDNSをルータに、セカンダリDNSをOCNのネームサーバに設定しているのだが、ルータのDNS機能が完全でないらしく、リクエストによっては解決できずタイムアウトしてしまうことがあるらしい。
そのため、かなりのIPがタイムアウトし、その結果Non-existent domainが含まれず、ブラックリストIPとみなされてしまっていたようだ。

もちろん早速修正したわけだが、方法としてはnslookupのサーバ指定オプションを使うことで解決した。
通常、Windowsのnslookupで、非インタラクティブモードで問い合わせる時は「nslookup [-opt ...] host」という構文を使うが、最後にネームサーバのFQDNまたはIPアドレスをつけて「nslookup [-opt ...] host server」のようにすればそのネームサーバに問い合わせてくれるので、OCNのネームサーバを指定することでタイムアウト問題を回避した。

しかし、一体どれだけの正規TBを蹴ってしまったのだろうか。まさか0件なんてことは…いや…うーん。