8月 10
mod_geoip2 で国別フィルタリング
国別フィルタを探してたらこんなの発見
MaxMind – GeoIP Apache API
GeoIPってホスト名 or IPアドレスの割り当てられている国を調べるツールを提供してるらしい。で、それを参照できるようなApache用のmoduleがあると。
まずはmoduleインスコ。公開されてるソースがapache-2.0用と書いてあるので、2.2用に書き換えなと想ったけど、ソース覗いたらその必要はなさそうだったのでがっつんとportsからインスコ。httpd.confに書くのはmod_geoipのWeb参照して
LoadModule geoip_module modules/mod_geoip.so
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.datSetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountryDeny from env=BlockCountry
</IfModule>
SetEnvIfとかは別にVirtualHost下とか塞ぎたいところでええんでない。
IPアドレス割り当てのDBは自前で持たなくちゃいけなくて、お金払うと市とかまで入った詳細や更新ツールが使えるようになったりするようだけど、そんな制度高くなくていいので(あくまでいらないところを通さなくするだけなので)、月1更新の公開DBをもってくることに。GeoLite Countryにある国別DBをwgetするようcronに仕込むだけ。
想ったよりあっさり動いたので、さっそくUS/CN/KRはdenyしますたw って想ったけど、USを閉じると色々他のサービスで弊害が出るので仕方なくallow。で、一番ひどいコメント(ついでにトラックバック)へのアクセスをJP以外開けないように変更。
見えなくて困る人(そもそもそういう人はこのエントリーが見えてないと想うけど)は言ってくれれば、気分によっては何とかするかもしれないししないかもしれない。



コメントをどうぞ