需kangle 3.1以上商业版支持,搭配ipset或iptables自动封禁IP,解禁IP。

安装软件包

1
2
3
4
5
# centos
yum install ipset iptables

# Debian
apt install ipset iptables

创建kangle的防火墙集合

1
2
3
ipset create kangle hash:ip hashsize 4096 maxelem 1000000
# 加入系统自启动
echo "/usr/sbin/ipset create kangle hash:ip hashsize 4096 maxelem 1000000" >> /etc/rc.d/rc.local

ipset的集合丢入Iptables的链,使与iptables和ipset进行联动。

1
2
3
iptables -I INPUT -m set --match-set kangle src -p tcp -m multiport --destination-port 80,81,443,3312,3313 -j DROP
service iptables save
service iptables restart

增加kangle配置文件
/vhs/kangle/ext目录新建一个xml文件

1
2
3
4
5
6
7
8
9
10
touch /vhs/kangle/ext/ipset.xml;
cat >>/vhs/kangle/ext/ipset.xml<<EOF
<!--#start 800 -->
<?xml version="1.0" encoding="utf-8"?>
<config>
<block_ip_cmd>/usr/sbin/ipset add kangle ${ip}</block_ip_cmd>
<unblock_ip_cmd>/usr/sbin/ipset del kangle ${ip}</unblock_ip_cmd>
<flush_ip_cmd>/usr/sbin/ipset flush kangle</flush_ip_cmd>
</config>
EOF

重载kangle配置文件

1
/vhs/kangle/bin/kangle -r

屏蔽的IP查看

1
ipset list kangle

卸载kangle ipset防御

1
2
3
rm -f /vhs/kangle/ext/ipset.xml
/vhs/kangle/bin/kangle --r
ipset flush

使用kangle黑名单

进入kangle的管理后台:ip:3312

black_list标记模块。在请求控制中可以使用这个模块,这个可以和其它模块配合,如ip_rate用来检测某个ip的访问频率。仅在全局请求控制中才会同步到防火墙上。
per_ip_deny,在配置==>资源限制,勾上per_ip_deny,kangle会对超过每ip连接数限制的加入黑名单。

设置2秒80次访问,拉入黑名单,目标选择拒绝。
kangle