출처 : http://blog.yesidc.co.kr/60208358834
안녕하세요.
YESIDC 입니다.
오늘은 iptables 를 이용한 국가별 IP 차단 방법에 대해서 알아보겠습니다.
운영중인 서버를 해킹시도하는 sourece IP를 분석해 보면 중국발 IP가 대다수인 경우가 많습니다.
이에 서비스 중인 서버가 중국 또는 해외 특정 국가로부터 서비스 될 경우가 없다면 iptables 를 이용하여 접근을
차단할 수 있습니다.
iptables의 geoip 모듈을 이용해서 국가별 IP 차단을 위해선 커널패치를 하고, 커널컴파일을 해야 하는 번거로움이 있지만
아래와 같은 방법으로 간단한 쉘스크립트를 이용하여 시스템을 reboot하지 않고서도 바로 적용할 수 있습니다.
1. 국가별 IP대역 DB를 다운 받습니다.
http://geolite.maxmind.com/download/geoip/database/ --> GeoIPCountryWhois.csv 다운로드
[root@YESIDC hosting]# wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
[root@YESIDC hosting]# unzip GeoIPCountryCSV.zip
Archive: GeoIPCountryCSV.zip
inflating: GeoIPCountryWhois.csv
[root@YESIDC hosting]# ls GeoIPCountryWhois.csv
GeoIPCountryWhois.csv
2. GeoIPCountryWhois.csv 파일을 이동시킵니다.
[root@YESIDC hosting]# mv GeoIPCountryWhois.csv /etc/rc.d/init.d/
3. 다음의 스크립트를 iptables 설정 파일에 추가합니다. (ex:중국과 타이완 차단)
[root@YESIDC hosting]# vi /etc/rc.d/init.d/iptables
BLOCK_LIST_FILE=/etc/rc.d/init.d/GeoIPCountryWhois.csv
echo "################### IP BLOCK Script for country START ############# "
echo "BLOCK LIST FILE = $BLOCK_LIST_FILE"
BLOCK_TARGET_COUNTRY="China|Taiwan"
for IP_BANDWIDTH in `egrep $BLOCK_TARGET_COUNTRY $BLOCK_LIST_FILE | awk -F, '{print $1, $2}' | awk -F" '{print $2"-"$4}'`
do
iptables -I INPUT -p all -m iprange --src-range $IP_BANDWIDTH -j DROP
done
echo "################### IP BLOCK Script for country END ############# "
4. iptables 스크립트를 재실행 합니다.
[root@YESIDC hosting]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
################### IP BLOCK Script for country START #############
BLOCK LIST FILE = /etc/rc.d/init.d/GeoIPCountryWhois.csv -----> 파일을 읽어오는데 다소 시간이 걸릴 수 있습니다.
################### IP BLOCK Script for country END #############
5. 적용된 iptables 정책을 확인합니다.
[root@YESIDC hosting]# iptables -nvxL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.254.0.0-223.255.127.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.240.0.0-223.251.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.220.0.0-223.221.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.208.0.0-223.215.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.201.0.0-223.203.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.200.0.0-223.200.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.198.0.0-223.199.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.192.0.0-223.193.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.166.0.0-223.167.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.165.8.0-223.165.15.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.144.0.0-223.163.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.136.0.0-223.143.255.255
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 223.120.0.0-223.129.255.255 .
.
.
.
국가별 iprange 로 적용된 정책에 갯수를 아래와 같이 확인 할 수 있습니다.
[root@YESIDC hosting]# iptables -L | grep range | wc -l
2524
위와 같은 방법으로 스크립트를 응용하여 여라 국가별 IP에 대하여 접속 차단/해제 할 수 있습니다.
이상으로 iptables 를 이용한 국가별 IP 차단 방법에 대해서 알아보았습니다. geoip 모듈을 이용한 방법과 위 소개해드린 방법의
퍼포먼스 차이는 추후에 비교하여 소개해드리도록 하겠습니다.
국가별 ip / 국가별 ip차단 | 01/05 | ||||||
apache / php 기본 보안 세팅 | 07/18 | ||||||
vsftp 상위디렉토리 막을때... 2.3.5 버전에서 오류시 업그레이드한다 | 10/02 | ||||||
Linux 서버 시간설정 | 08/14 | ||||||
postfix 에서 특정 IP만 smtp 로그인 못하게 또는 로그인하게 설정 | 08/13 | ||||||