8月 10

mod_geoip2 で国別フィルタリング

Tag: Apache, FreeBSDTOSHI @ 20:39:57

国別フィルタを探してたらこんなの発見
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.dat

SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry

Deny from env=BlockCountry
</IfModule>

SetEnvIfとかは別にVirtualHost下とか塞ぎたいところでええんでない。
IPアドレス割り当てのDBは自前で持たなくちゃいけなくて、お金払うと市とかまで入った詳細や更新ツールが使えるようになったりするようだけど、そんな制度高くなくていいので(あくまでいらないところを通さなくするだけなので)、月1更新の公開DBをもってくることに。GeoLite Countryにある国別DBをwgetするようcronに仕込むだけ。

想ったよりあっさり動いたので、さっそくUS/CN/KRはdenyしますたw って想ったけど、USを閉じると色々他のサービスで弊害が出るので仕方なくallow。で、一番ひどいコメント(ついでにトラックバック)へのアクセスをJP以外開けないように変更。
見えなくて困る人(そもそもそういう人はこのエントリーが見えてないと想うけど)は言ってくれれば、気分によっては何とかするかもしれないししないかもしれない。

コメントをどうぞ