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。
では。