아파치 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
웹페이지 요청시 요청한 클라이언트의 아이피를 분석하여 해당 국가를 판별하고
국가별로 접근 제한을 하는 방법에 대해 알아보도록 하겠다.
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