mod_geoipで国毎アクセス制限してみた

[`evernote` not found]
このエントリーをはてなブックマークに追加

mod_geoipで国毎アクセス制限してみた

WordPressのwp-login.phpへのアクセスがかなり増えてきたので、アクセス制限しようかと。

今まではiptablesで制限してたんだけど、都度iptablesの対応するのが面倒なので、mod_geoip使って国毎アクセス制限してみた。

環境はAWSのEC2、AMI。

まずは、mod_geoipのインストール。

# yum install mod_geoip

すると、mod_geoipの設定ファイルが設置されるので、編集。

# vi /etc/httpd/conf.d/geoip.conf

こんな感じで編集。

LoadModule geoip_module modules/mod_geoip.so

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
  SetEnvIf GEOIP_COUNTRY_CODE BE BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE BR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE ES BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE GB BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE GR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE ID BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE KZ BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE NL BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE RO BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE SE BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TH BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TR BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE TW BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE UA BlockCountry
  SetEnvIf GEOIP_COUNTRY_CODE VN BlockCountry
</IfModule>
<Location />
  Deny from env=BlockCountry
</Location>

上記、今日の13時以降 wp-login.php へ直接リクエストがあったIPから辿った国コードを列挙した。

参照しているGeoIP.datが古いのか、一部のIPが対応出来ていない模様。
※whoisだとRUだけど、アクセス出来てしまっているIPがある

geoip.conf の編集が終わったら、Apacheを再起動。

# /etc/rc.d/init.d/httpd restart

これでOK。

該当する国からリクエストがあった場合、403を返すようになった。

もし動作確認をしたいのであれば、

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
  SetEnvIf GEOIP_COUNTRY_CODE JP BlockCountry
</IfModule>
<Location />
  Deny from env=BlockCountry
</Location>

で、日本からのアクセスを拒否するようにして、自端末のブラウザで確認して403が返ってきたら動作OK。

では。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です