課題
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フィルタリングなどが別途必要なのは言うまでもない。