i

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

· 2009-07-15 (수) 13:17:11 · 5835 · 3
근래에 서버 보안때문에 여러가지 작업들을 하다가 괜찮은 툴이 있어서 소개합니다.
이미 사용하시고 있거나 아시는 분들도 상당히 많으시리라 생각됩니다.

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에서 이동 됨]
|

댓글 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에 어떤 내용이 있는지를 알아야 겠네요....
별 문제는 아닐 것 같은데요...
정확한 답변 드리지 못하는 점 양해해 주시기 바랍니다.
접속국가
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
10-05-31 조회 2,885
10-04-17 조회 4,684
10-03-23 조회 5,834
10-02-26 조회 3,354
10-02-23 조회 3,318
10-02-11 조회 3,939
10-02-09 조회 3,002
10-01-26 조회 3,454
10-01-23 조회 6,781
10-01-19 조회 3,493
10-01-13 조회 3,697
09-12-06 조회 4,604
09-11-24 조회 4,175
09-11-19 조회 3,053
09-11-11 조회 3,651
09-08-30 조회 3,129
09-08-12 조회 3,131
09-07-21 조회 3,307
09-07-19 조회 3,189
09-07-11 조회 3,104
09-06-15 조회 2,881
09-05-29 조회 3,066
09-05-28 조회 3,494
09-05-05 조회 3,346
09-04-07 조회 3,565
09-02-23 조회 4,360
09-02-17 조회 3,101
09-02-17 조회 2,481
09-02-09 조회 2,584
09-01-23 조회 3,384
09-01-17 조회 4,222
09-01-08 조회 3,166
08-11-07 조회 4,428
08-11-01 조회 4,915
08-10-30 조회 3,509
08-10-16 조회 3,429
08-10-02 조회 2,567
08-09-22 조회 3,826
08-09-22 조회 2,887
08-09-20 조회 5,384
08-09-20 조회 4,441
08-09-20 조회 3,516
08-09-20 조회 2,890
08-09-20 조회 3,085
08-09-20 조회 4,070
08-09-20 조회 3,562
08-09-20 조회 3,145
08-09-18 조회 3,382
08-09-06 조회 2,990
08-09-06 조회 2,741
08-09-05 조회 3,394
08-09-05 조회 5,602
08-09-03 조회 4,407
08-09-03 조회 2,658
08-07-31 조회 3,146
08-07-18 조회 3,752
08-06-19 조회 3,095
08-06-15 조회 3,083
08-06-14 조회 3,539
08-05-23 조회 2,776
08-05-13 조회 2,683
08-04-22 조회 4,352
08-04-22 조회 5,056
08-04-22 조회 6,797
08-04-17 조회 2,977
08-04-17 조회 3,547
08-04-17 조회 3,656
08-04-17 조회 5,898
08-04-17 조회 3,099
08-04-17 조회 3,426
08-04-06 조회 3,516
08-04-05 조회 3,099
08-04-04 조회 7,154
08-04-04 조회 4,444
08-04-04 조회 3,797
08-04-04 조회 3,972
08-04-04 조회 2,850
08-04-04 조회 2,635
08-04-04 조회 2,684
08-04-04 조회 2,875
08-04-04 조회 2,630
08-04-04 조회 2,598
08-04-04 조회 4,112
08-04-03 조회 2,632
08-04-03 조회 3,844
08-04-02 조회 3,058
08-04-02 조회 2,809
08-03-25 조회 3,666
08-03-11 조회 3,430
08-03-11 조회 2,941
08-03-11 조회 2,899
08-03-11 조회 2,697
08-03-11 조회 2,472
08-03-11 조회 2,277
08-03-11 조회 2,333
08-03-07 조회 2,866
08-03-05 조회 2,609
08-02-27 조회 2,841
08-02-21 조회 2,724
08-02-21 조회 3,297