접속아이피로 접속국가 및 지역 확인 및 보안응용 (접속허가, 접속불가 등) 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에 적용했습니다. (사실 저는 이 기능이 필요했었습니다.)
따로 올리겠습니다.
도움이 되었기를....
이미 사용하시고 있거나 아시는 분들도 상당히 많으시리라 생각됩니다.
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개
GaeL365
16년 전
<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
설치과정에 순리로웠습니다. 에레없이 설치성공하였구요
마지막 아파치에 설정에 에레가 뜨네요 ^^""
제가 어디에 홀시 한점 있는지 알려주시면 고맙습니다.
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
설치과정에 순리로웠습니다. 에레없이 설치성공하였구요
마지막 아파치에 설정에 에레가 뜨네요 ^^""
제가 어디에 홀시 한점 있는지 알려주시면 고맙습니다.
15년 전
헉! 작년에 올리신 질문을 이제야 봤네요... 죄송.
라인 1073에 어떤 내용이 있는지를 알아야 겠네요....
별 문제는 아닐 것 같은데요...
정확한 답변 드리지 못하는 점 양해해 주시기 바랍니다.
라인 1073에 어떤 내용이 있는지를 알아야 겠네요....
별 문제는 아닐 것 같은데요...
정확한 답변 드리지 못하는 점 양해해 주시기 바랍니다.
outfly
15년 전
접속국가
게시글 목록
| 번호 | 제목 |
|---|---|
| 29519 | |
| 13798 | |
| 21031 | |
| 430 | |
| 426 | |
| 13796 | |
| 422 | |
| 418 | |
| 13793 | |
| 415 | |
| 29513 |
HTML
2.php 초보탈출(배열)
5
|
| 13791 | |
| 407 | |
| 392 | |
| 383 | |
| 381 | |
| 371 | |
| 368 | |
| 13785 |
MySQL
php 초보 탈출 (기초 및 변수 편)
5
|
| 364 | |
| 361 | |
| 21027 | |
| 29509 |
HTML
php 는 얼마나 유연한가?
3
|
| 29507 | |
| 357 | |
| 13779 | |
| 356 | |
| 29505 | |
| 13778 |
JavaScript
onmouseover시 onmouseout까지 따라다니는 레이어 띄우기..
|
| 13775 | |
| 29504 | |
| 13774 |
JavaScript
현재 페이지 저장하기
|
| 353 | |
| 350 | |
| 346 | |
| 13773 |
JavaScript
프린트 출력 자바스크립트 소스
|
| 29494 |
HTML
HTML5 가이드
9
|
| 25166 | |
| 13771 |
Flash
video 태그
1
|
| 13769 | |
| 340 | |
| 329 | |
| 13765 |
Flash
HTML5 동영상 출력 관련 맛보기!
3
|
| 324 | |
| 319 | |
| 318 | |
| 314 | |
| 312 | |
| 310 | |
| 307 | |
| 300 | |
| 299 | |
| 13761 |
jQuery
Jquery 1.3.2 Cheat Sheet
3
|
| 13758 | |
| 13756 | |
| 13754 |
기타
특정 IP 차단하기
1
|
| 13752 |
JavaScript
php호스팅을 하고있는데 mssql에 있는 데이터를 가져와야합니다.
1
|
| 13750 | |
| 29493 |
HTML
아이피 차단소스
|
| 29492 | |
| 13749 |
JavaScript
특정아이피와 포트에 접속 가능할경우
|
| 13747 |
PHP
검색사이트 긁어오기
1
|
| 29489 | |
| 13746 |
JavaScript
링크를 클릭했을때 클릭수를 카운트
|
| 13745 | |
| 13744 | |
| 13743 |
MySQL
온라인 로또복권
|
| 13742 | |
| 29488 |
HTML
한국일보 실시간 속보보기
|
| 13740 |
JavaScript
법원경매넷 문서 파징 프로그램
1
|
| 13739 |
기타
후이즈검색 소스
|
| 13738 | |
| 13737 | |
| 13731 | |
| 13730 |
JavaScript
Session.Timeout 최대값은 24시간
|
| 13729 | |
| 13728 | |
| 13727 | |
| 29487 |
HTML
국가별 다른 페이지 엑세스
|
| 13726 |
JavaScript
ASP에서 배달 확인/ 읽음 확인 구현 방법
|
| 13725 |
기타
오버플로 에러
|
| 13724 |
기타
데이타 합치기
|
| 13723 | |
| 29486 | |
| 13722 |
기타
중복체크
|
| 13721 |
기타
접속자 목록
|
| 13720 | |
| 29485 |
HTML
현재, 이전페이지 url 호출
|
| 13719 |
JavaScript
case 문
|
| 21013 | |
| 21007 | |
| 13715 | |
| 13713 |
정규표현식
grep을 사용한 파일내용 찾기
1
|
| 13710 |
JavaScript
awk 사용하기
2
|
| 13707 | |
| 13705 |
JavaScript
프로세스별 메모리 사용량 보기
1
|
| 13700 | |
| 25155 | |
| 13698 |
JavaScript
UTF-8 한글 TEST
1
|
| 13697 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기