iptables 를 이용한 국가별 차단

출처 : 설랑이의 공부 블러그 – http://srzero.tistory.com/104

중국의 짱개 / 이태리 양키 이런놈들이 자꾸 나의 서버를 침입한다.
이놈들을 막기 위해 방화벽을 설치 후 간단한 Script를 돌려 차단하였다.
iptables를 이용하면 간단하게 막을 수가 있다.

iptables를 이용하여 국가별 접속을 차단하는 방법에는 2가지가 있다.
(1) Kernel을 업데이트 한 후 iptables를 이용하는 방법
(2) Script를 이용하는 방법

나는 아직 Kernel Level에서 접근하는 법을 확실히 익히지 못하여 (2) 번 레벨에서 막도록 하겠다.

[1] 접속한 IP찾기
/var/log/auth.log를 뒤져 보면 아래와 같은 메시지가 뜬다.

1 18:Feb 13 13:14:03 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186
2 22:Feb 13 13:14:07 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186
3 25:Feb 13 13:14:09 xxxxx pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=200.27.62.186

위에서 얼핏보면 알겠지만 220.27.62.186 에서 자꾸 접속을 시도한다. 저놈이 도대체 어느나라 놈인지 알아보자.

대충 보아하나 칠레쪽 양키놈이다. 아~~~ 내서버에 뭔 볼일이 있다고 ㅠㅠㅠ 이제 저놈을
막도록 하자. 참고적으로 오늘부터 칠레 놈들이 싫어졌다.

[2] 국가별 Network 정보 Download하기
URL : http://geolite.maxmind.com/download/geoip/database/ 
위 URL로 가서 가장 최신으로 업데이트 된 Network 정보를 가져온다.
파일(GeoIPCountryWhois.csv) 을 열어보면 아래와 같다.

     1 “1.0.0.0”,”1.7.255.255″,”16777216″,”17301503″,”AU”,”Australia”
     2 “1.9.0.0”,”1.9.255.255″,”17367040″,”17432575″,”MY”,”Malaysia”
     3 “1.10.10.0”,”1.10.10.255″,”17435136″,”17435391″,”AU”,”Australia”
     4 “1.11.0.0”,”1.11.255.255″,”17498112″,”17563647″,”KR”,”Korea, Republic of”
     5 “1.12.0.0”,”1.15.255.255″,”17563648″,”17825791″,”CN”,”China”
     6 “1.16.0.0”,”1.19.255.255″,”17825792″,”18087935″,”KR”,”Korea, Republic of”
     7 “1.21.0.0”,”1.21.255.255″,”18153472″,”18219007″,”JP”,”Japan”
     8 “1.22.0.0”,”1.23.255.255″,”18219008″,”18350079″,”IN”,”India”
     9 “1.24.0.0”,”1.31.255.255″,”18350080″,”18874367″,”CN”,”China”
    10 “1.33.0.0”,”1.33.255.255″,”18939904″,”19005439″,”JP”,”Japan”
    11 “1.34.0.0”,”1.35.255.255″,”19005440″,”19136511″,”TW”,”Taiwan”
    12 “1.36.0.0”,”1.36.255.255″,”19136512″,”19202047″,”HK”,”Hong Kong”

앞에껀 순번 | startNetwork | EndNetwork | ,,, | 국가 이런 순이다. 그럼 위 정보를 파싱하여
Script를 만들어 보도록 하자.

[3] Script 생성하기

#! /bin/bash
echo “########## IP BLOCK Script START ###########”
# iptables init
sudo iptables -P INPUT ACCEPT
sudo iptables -F
echo “IPTABLES INIT SUCCESS”

BLOCK_LIST_FILE=./GeoIPCountryWhois.csv
echo “BLOCK LIST FILE = $BLOCK_LIST_FILE”

# ADD BLOCK TARGET LIST
BLOCK_TARGET_COUNTRY=”China|France|Chile”

# REGIST BLOCK IP FOR LOOP
for IP_BANDWIDTH in `egrep $BLOCK_TARGET_COUNTRY $BLOCK_LIST_FILE | awk -F, ‘{print $1, $2}’ | awk -F\”  ‘{print $2″-“$4}’`

do
   sudo iptables -I INPUT -p all -m iprange –src-range $IP_BANDWIDTH -j DROP
done

sudo iptables -L
echo “################### IP BLOCK Script END ############# “

위 스크립트는 랑이가 짠것이다. awk를 이해 하고 있다면, 아주 쉽게 만들수 있다.

만약 허용국가만 포함하고 싶을때에는 egrep의 조건을 조금 바꾸어주면된다.

#! /bin/bash
echo “########## IP BLOCK Script START ###########”
# iptables init
sudo iptables -P INPUT ACCEPT
sudo iptables -F
echo “IPTABLES INIT SUCCESS”

BLOCK_LIST_FILE=./GeoIPCountryWhois.csv
echo “BLOCK LIST FILE = $BLOCK_LIST_FILE”

# ADD BLOCK TARGET LIST
ALLOW_TARGET_COUNTRY=”Korea”

# REGIST BLOCK IP FOR LOOP
for IP_BANDWIDTH in `egrep -v $ALLOW_TARGET_COUNTRY $BLOCK_LIST_FILE | awk -F, ‘{print $1, $2}’ | awk -F\” ‘{print $2″-“$4}’`

do
sudo iptables -I INPUT -p all -m iprange –src-range $IP_BANDWIDTH -j DROP
done

sudo iptables -L
echo “################### IP BLOCK Script END ############# “

노란색으로 표현한 부분은 간단한 grep 명령이므로 별도로 설명안해도 될듯하다.

[4] Script 실행

########## IP BLOCK Script START ###########
IPTABLES INIT SUCCESS
BLOCK LIST FILE = ./GeoIPCountryWhois.csv

DROP       all  —  anywhere             anywhere            source IP range 1.202.0.0-1.207.255.255
………
………
………

DROP       all  —  anywhere             anywhere            source IP range 1.12.0.0-1.15.255.255

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
################## IP BLOCK Script END #############

다됐따 ㅋㅋㅋ 요렇게 하면 무사히 작업이 완료된다.

이 글을 쓰니 괜시리 애국심이 막 불타온다. 나도 언젠간 짱깨 / 양키 놈들 서버 들어가서 해집고 다니는 실력자가 되어야 겠다 .ㅋㅋㅋㅋ 이제 중국|프랑스|칠레 의 나쁜시키들이 안들어오겠지? 낼도 로그를 지켜봐야겠당 ㅋㅋ

                                                             – 2011.02.15 랑이씀 –

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *