前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

mod_geoip2で特定の国からのアクセスをブロックする

課題

Google Analyticsを見ていると特定の国から定期的なアクセスがあり、集計結果を狂わせている。そこの国向けにはコンテンツを提供していないため、乱暴ではあるが国単位でブロックしてしまいたい。

対策

調べたところ、GeoIPというモジュールがあったのでそちらを使うことにする。
GeoIPは特定の国や地域に対してアクセスをブロックをしたり、許可したり転送したりといったことを可能にするモジュールである。

インストール

※Ubuntu12.04向けの例です。
APTにより標準インストールされたApacheであれば以下の方法でインストールできる。

sudo apt-get install libapache2-mod-geoip

設定

geoip.confの編集

インストールすると/etc/apache2/mods-available/geoip.confと/usr/share/GeoIP/にGeoIP.datとGeoIPv6.datができる。GeoIP.datは国、地域とIPを対応付けたデータファイルだ。コメントアウトされているのでそれをハズす。

$ sudo vi /etc/apache2/mods-available/geoip.conf
<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
アクセス拒否設定

今回は特定国家のアクセス拒否だけしてみたいと思う。
その他のExampleについては以下が詳しい。
http://dev.maxmind.com/geoip/legacy/mod_geoip2/#Examples

例:ロシアと中国をブロック

$ sudo vi /etc/apache2/mods-available/geoip.conf
# /etc/apache2/mods-available/geoip.conf
<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat

  #BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
</IfModule>

<Location />
        //補足:Deny from env=は環境変数が定義されていた場合のみ適用される。
        Deny from env=BlockCountry
</Location>

確認

確認環境が用意できるのであれば日本を対象外にしてみれば良いかと。Deny fromであれば403エラーになる。

  SetEnvIf GEOIP_COUNTRY_CODE JP BlockCountry

あくまでApache上でのアクセス制御であり、ハッキングなどサーバー自体へのアクセス対策にはIPフィルタリングなどが別途必要なのは言うまでもない。