文書更新:2019年05月29日(水) 午前10時38分21秒

Home > 備忘録 > Apache に関すること > Apache に mod_geoip を導入する( 88 )

Fedora18 に mod_geoip をインストール方法について記録します。

Apache2.4 に mod_geoip を導入する

  1. Apache のバージョン確認
  2. # httpd -v
    Server version: Apache/2.4.3 (Fedora)
    Server built:   Jan  xx 20xx 13:46:23
  3. mod_geoip のインストール
  4. # yum install mod_geoip
  5. 最新のデータベースに更新
  6. # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
    # gunzip GeoIP.dat.gz
    # mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat
    # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
    # gunzip GeoLiteCity.dat.gz
    # mv -f GeoIP.dat /usr/share/GeoIP/GeoLiteCity.dat
  7. データベースの自動更新
  8. 1ヶ月ごとにデータベースを自動更新させる。
    [root@server ~]# vi /etc/cron.monthly/geoip
    #! /bin/sh
    update(){
    	GEOIPDIR=/usr/share/GeoIP
    	GEM=4
    	if [ -e $GEOIPDIR/$2.gz ];then
    		##日付けで世代管理する(4世代)
    		cp $GEOIPDIR/$2.gz $GEOIPDIR/$2.gz-`/bin/date "+%Y%m%d"`
    		while [ `find $GEOIPDIR -name $2.gz-* | sort -r | wc -l` -gt $GEM ];do
    			find $GEOIPDIR -name $2.gz-* | sort -r | tail -1 | xargs rm
    		done
    	fi
    	wget -O $GEOIPDIR/tmp.gz $1/$2.gz 2>&1 | grep "保存完了"
    	if [ $? -eq 0 ];then
    		##解凍し tmp.gz ファイル名を変更する
    		if [ -e $GEOIPDIR/tmp.gz ];then
    			gunzip -cdf $GEOIPDIR/tmp.gz > $GEOIPDIR/$2
    			mv $GEOIPDIR/tmp.gz $GEOIPDIR/$2.gz
    		fi
    	else
    		rm $GEOIPDIR/tmp.gz
    	fi
    }
    update http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry GeoIP.dat
    update http://geolite.maxmind.com/download/geoip/database GeoLiteCity.dat
  9. geoip に実行権限を付加
  10. # chmod +x /etc/cron.monthly/geoip
  11. Apache の設定
    1. 日本(JP)とアメリカ(US)からのアクセスを拒否する
    2. [root@server ~]# vi /etc/httpd/conf.d/geoip.conf
      <IfModule mod_geoip.c>
      	GeoIPEnable On
      	GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
      </IfModule>
      <Location />	←以下を追加する
      	SetEnvIf GEOIP_COUNTRY_CODE JP BlockCountry
      	SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
      	<RequireAll>
      		Require all granted
      		Require not env BlockCountry
      	</RequireAll>
      </Location>
    3. 日本(JP)とアメリカ(US)からのアクセスのみを許可する
    4. [root@server ~]# vi /etc/httpd/conf.d/geoip.conf
      <IfModule mod_geoip.c>
      	GeoIPEnable On
      	GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
      </IfModule>
      <Location />	←以下を追加する
      	SetEnvIf GEOIP_COUNTRY_CODE JP AllowCountry
      	SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
      	<RequireAny>
      		Require env AllowCountry
      	</RequireAny>
      </Location>
  12. Apache を再起動する
  13. # systemctl restart httpd.service