아파치 GeoIP를 이용한 국가별 제한

Mr.키아 2018.01.08 04:32:42

아파치 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

 

#출처 어드민플레이