접속아이피로 접속국가 및 지역 확인 및 보안응용 (접속허가, 접속불가 등) 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년 전
접속국가
게시글 목록
| 번호 | 제목 |
|---|---|
| 13686 | |
| 13683 | |
| 21003 | |
| 13680 |
jQuery
jQuery로 만든 라이트 박스...
2
|
| 25150 | |
| 25143 | |
| 20981 | |
| 13679 | |
| 13678 |
기타
프로세스 빨리 종료하기
|
| 13677 | |
| 13675 |
JavaScript
리눅스 서버의 BIOS 및 시스템 정보 확인하기
1
|
| 13674 | |
| 29483 |
HTML
[TIP] 퀵메뉴 스크립트
1
|
| 13672 | |
| 13671 |
jQuery
성능향상을 위한 팁-9
|
| 13670 |
기타
성능향상을 위한 팁-8
|
| 13669 |
기타
성능향상을 위한 팁-7
|
| 29482 |
HTML
성능향상을 위한 팁-6
|
| 13668 |
JavaScript
성능향상을 위한 팁-5
|
| 13666 | |
| 29481 |
HTML
성능향상을 위한 팁-3
|
| 29480 |
HTML
성능향상을 위한 팁-2
|
| 13665 |
JavaScript
성능향상을 위한 팁-1
|
| 13664 |
정규표현식
자바스크립트 팁 (고급 팁)
|
| 13663 |
기타
이미지 바꾸기 이벤트
|
| 13662 | |
| 13661 |
JavaScript
Javascript 정의 팁입니다.
|
| 25124 | |
| 25116 | |
| 20970 | |
| 13660 |
JavaScript
adsc
|
| 13658 |
기타
pause 함수
1
|
| 29479 |
HTML
URL Encode & Decide
|
| 13655 | |
| 13650 |
jQuery
jQuery.each break continue
4
|
| 13648 | |
| 13647 | |
| 13646 |
Flash
insert에서 where 사용하기
|
| 29478 |
HTML
테이블 복사
|
| 13645 |
PHP
3.0
|
| 13643 |
정규표현식
정규식 온라인 테스트 사이트
1
|
| 13642 | |
| 13640 |
MySQL
박씨빌더 에러문에 대해서 질문요
1
|
| 13637 |
jQuery
이미지 마우스 온 버블 이펙트 2
2
|
| 13636 |
jQuery
cheat sheet 1.4 and so on
|
| 13635 | |
| 13634 | |
| 29476 | |
| 13633 |
JavaScript
수행시간 체크
|
| 13632 |
JavaScript
거래명세표나 견적서에 합계금액 한글로 표시.
|
| 13630 | |
| 29473 | |
| 13624 |
jQuery
플리커 이미지 랜덤 출력하기
5
|
| 13620 |
jQuery
jquery 오른쪽 마우스금지
3
|
| 13582 | |
| 13556 | |
| 29472 | |
| 29471 | |
| 13555 |
JavaScript
php > 내가 만들어 쓰는 함수 > 이미지에 워터마크 처리하기
|
| 13554 | |
| 13553 |
jQuery
jQuery + 정규표현식( 이메일검증법)
|
| 13552 |
MySQL
CentOS 5.4 에서 APM 설치
|
| 13551 | |
| 13550 | |
| 13546 | |
| 13545 | |
| 13544 | |
| 29470 | |
| 13541 | |
| 13540 | |
| 13538 | |
| 13535 | |
| 29466 | |
| 13533 | |
| 29463 | |
| 13532 |
JavaScript
입력값이 한글이 포함되어있는지 체크
|
| 13531 |
JavaScript
영문과 숫자로만 이루어졌는지 체크
|
| 13529 | |
| 29462 |
HTML
로컬 텍스트 엑셀 파일 읽기/쓰기
|
| 13528 | |
| 29459 | |
| 29458 |
HTML
숫자만 입력할수있게...
|
| 13527 | |
| 13526 | |
| 13525 | |
| 13523 | |
| 13522 |
Flash
플래시를 이용한 비쥬얼한 정규식 프로그램
|
| 13512 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 4편
9
|
| 13510 | |
| 13507 | |
| 13498 |
MySQL
[보안] MD5 해독 불능 팁
8
|
| 29452 | |
| 13492 | |
| 13487 | |
| 29450 | |
| 13480 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 2편
6
|
| 13474 |
jQuery
jquery로 label값 정렬하기...
5
|
| 13460 |
JavaScript
PHP입문부터 기초까지?;;;;;;; - 1편
13
|
| 13457 | |
| 29447 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기