htaccessによる海外IPからの接続拒否

海外スパム業者によるコメント絨毯爆撃で、一日200通近くの承認待ちコメントが溜まる。sbの設定で日本語を含まないコメントはスパム認定して承認待ちになるのだが、自動削除されないから管理が大変なことに。
そこで海外からのサイトアクセスを完全に遮断することにした。方法としては、.htaccessでorder deny,allowにして、日本国内に割り当てられたIPをallow fromすればいいはず。
ここで問題は日本国内IPをどう判定するかだが、ちょっと苦労した。最初はjpnicapnicの逆引きリストなんかを参照していたが、どうにも漏れがある。jpnic/apnic管理外のIPを使用しているプロバイダ(DTIやYahooBB)に対応出来ない。
色々探してみて、blackholes.us国別IPリストに突き当たった。リストのサイズはそれほどでもないので.htaccessの生成は手動でやってもいいのだが、どうせ定期的に更新すると思うのでスクリプト化してみた。

shellスクリプトバージョン

ダウンロード
blackholes.usからjp.txtを取ってきて.htaccessを生成するだけ。
#!/bin/sh
# at first, delete work files
rm -f jp.txt
# get ip list assigned to JP from blackholes.us
wget http://www.blackholes.us/zones/countries/jp.txt
# filter JP ipv4 list and build htaccess
echo "# generated time " `date +"%Y/%m/%d %H:%l:%M"` > .htaccess
echo "order deny,allow" >> .htaccess
echo "deny from all" >> .htaccess
cut -f 2 jp.txt | awk '{print "allow from " $1 }' >> .htaccess
echo done.

phpバージョン

ダウンロード
PHP(多分4.3.0以降かな?)を使えるサーバに置いてブラウザで読むと、カレントディレクトリに.htaccessを生成する。(このサーバはPHP使えないんだな…)
ひょっとしたらblackholes.usのリストでも国内IPに漏れがあるかもしれないが、今のところjpnic/apnicの情報に頼るよりは精度が高いように見える。