การ Block IP โดยใช้ IPtable แบบสามารถเลือกประเทศได้

เพื่อนๆหลายคนที่ดูแลระบบอยู่ คงเคยมีปัญหากับพวก Spammer หรือ Hacker ที่เข้ามาป่วนบน Server อยู่บ่อยๆ
แนวทางแก้ไขคือ ดูร่องรอยที่ยังเหลือในระบบ ไม่ว่าจะเป็น Log หรือ ส่วนอื่นๆ แล้วเช็คกลับว่ามาจากที่ไหน IP อะไร แล้วทำการ Block
ซึ่งอาจไม่ใช่ทางแก้ไขที่ดีเสมอไป เพราะอย่างที่ทราบ IP มันเปลี่ยนกันได้

ดังนั้นบทความนี้จะเป็นการ Block IP แบบรายประเทศ นั่นคือสามารถเลือกได้เลยว่าคุณจะ Block IP จากประเทศไหน
ไม่ให้เข้ามาใช้งาน service บน Server ของคุณ แต่อย่างที่บอก IP มันเปลี่ยนกันได้
ดังนั้นวิธีการนี้จะไม่ได้ผลกับคนที่ใช้ Proxy หรือตั้งใจเปลี่ยนแปลง/ซ่อน IP ของเขามาแล้ว แต่ยังคงได้ผลในการป้องกัน
ระบบของคุณจากการ Scan หรือ Spam อัตโนมัติครับ

ปล.บทความนี้แปลมา ดังนั้นหากท่านอ่านแล้วไม่เข้าใจลองเข้าไปอ่านโดยตรงได้ที่นี่ครับ
http://www.cyberciti.biz/faq/block-entier-country-using-iptables/

ก่อนอื่นแนะนำให้ไปโหลด IP block จากที่นี่มาก่อน >>Click<<
ซึ่ง File ที่ได้จะอยู่เป็น CIDR format เพื่อใช้กับ Shell ด้านล่าง


#Code

#!/bin/bash
### Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code ###
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



Save script ด้านบนด้วยสิทธิของ root และอย่าลืมเปลี่ยน mode นะครับ เพราะมันเป็น script
เมื่อเสร็จแล้วให้ติดตั้ง script โดย Crontab
@weekly /path/to/country.block.iptables.sh

** หมายเหตุ /path/to/ คือชื่อ path ที่คุณเก็บ Script ไว้นะครับ **



ถ้าในกรณีที่ต้องการ Block ในทันทีให้ใช้คำสั่งโดยตรงได้เลยครับ
# /path/to/country.block.iptables.sh




เท่านี้ก็เป็นการ Block traffic จากทั้งสองประเทศแล้วครับ
ลองนำไปปรับใช้กันดูนะครับ

ความคิดเห็น

บทความที่ได้รับความนิยม