중국 IP 차단하는 방법은 여러 blog에 다 설명이 되어있다.
내가 여기 쓰는 목적은 방법을 잊어버렸을 때 다시 remind하기 위함이다.
웹호스팅이 아니라 서버호스팅 또는 가상서버호스팅(VPS)를 받고 있을 때에는 hacking에 주의해야한다.
그래서, 가끔씩 /var/log/httpd/access_log 등을 봐두면 좋은데 VPS를 시작한지 얼마안되었지만 괴상한 형태의 log가 출력되는 것을 확인하였다.
응? 왠 baidu.com? 내 사이트 이름은 www.jaehak0123.com 인데?
더군다나 baidu.com 으로 끝나는게 아니라 계속 URL이 특정 pattern으로 계속 증가하는 pattern이다. 왠지 모르게 attacker의 냄새가 난다.
60.169.73.220 이나 60.10.57.89는 모두 중국발 IP이다.
그래서, 중국발 IP를 모두 막기로 했다. 혹시 중국에서 내 블로그를 보고 싶어할 사람이 있을지도 모르지만, 그건 알아서 하시라고 하고..
1) root 계정으로 접속한다.
2) /root 디렉토리에서 wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip 을 수행한다.
1 |
wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip |
3) GeoIPCountryCSV.zip의 압축을 푼다.
1 |
unzip GeoIPCountryCSV.zip |
4) 다음 script를 작성한다. 난 block_china란 script명을 줬다. 타 블로그에서 iptables 의 -A INPUT 대신 -I INPUT으로 파라메터 변경을 하였다. -A INPUT은 기존 iptables option의 아래에 추가하겠다는 의미이기 때문에 위에서 http port인 80이 이미 열려있어서 해당 rule에 의해 중국발 IP가 그대로 통과한다.
-I INPUT은 기존의 iptables 규칙의 상위에 추가하는 것이기 때문에 http port 80을 여는 것보다 상위에 들어간다.
주의 : 자신이 접속하는 IP 대역이 iptables 규칙에 들어가면 접속하지 못하는 사태가 발생하므로 ip정보를 꼭 확인해야 한다.
1 2 3 4 5 6 7 8 9 10 |
cat block_china #!/bin/bash DATA=/root/GeoIPCountryWhois.csv IPT=/sbin/iptables for IPRANGE in `egrep "China" $DATA | cut -d, -f1,2 | sed -e 's/"//g' | sed -e 's/,/-/g'` do $IPT <span style="color: #0000ff;">-I</span> INPUT -p all -m iprange --src-range $IPRANGE -j DROP done |
5) script에 실행 권한을 준다.
1 |
chmod +x block_china |
6) script를 실행시키면(조금 오래 걸림) iptables 에 중국발 IP대역 차단 정보가 등록된다. iptables -L 명령으로 차단이 되었는지 확인한다.
1 |
iptables -L |
7) 부팅 시 자동으로 실행되게 하려면 복잡한 방법들이 많은 것 같은데, 간단하게 /etc/rc.local에 추가해준다.
1 2 3 4 5 6 7 8 9 10 |
cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local <span style="color: #3366ff;">/root/block_china </span> |
이후 부팅되면 자동으로 스크립트를 실행해서 중국발 IP들을 차단해준다.
여기서 문제가 있는게, GeoIP에 등록되지도 않은 중국 IP 대역들이 계속 추가되고 있다는 거… ㅠㅠ