한국 IP만 열기

바로 위에서는 중국 IP 차단 하는 방법에 대해서 알아봤다. 방법을 조금만 달리하면 한국내에서만 접속 가능하고, 다른 나라에서는 접속이 안되게 만들 수도 있다.

이렇게 세팅하면 yum update (배포판에 따라서는 apt-get update && apt-get upgrade) 등의 패키지 업데이트가 불가능할 수가 있으니, 그럴 땐 반드시

iptables -P INPUT ACCEPT
iptables -F 

를 입력해야 한다. 별 생각없이 iptables -F 로 했다가는 서버있는 곳으로 달려가야 한다. (모든 네트웍 접속이 막힌다.)

xtables-addons 사용법은 통일하니 중국 IP 차단 글을 참조하자. 저 글에서는 2.5 버전이 최신이라고 했는데, 얼마전에 2.6 이 나왔는데, 우리에게 필요한 건 xtables 가 아닌 그 안에 있는 geoip 부분인데, 달라진 게 없다. 물론, 웬만하면 최신 버전을 쓰는 것도 좋다.

/opt/bin/korea-ip-only.sh
#!/bin/sh
DATA=/usr/src/xtables-addons-2.6/geoip/GeoIPCountryWhois.csv
IPT=/sbin/iptables

cd /usr/src/xtables-addons-2.6/geoip/
/usr/src/xtables-addons-2.6/geoip/xt_geoip_dl

for IPRANGE in `egrep "Korea" $DATA | cut -d, -f1,2 | sed -e 's/"//g' | sed -e 's/,/-/g'`
do
        $IPT -A INPUT -p all -m iprange --src-range $IPRANGE -j ACCEPT
done

/sbin/iptables -P INPUT DROP

마지막 줄 때문에 저 위에 적은 iptables -F 를 입력하면 기본 모드가 DROP 이 되기 때문에 모든 네트웍이 막히게 된다. 그러니 주의하자.

이렇게 했는데, 외국에서 접속할 IP 가 있다면 ? 그럴 땐 마지막인 /sbin/iptables -P INPUT DROP 앞에다가

iptables -A INPUT -s 111.222.333.444 -j ACCEPT

iptables -A INPUT -s 111.222.333.0/24 -j ACCEPT

정도로 접속할 IP 또는 IP 대역을 적어주면 된다. /sbin/iptables -P INPUT DROP 뒤에다가 적어주면 이미 막힌 상태이므로 안 열린다.

이렇게 한 다음에 /etc/cron.d/korea-ip-only 파일을 하나 만들자.

/etc/cron.d/korea-ip-only
0 1 * * * root /opt/bin/korea-ip-only.sh

이렇게 하면 매일 새벽 1시에 geoip 자료를 다운로드 받아서 자동으로 iptables 로 업데이트를 해준다. 저렇게 설정한 뒤에 iptables-save 명령을 실행시켜보면 뭔가 쭉 올라간다. 다른 곳은 다 막히고 한국만 열린다..


2014/11/25 akpil