접속아이피로 접속국가 및 지역 확인 및 보안응용 (접속허가, 접속불가 등) GeoIP > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

접속아이피로 접속국가 및 지역 확인 및 보안응용 (접속허가, 접속불가 등) GeoIP 정보

JavaScript 접속아이피로 접속국가 및 지역 확인 및 보안응용 (접속허가, 접속불가 등) GeoIP

본문

근래에 서버 보안때문에 여러가지 작업들을 하다가 괜찮은 툴이 있어서 소개합니다.
이미 사용하시고 있거나 아시는 분들도 상당히 많으시리라 생각됩니다.

GeoIP
유료DB도 있으나, 아주 critical mission을 수행하는 것이 아니라면 무료DB를 사용해도 거의 문제가 없을 듯 합니다.

아파치 서버에서의 응용분야는 다음과 같습니다.
1. 특정국가에 대해 사이트 접속 허가 및 불허 (예: 중국에서의 접속 불허.. 또는 한국, 뉴질랜드만 허가 등등)
2. 리다이랙션 (예: 한국에서 접속하면 한국어사이트로, 그외지역에서 접속하면 영문사이트로.. 등등)

그 이외의 응용분야는 다음과 같습니다.
1. ModSecurity 연동
2. PHP, PHP extension
   - 사이트 접속아이피를 이용하여 접속한 국가, 지역 및 기타정보 (위도, 경도 등..)를 얻음.
   - 응용가능분야
      1. 사이트 방문자가 어느국가, 어느지역, 어느도시에서 접속했는지를 알아냄.
        예: g4_visit 테이블에 필드를 추가하고 (vi_city, vi_region, vi_country) 정보를 저장 및 확인.
      2. 리다이랙션 (위 설명과 동일.)
      3. 쇼핑몰의 경우 원화, 달러화, 엔화 등, 접속국가에 맞는 currency 출력.
      4. 보안관련 (사이트 접속을 허가 및 불허)

위에 설명한 응용분야가 필요하시다면 아래 설치 및 이용방법을 읽어 보시기 바랍니다.
여기가 '아파치 팁' 공간임으로 여기 글을 보시는 분들은 서버의 직접제어가 가능하다는 판단하에 설치 및 이용방법을 작성하도록 하겠습니다. 

1. GeoIP C Library 설치
설치는 아래 두가지 방법 중 하나를 선택하시면 됩니다.
   1. yum install GeoIP
   2. tar 설치 (다운로드 --> 압축풀기 --> config 및 설치)
   wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
   tar xvfz GeoIP.tar.gz
   cd GeoIP-1.4.6
   ./configure 
   make
   make check
   make install 

2. 아파치 모듈 mod_geoip 설치
   1. tar 설치 (다운로드 --> 압축풀기 --> config 및 설치)
   wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
   tar xvfz mod_geoip2_1.2.5.tar.gz
   cd mod_geoip2_1.2.5
   apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

설치를 끝내면 httpd.conf파일에 아래 모듈이 추가된 것을 확인할 수 있습니다.
LoadModule geoip_module      /usr/lib64/httpd/modules/mod_geoip.so
(참고로 32bit 에서는 /usr/lib/httpd/modules/mod_geoip.so로 되겠지요..)

3. GeoIP DB 설치
   만약 아래 디렉토리가 없다면 폴더를 만들고 다운로드
   mkdir /usr/local/share/GeoIP
   cd /usr/local/share/GeoIP
   wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
   gzip -d GeoIP.dat.gz
   ** 아래 city DB는 아파치에서 사용되지는 않으나, 나중에 PHP extension 사용을 위해 다운받아 놓는다. (파일이 크기때문에 필요 없다고 생각되면 안받아도 됨.)
   wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
   gzip -d GeoLiteCity.dat.gz
   ln -s ./GeoLiteCity.dat ./GeoCity.dat
   ** 위의 심볼릭링크는 PHP extension 사용시 GeoCity.dat (유료 DB)를 찾다가 없으면 에러가 발생하기 때문에 링크를 걸어둠.

위 세가지 모두 설치가 끝났다면 아파치에서 응용해 보도록 하겠습니다.
응용 1 - 리다이랙션
###############################
<IfModule mod_geoip.c>
GeoIPEnable On

# Redirect one country (만약 캐나다에서 접속했다면 www.canada.com으로 리다이렉션)
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
RewriteRule ^(.*)$ http://www.canada.com$1 [L]
</IfModule> 

<IfModule mod_geoip.c>
GeoIPEnable On

# Redirect multiple countries to a single page (만약 캐나다, 미국, 멕시코에서 접속했다면 www.northamerica.com으로 리다이랙션)
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [L]
</IfModule> 
###############################

응용 2 - 접속 불허 (예: 중국과 러시아로 부터의 접속을 막기)
###############################
<IfModule mod_geoip.c>
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry
# ... place more countries here

Deny from env=BlockCountry

# Optional - use if you want to allow a specific IP address from the country you denied
# (See http://httpd.apache.org/docs/1.3/mod/mod_access.html for more details)
Allow from 10.1.2.3
</IfModule> 
###############################

응용 3 - 특정국가만 접속 허가 (예: 미국, 캐나다, 멕시코만 접속허가, 나머지는 불허)
###############################
<IfModule mod_geoip.c>
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE CA AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE MX AllowCountry
# ... place more countries here

Deny from all
Allow from env=AllowCountry

# Optional - use if you want to allow a specific IP address from the country you denied
# (See http://httpd.apache.org/docs/1.3/mod/mod_access.html for more details)
Allow from 10.1.2.3
</IfModule>
###############################

위 내용을 자기에 맞게 간단히 수정해서 httpd.conf 파일이나 Document 폴더안에 .htaccess에 넣으면 되겠지요.

참고사이트
http://www.maxmind.com/app/geolitecountry
http://www.modsecurity.org/projects/modsecurity/apache/feature_geo_ip_lookups.html
http://www.maxmind.com/app/benchmark

사실 PHP를 이용한 GeoIP 응용분야가 상당히 많습니다. 또한 상당히 재미있고 무지 간단합니다....
저는 일단, g4_visit에 적용했습니다. (사실 저는 이 기능이 필요했었습니다.)
따로 올리겠습니다.

도움이 되었기를....
[이 게시물은 관리자님에 의해 2011-10-31 17:30:25 Apache에서 이동 됨]
추천
0

댓글 3개

<IfModule mod_geoip.c>
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE KR AllowCountry
# ... place more countries here

Deny from all
Allow from env=AllowCountry

# Optional - use if you want to allow a specific IP address from the country you denied
# (See http://httpd.apache.org/docs/1.3/mod/mod_access.html for more details)
Allow from 10.1.2.3
</IfModule>

아파치에 httpd.conf 파일에 넣고  아파치 restart 하면
[root@localhost home]# /usr/local/apache/bin/apachectl start
Syntax error on line 1073 of /usr/local/apache/conf/httpd.conf:
deny not allowed here

설치과정에 순리로웠습니다. 에레없이 설치성공하였구요
마지막 아파치에 설정에 에레가 뜨네요 ^^""
제가 어디에 홀시 한점 있는지  알려주시면 고맙습니다.
헉! 작년에 올리신 질문을 이제야 봤네요... 죄송.
라인 1073에 어떤 내용이 있는지를 알아야 겠네요....
별 문제는 아닐 것 같은데요...
정확한 답변 드리지 못하는 점 양해해 주시기 바랍니다.
전체 5,397
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT