2012.05.04 18:48
Apache ? mod_GeoIP를 이용한 국가 IP 확인 및 국가별 접속 제한
GeoIP 란 MaxMind 에서 제공하는 웹에 접근하는 IP를 국가별로 확인할 수 있는 오픈소스
라이브러리로 이를 이용하여 서버에 접근 하는 IP를 국가별로 제한,허용 할 수 있습니다.
1. GeoIP C Library 설치
GeoIP C Library Source : http://geolite.maxmind.com/download/geoip/api/c/
# tar -xvfz GeoIP-1.4.8.tar.gz
# cd GeoIP-1.4.8
# ./configure --prefix=/usr/local/GeoIP
# make && make install
2. mod_geoip 설치
(apache가 DSO 모듈을 지원할 수 있다는 가정하에 설치)
mod_geoip (apache 1.x용) : http://geolite.maxmind.com/download/geoip/api/mod_geoip/
mod_geoip (apache 2.x용) : http://geolite.maxmind.com/download/geoip/api/mod_geoip2/
# tar -xvfz mod_geoip2_1.2.7.tar.gz
# cd mod_geoip2_1.2.7
[apache 설치경로]/bin/apxs -ia -L/usr/local/GeoIP/lib -I/usr/local/GeoIP/include ?lGeoIP -c mod_geoip.c
* 참고사항
-L /usr/local/GeoIP/lib == library 디렉토리 지정
-I /usr/local/GeoIP/include == include 디렉토리 지정
-lGeoIP == 소문자 L
3. httpd.conf에 geoip 모듈이 추가되었는지 확인
LoadModule geoip_module modules/mod_geoip.so
4. GeoIP 데이터베이스 추가 및 업데이트
# http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
다운로드 후 아래의 경로에 압축 해제
/usr/local/GeoIP/share/GeoIP/
5. apache 웹로그에 국가코드 남기기
httpd.conf 파일에 아래의 내용을 추가
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %{Host}i %{GEOIP_COUNTRY_CODE}e" cnxlog
CustomLog logs/access_log cnxlog
6-1. 웹페이지에 특정 국가를 접근 제한하기 (중국에서의 접근 제한)
httpd.conf에 아래와 같이 추가
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /image>
SetEnvIf GEOIP_COUNTRY_CODE CN go_out # CN -> 중국 국가 코드
<Limit GET POST>
Order Allow,Deny
Allow from all
Deny from env=go_out
</Limit>
</Location>
</IfModule>
6-2. 특정 국가만 접근 허용 (한국에서만)
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /image>
SetEnvIf GEOIP_COUNTRY_CODE KR go_in # KR -> 한국 국가 코드
<Limit GET POST>
Order Deny,Allow
Deny from all
Allow from env=go_in
</Limit>
</Location>
</IfModule>