근래에 서버 보안때문에 여러가지 작업들을 하다가 괜찮은 툴이 있어서 소개합니다.
이미 사용하시고 있거나 아시는 분들도 상당히 많으시리라 생각됩니다.
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개
<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
설치과정에 순리로웠습니다. 에레없이 설치성공하였구요
마지막 아파치에 설정에 에레가 뜨네요 ^^""
제가 어디에 홀시 한점 있는지 알려주시면 고맙습니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 8265 | |
| 20403 | |
| 20402 | |
| 20401 | |
| 20400 |
웹서버
서버 동시접속자 설정 변경하기
|
| 8259 | |
| 20399 | |
| 20398 | |
| 8255 | |
| 8249 | |
| 8246 | |
| 8242 | |
| 20396 | |
| 8240 | |
| 20395 | |
| 20394 |
MySQL
테이블 복사 쿼리
|
| 31033 | |
| 28385 | |
| 20393 |
PHP
현재 접속중인 사용자 나타내기
|
| 28380 | |
| 20392 |
MySQL
mysql select 후 update 하기
|
| 28377 | |
| 20391 | |
| 20390 |
PHP
한글문자열 자르는 법 입니다.
|
| 20389 | |
| 20388 | |
| 20387 |
PHP
이메일주소 검사하기 입니다.
|
| 20386 | |
| 20385 | |
| 20384 |
node.js
Node js 게시판 프로젝트 소개합니다.
|
| 20383 |
PHP
pc 모바일 체크
1
|
| 20382 |
PHP
계정 사용량(용량) 확인
|
| 8238 | |
| 20380 | |
| 20379 |
MySQL
소수점 반올림 버림
|
| 28376 | |
| 28372 | |
| 20378 | |
| 20377 |
PHP
에러 로그파일 생성하기
|
| 8235 | |
| 20375 | |
| 20374 | |
| 20373 |
PHP
후이즈검색 하기 입니다.
|
| 20372 |
PHP
그래프 그리기 입니다.
|
| 20371 |
JavaScript
자바스크립트로 구현한 number_format() 입니다.
|
| 20370 |
JavaScript
금액 관련 숫자를 한글로 변환하기 입니다.
|
| 28370 | |
| 20369 |
PHP
PHP 날짜 계산 관련 함수
|
| 28366 | |
| 20368 |
jQuery
jQuery 1.x와 2.x 버전 동시에 사용하기
|
| 20367 | |
| 20366 | |
| 20365 |
JavaScript
사업자 등록번호 검사하기 입니다.
|
| 20364 | |
| 20363 |
JavaScript
항상 같은곳에 광고창 만들기 입니다.
|
| 20362 |
JavaScript
부메뉴 나오게 하기 입니다.
|
| 20361 |
JavaScript
특정문자 제거하기 입니다.
|
| 20360 |
JavaScript
휴대폰번호 검사 하기 입니다.
|
| 20359 |
JavaScript
이미지 좌우로 이동 갤러리 입니다.
|
| 8231 | |
| 20358 | |
| 20357 |
JavaScript
쉬운 replaceAll 입니다.
|
| 20356 | |
| 20355 | |
| 20354 | |
| 20353 | |
| 20352 |
JavaScript
콤보스타일 메뉴 입니다.
|
| 20351 |
JavaScript
쿠키를 이용한 레이어 공지창 입니다.
|
| 20350 |
JavaScript
효과있는 텍스트 틱커 입니다.
|
| 20349 | |
| 20348 |
PHP
HTTP 인증 하기 입니다.
|
| 20347 |
JavaScript
외부 문서 불러오기 입니다.
|
| 20346 |
JavaScript
지정한 날짜까지 New 이미지를 띄워주기 입니다.
|
| 20345 | |
| 20344 |
JavaScript
메일 주소 검사하기 체크박스 입니다.
|
| 20343 |
JavaScript
무단링크 금지하기 입니다.
|
| 20342 | |
| 20341 |
MySQL
DB백업 및 복원
|
| 20340 |
JavaScript
페이지가 다른 사이트의 프레임에 갇히는 것을 막기 입니다.
|
| 20339 | |
| 20338 | |
| 20337 |
jQuery
input text 대문자만 받는 Jquery
|
| 20336 | |
| 20335 |
JavaScript
이미지 업로드와 미리보기 입니다.
|
| 20334 |
JavaScript
배경음악 랜덤 재생 하기 입니다.
|
| 20333 |
JavaScript
css 지원 여부 확인해서 다른 페이지로 이동하기 입니다.
|
| 20332 |
JavaScript
하부메뉴가 보였다가 숨겨졌다 하는 토글버튼 입니다.
|
| 20331 |
JavaScript
개별 페이지에 인덱스로 거쳐 들어오게 하기 입니다.
|
| 20330 |
JavaScript
랜덤으로 이미지 출력 되기 입니다.
|
| 20329 |
JavaScript
사용자 해상도 알아내기 입니다.
|
| 20328 |
JavaScript
붙여넣기 금지하기 입니다.
|
| 20327 |
MySQL
대소문자 데이터 조회하기
|
| 20326 |
JavaScript
퇴장시 팝업창 한번한 띄우기 입니다.
|
| 20325 | |
| 20324 | |
| 20323 |
JavaScript
시도, 구군, 동 주소 select
|
| 20322 |
MySQL
커리로 DB 테이블 명세서 출력하기
|
| 20321 |
JavaScript
브라우저 해상도 구분없는 절대 x,y 좌표 값 구하기 입니다
|
| 20320 |
PHP
rss 읽어오기 입니다.
|
| 20319 |
JavaScript
자바스크립트로 Ajax 효과내기 입니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기