作者博客上的地址:点击此处
前言
近期笔者在东南沿海某数据中心托管的服务器上经常出现ssh爆破登陆警告,Nginx日志中也出现不少脚本小子的试探痕迹。虽然不对安全构成太大的威胁,但看起来实在难受。与托管方联系,对方称今年6月后不再提供路由保护 ::aru:unhappy::
无奈只能自己动手,丰衣足食。
屏蔽思想
从APNIC处获取全球IPv4数据,使用IPtables添加CN部分IP到ACCEPT规则中,其余DROP。因为逐条添加和加载文件会造成IPtables规则数过多,影响大并发性能,故转为使用IPset构建IP集合。
具体操作(以CentOS6为例)
安装IPset
直接使用yum install ipset
安装即可
使用IPSet创建IP集合
ipset create mainland hash:net maxelem 65536
其中mainland是自己定义的IP集合名称,可修改成你自己的名称
编写脚本自动执行更新APNIC数据到IP集合
脚本内容如下
#!/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
假设脚本保存在/home/mainland.sh
给可执行权限chmod +x /home/mainland.sh
设置Crontab定时每天零点更新一次IP集合
crontab -e
添加一行
0 0 * * * /home/mainland.sh
配置IPtables限制访问
假设需要放通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