Block Country with iptables

iptables로 국가별로 차단

Linux iptables 환경에서 다음의 스크립트를 생성후 실행
아프카니스탄과 중퀴벌레를 차단하고 있습니다.

/root 디렉토리에서 하기의 내용을 Block.sh로 생성 후, chmod 755 ./Block.sh
실행권한을 부여한 후 실행 합니다. (현재 디렉토리에 iptables 디렉토리를 생성하게 됩니다.)

참고로, 중국 대역이 많으므로 시간이 좀 걸릴 수 있습니다.

Block.sh 쉘파일을 실행할때마다 새롭게 대역파일을 받아와서 갱신하게 됩니다.

#!/bin/bash -x
# Purpose: Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code.
## See url for more info - http://www.cyberciti.biz/faq/?p=3402
# -------------------------------------------------------------------------------

ISO="af cn"


### Set PATH ###
IPT=/sbin/iptables
WGET=/usr/bin/wget
EGREP=/bin/egrep

### No editing below ###
SPAMLIST="countrydrop"
ZONEROOT="/root/iptables"
DLROOT="http://www.ipdeny.com/ipblocks/data/countries"

cleanOldRules()
{
  $IPT -F
  $IPT -X
  $IPT -t nat -F
  $IPT -t nat -X
  $IPT -t mangle -F
  $IPT -t mangle -X
  $IPT -P INPUT ACCEPT
  $IPT -P OUTPUT ACCEPT
  $IPT -P FORWARD ACCEPT
}

# create a dir
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT

# clean old rules
cleanOldRules

# create a new iptables list
$IPT -N $SPAMLIST

for c  in $ISO
do
    # local zone file
    tDB=$ZONEROOT/$c.zone

    # get fresh zone file
    $WGET -O $tDB $DLROOT/$c.zone

    # country specific log message
    SPAMDROPMSG="$c Country Drop"

    # get
    BADIPS=$(egrep -v "^#|^$" $tDB)
    for ipblock in $BADIPS
    do
       $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
       $IPT -A $SPAMLIST -s $ipblock -j DROP
    done
done

# Drop everything
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST

# call your other iptable script
# /path/to/other/iptables.sh

exit 0