作者博客上的地址:點擊此處
前言
近期筆者在東南沿海某數(shù)據(jù)中心托管的服務器上經(jīng)常出現(xiàn)ssh爆破登陸警告,Nginx日志中也出現(xiàn)不少腳本小子的試探痕跡并扇。雖然不對安全構(gòu)成太大的威脅卿吐,但看起來實在難受嘶居。與托管方聯(lián)系但狭,對方稱今年6月后不再提供路由保護 ::aru:unhappy::
無奈只能自己動手旬渠,豐衣足食税课。
屏蔽思想
從APNIC處獲取全球IPv4數(shù)據(jù)闲延,使用IPtables添加CN部分IP到ACCEPT規(guī)則中,其余DROP韩玩。因為逐條添加和加載文件會造成IPtables規(guī)則數(shù)過多垒玲,影響大并發(fā)性能,故轉(zhuǎn)為使用IPset構(gòu)建IP集合找颓。
具體操作(以CentOS6為例)
安裝IPset
直接使用yum install ipset
安裝即可
使用IPSet創(chuàng)建IP集合
ipset create mainland hash:net maxelem 65536
其中mainland是自己定義的IP集合名稱合愈,可修改成你自己的名稱
編寫腳本自動執(zhí)行更新APNIC數(shù)據(jù)到IP集合
腳本內(nèi)容如下
#!/usr/bin/env bash
wget --no-check-certificate -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /home/mainland.txt
ipset flush mainland
while read ip; do
ipset add mainland $ip
done < /home/mainland.txt
ipset save chnroute > /home/mainland.conf
假設(shè)腳本保存在/home/mainland.sh
給可執(zhí)行權(quán)限chmod +x /home/mainland.sh
設(shè)置Crontab定時每天零點更新一次IP集合
crontab -e
添加一行
0 0 * * * /home/mainland.sh
配置IPtables限制訪問
假設(shè)需要放通8888端口的TCP和UDP大陸訪問
iptables -A INPUT -m set --match-set mainland src -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -m set --match-set mainland src -p udp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j DROP
iptables -A INPUT -p udp --dport 8888 -j DROP