MovableType/WordPressに対して、いろいろスパム対策を試行錯誤した結果、現在はUserAgent、IPアドレス、Akismet(MT-Akismet)、MT内蔵のSpamLookup、IPBan、iptablesの組み合わせでほぼスパムをシャットアウトできるようになりました。
特にトラックバックスパムはUA/IPアドレスでほとんどが引っかかるのでapacheに負荷も余りかかりません。ただ残念ながらコメントへのスパムはUAがブラウザを騙るものが多くフィルタ出来ません。主にAkismet, SpamLookupでのチェックになります。ちゃんと検出してくれるのですが、サーバへの負荷を考えるともう一歩という感じです。
やはりapacheでもう少し拒否したいので調べてみると、拡張モジュールでDNSBLを引く方法が幾つかあります。mod_access_rbl, mod_dnsbl, mod_dnsbl_lookup, mod_defensibleなどがあるようです。しかし残念ながら、apache2.2に対応しておらず古かったり、apacheのソースへのパッチであったり、コンパイルが通らなかったりと今ひとつです。
比較的新しいものとして、良さそうなのが以下のmod_setenvdnsbl。ページは英語ですが作者さんは日本人のようです。
インストールはCentOS5に行いました。非常に簡単でしたが、設定に少し迷ったのでメモ。
- ダウンロードして展開
- Makefile先頭のaxpsのパスを/usr/sbin/axpsに変更
- make && make install
apacheの設定
- httpd.confかconf.d/setenvdnsbl.confを作成し以下の一行を入れておく
- このモジュールはIPV4にしか対応していないので、httpd.confでListen部分を修正(最初どこからのアクセスに対してもうまく動かずソース眺めながら悩みました)
- apache再起動
- 配布元の.htaccessのExampleにはtypoがあるようです(一応連絡しました)。設定を以下のようにします。
SetEnvIf User-Agent "^tb_send/1.0" trackbackSpammer
<Files "mt-tb.*cgi">
SetEnvIfDNSBL remote_addr bsb.spamlookup.net trackbackSpammer
<Limit POST>
Order Allow,Deny
allow from all
deny from env=trackbackSpammer
...
<Files "mt-comments.*cgi">
SetEnvIfDNSBL remote_addr bsb.spamlookup.net trackbackSpammer
<Limit POST>
Order Allow,Deny
...
- 注意。チェック時に毎回DNS参照を行うのでFilesセクションなど範囲制限できる場所に記述すること。CachingDNSサーバを立てるのも良いかも。
- niku.2ch.netは強力ですが国内のレンタルサーバが結構入っているので、コメントスパムにはいいのですが、トラックバックスパムには使わないほうがいいかも
- 上の例のbsb.spamlookup.netはMovableTypeに標準で入っているものの一つ
- サーバのエラーログに簡単な動作状況が出力されます
- apacheモジュールなのでブログの種類を問わず、またwikiや他のwebアプリでも使える
以上、うまく動作しているようです。
動作はちゃんとしていますが、複数の条件設定をするとあまりうまくないような。ソースを見る時間がないので様子見です。とりあえず、おかげさまでいたちごっこもだいぶ満足できるレベルになってきました。ありがとうございます。