بستن IPهای چین

یکی از حملات معمول DDOS است و یکی از اصلی ترین منابع DDOS کشور چین است. به همین دلیل بستن کل IP های چین یک کار معمول است.

برای اینکار از ابزارهای ipset و iptables استفاده می‌کنیم. محدوده IP های چین هم از سایت http://ipdeny.com در دسترس است.

نصب ipset

$ sudo yum install ipset

با دستور زیر ماژول‌های مورد نیاز از Kernel را بارگذاری می‌کنیم.

$ sudo modprobe -v ipset
$ sudo modprobe -v ip_set_hash_net

ایجاد مجموعه IPهای چین

با استفاده از ipset مجموعه ای شامل محدوده IP های کشور چین می‌سازیم. فرمت کلی دستور به صورت زیر است: (hash:net برای محدوده IP و hash:net,port برای یک پورت خاص در محدوده IP است، geoblock نام مجموعه است.)

$ sudo ipset create geoblock hash:net

براساس دستور فوق قطعه کد زیر را در terminal اجرا کنید.

for IP in $(wget -O - http://www.ipdeny.com/ipblocks/data/countries/cn.zone)
do
    # really big hammer - block countryX, period
    sudo ipset add geoblock $IP
done

در این دستور ابتدا لیست محدوده IP های چین از ipdeny دریافت شده و تک تک آنها با فرمت ipset که قبلا بیان شد، به مجموعه geoblock اضافه می‌شوند.

اضافه کردن rule به iptables برای بلاک کردن IPهای تعریف شده در geoblock

با دستور زیر rule جدید را به iptables اضافه می‌کنیم:

$ iptables -I INPUT -m set --set geoblock src -j DROP

سپس بررسی می‌کنیم این rule به قوانین فایروال اضافه شده باشد.

$ sudo service iptables status

ذخیره کردن و برگرداندن ipset

$ sudo ipset save > /etc/sysconfig/ipset.<setname>

در دستور فوق setname برای مثال ما geoblock است.

$ sudo ipset restore -! < /etc/sysconfig/ipset.<setname>

ipset که برگردانده می‌شود همان setname که در نام فایل آمده است.

ماندگار کردن ipset

درصورتی که یک قانون ipset در /etc/sysconfig/iptables هاردکد شده باشد، و ipset هنوز load نشده باشد، فایروال بالا نخواهد آمد. با اسکریپت زیر هنگام boot ابزار ipset را بارگذاری می کنیم.

$ nano /usr/sbin/ipset_activate.sh

#!/bin/sh

# load ipset sets from /etc/sysconfig
# ipset set naming syntax is ipset.<setname>

find /etc/sysconfig -maxdepth 1 -type f -iname ipset.\* | while read SET;
do
    /usr/sbin/ipset restore -! < $SET
    if [ $? -eq 0 ]; then
        logger -t ipset "succes: restore of $SET"
    else
        logger -t ipset "fail  : restore of $SET"
    fi

        sleep 1

    IPSET=${SET##*.}
    /sbin/iptables -I INPUT -m set --set $IPSET src -j DROP
    if [ $? -eq 0 ]; then
        logger -t iptables "succes: add ipset $IPSET rule to iptables"
    else
        logger -t iptables "fail  : add ipset $IPSET rule to iptables"
    fi
done
EOF

این اسکریپت را قابل اجرا می‌کنیم.

$ sudo chmod 755 /usr/sbin/ipset_activate.sh

این اسگریپت را به /etc/rc.local اضافه می‌کنیم.

$ sudo echo "" >> /etc/rc.local
$ sudo echo "# restore ipset sets and add a non-presistent rule to iptables" >> /etc/rc.local
$ sudo echo "/usr/sbin/ipset_activate.sh" >> /etc/rc.local

اطمینان از load شدن ماژول کرنل ip_set

$ sudo sed -i 's|^IPTABLES_MODULES="|IPTABLES_MODULES="ip_set ip_set_hash_netport ip_set_hash_net|' /etc/sysconfig/iptables-config

 

برچسب ها: 
درخت مرجع: 

افزودن نظر جدید