XE로 프로젝트를 하나 끝내고 서버에서 돌리고 있는데 갑자기 서버가 멈췄습니다.
접속 기록을 보니 마더러시아에서 지속적으로 페이지 로딩을 하고 있었다. 그에 따라 쿼리를 날리다 보니 mysql 이 죽고, 같은 서버에 있던 php도 죽고, 마지막 nginx 도 죽는 사태가 지속되었다.
웹포트인 80포트를 죽인다음 기다린 결과 잠잠해졌지만 언제 또올지 모를 불곰국을 대비하여 nginx geo 셋팅을 해주었다.
- 서버는 ubuntu 14.10 / nginx 1.8.0 에서 진행하였습니다.
1. 먼저 서버의 nginx에서 http_geoip_module를 지원하는지 확인 하기 위해 nginx -V 를 입력.
$ nginx -V
중간쯤 with-http_geoip_module 모듈을 지원한다고 나온다. (만일 나오지 않는다면 nginx의 하위버전을 사용중인것이다. 해당 모듈은 nginx 0.8.1 버전부터 지원한것으로 요즘 nginx는 1.8.0이다. 업데이트를 하시면됩니다.)
2. 필요한 프로그램을 설치 합니다.
$ sudo apt-get install nginx-core sendmail-base sendmail-cf geoip-database libgeoip1
3. 나라별 IP가 담긴 파일을 다운로드 해줘야 합니다. ( ubuntu에 제공하는 파일이 있으나 최신 파일이 아니므로 다운받아 줍니다.)
$ mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ gunzip GeoIP.dat.gz
4. nginx 의 conf파일에 설정을 추가해줍니다.
$ sudo vi /etc/nginx/nginx.conf
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allow_visit {
default yes;
RU no;
CN no;
}
nginx.conf 파일의 아무곳에나 넣어주셔도 됩니다.
위의 설정에서 보시면 RU와 CN을 no; 로 설정했는데 러시아와 중국의 접속일 경우 $allow_visit의 변수에 yes라는 값이 들어갑니다. (중국의 경우도 가끔씩 들어와서 함께 차단!)
5. 이제 해당 도메인이 셋팅되어 있는 /sites-enabled/***.conf 파일에 (혹은 설정파일이 nginx.conf에 있다면 해당하는 파일에 해주시면 됩니다.) 아래의 설정값을 추가해주면 해당 도메인일 때만 해당 국가에서 접속시 403 에러 페이지로 가게 됩니다.
if ($allow_visit = no) {
return 403;
}
6. 크롬이나 파이어폭스의 확장 프로그램 중 vpn프로그램(zanmate 혹은 dotvpn등등 )을 설치하여 해당 국가로 vpn을 설정한후 해당 사이트로 이동하면 403 페이지로 이동하는것을 확인할수 있습니다.
- 역시 nginx는 정말 잘 만든거 같다. 필요한 요소는 정말 찾아보면 다 있는듯..
- KO로 막아봤으나 그냥 들어간다. 내부 아이피로 접속하게끔 해놔서 필터링이 안되는 경우가 있나 보다.
'쓰레기장""' 카테고리의 다른 글
여러 사이트들의 rss 주소 (1) | 2015.07.15 |
---|---|
쥬라기 월드 (0) | 2015.06.21 |
인터스텔라가 최고라고? (0) | 2014.11.06 |
구글 좌표 변환 (0) | 2014.09.22 |
가디언스 오브 갤럭시 (0) | 2014.09.10 |