====== mod_geoip 接続元国でWebアクセスを制限 ====== ===== yumレポジトリ追加 ===== 「mod_geoip」モジュールをインストールできるようにyumレポジトリ「epel」を追加します。 # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm ===== md_geoip インストール ===== # yum -y install mod_geoip ===== geoipのデータベースを更新するよう設定 ===== vi /etc/cron.monthly/geoip chmod 755 /etc/cron.monthly/geoip /etc/cron.monthly/GeoIP.sh #! /bin/sh TMPDIR=/tmp GEODIR=/usr/local/share/GeoIP DAT=GeoIP.dat cd $TMPDIR #/usr/bin/wget http://www.maxmind.com/download/geoip/database/$DAT.gz /usr/bin/wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/$DAT.gz if [ $? != 0 ] ; then echo "wget failed" exit 1 fi /bin/gunzip $DAT.gz if [ $? != 0 ] ; then echo "gunzip failed" exit 2 fi cd $GEODIR /bin/mv $DAT $DAT.`/bin/date "+%Y%m%d-%H%M%S"` /bin/mv $TMPDIR/$DAT . ===== Apache側の設定 ===== Order allow,deny SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry SetEnvIf GEOIP_COUNTRY_CODE KR BlockCountry SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry Deny from env=BlockCountry Allow from all ===== 特定の国からのWebアクセスを拒否する ===== SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # もし国コードが「RU」だったら、それは「BlockCountry」です。 SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry # 「BlockCountry」に設定されているものからの接続を拒否する Deny from env=BlockCountry ===== 特定の国からのWebアクセスをリダイレクトする ===== # リダイレクトを有効にします。 RewriteEngine On # もし国コードが「US」だったら RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$ # http://english.domain.com/ に転送する RewriteRule ^(.*)$ http://english.domain.com [L] ===== Webアクセスログに接続元国情報を出す方法 ===== GeoIPのモジュールを読み込んでる状態で、「%{GEOIP_COUNTRY_CODE}e」をLogFormatに足す事で \\ 国情報を出力する事ができます。 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ↓   ↓ LogFormat "%{GEOIP_COUNTRY_CODE}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined これで下記のように国コードが先頭に出力されます。 JP 210.172.143.2 - - [27/Jan/2012:18:58:51 +0900] "POST /lib/exe/ajax.php HTTP/1.1" 200 68 "http://dokuwiki.fl8.jp/doku.php"