리눅스 아파치 GeoIP를 이용한 국가별 제한
아파치 GeoIP를 이용한 국가별 제한
웹페이지 요청시 요청한 클라이언트의 아이피를 분석하여 해당 국가를 판별하고
국가별로 접근 제한을 하는 방법에 대해 알아보도록 하겠다.
1. 준비사항
GeoIP데이터를 apache에서 사요하기위해서는 mod_geoip를 설치하기에 앞서
GeoIP C API를 먼저 설치하여야 한다 .
다운로드 : http://www.maxmind.com/app/c
설치 방법 : # ./configure --prefix=/usr/local/GeoIP
# make
# make install
2. 아파치 모듈 컴파일하기
먼저 아파치가 DSO모듈을 지원하도록 컴파일 되어있어야한다
그리고 컴파일시 라이브러리 경로 와 인클루드 경로를 추가해두어야한다
라이브러리 경로 : -L /usr/local/GeoIP/lib
인클루드 경로 : -I /usr/local/GeoIP/include
다운로드 : http://www.maxmind.com/app/mod_geoip
설치 방법 : apxs -ci -L /usr/local/GeoIP/lib -I /usr/local/GeoIP/include -l GeoIP -c mod_geoip.c
설치 후 만약 php가 설치되어 있다면 phpinfo를 통해 간단하게 확인이가능하다 .
Apache Environment 부분에서
GEOIP_CONTINENT_CODE, GEOIP_COUNTRY_CODE, GEOIP_COUNTRY_NAME환경 변수를 볼 수 있다.
그리고 해당 모듈과 라이브러러리의설치 완료 되었으면
GeoIP 데이터를 다운받아야 한다
다운로드 : http://www.maxmind.com/app/products
저장위치 : /usr/local/GeoIP/share/GeoIP/GeoIP.dat
3. 아파치에서 국가별 접근제어하기
특정국가별로 접근을 제한하기위해서는 아래와같이 설정을 추가하면된다
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /image>
SetEnvIf GEOIP_COUNTRY_CODE CN go_out
SetEnvIf GEOIP_COUNTRY_CODE RU go_out
SetEnvIf GEOIP_COUNTRY_CODE TH go_out
<Limit GET POST>
Order Allow,Deny
Allow from all
Deny from env=go_out
</Limit>
</Location>
</IfModule>
위와 반대로 특정국가먄 허용할경우 아래와 같이 하면 된다 .
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
<Location /image>
SetEnvIf GEOIP_COUNTRY_CODE KR go_in
<Limit GET POST>
Order Deny,Allow
Deny from all
Allow from env=go_in
</Limit>
</Location>
</IfModule>
4. 참고 (GeoIP를 이용한 로그)
아파치 로그에서 GeoIP를 이용하여 국가별 코드를 남기게 되면 문제 발생시 whois를 이용하여 조회하지 않더라도
바로 파악이 가능하며 그에따른 적절한 조치가 가능하다
<IfModule geoip_module>
GeoIPEnable On
GeoIPDBFile /usr/local/GeoIP/share/GeoIP/GeoIP.dat
</IfModule>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{Host}i %{GEOIP_COUNTRY_CODE}e" geoiplog
CustomLog logs/access_log geoiplog
#출처 어드민플레이