「mod_geoip」モジュールをインストールできるようにyumレポジトリ「epel」を追加します。
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# yum -y install mod_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 .
<Location /> 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 </Location>
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry # もし国コードが「RU」だったら、それは「BlockCountry」です。 SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry # 「BlockCountry」に設定されているものからの接続を拒否する Deny from env=BlockCountry
# リダイレクトを有効にします。 RewriteEngine On # もし国コードが「US」だったら RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$ # http://english.domain.com/ に転送する RewriteRule ^(.*)$ http://english.domain.com [L]
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"