利用iptables的recent模块来抵御DOS攻击
作者:linux120 发布时间:July 3, 2014 分类:服务器配置
防范DOS攻击用iptables就可以简单的实现,不过对CC攻击还是无效的,接下来我会再写关于抵御CC攻击和DDOS攻击的文章。
在《用iptables的connlimit模块限制并发连接数》一文中我们讲了利用iptables的connlimit模块来限制单IP的并发连接数,效果还是很不错的。后来我发现再加上recent模块更加灵活。
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
iptables -I INPUT 2 -p tcp --dport 80 -m state --state NEW -m recent --set --name DOS
iptables -I INPUT 3 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 30 --name DOS -j DROP
1.利用connlimit模块将单IP的并发设置为30;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
2.利用recent和state模块限制单IP在60s内只能与本机建立30个新连接。被限制一分钟后即可恢复访问。
下面对最后两句做一个说明:
1.第一句是记录访问tcp 80端口的新连接,记录名称为DOS
--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目
2.第二句是指DOS记录中的IP,60s内发起超过20次连接则拒绝此IP的连接。
--update 是指每次建立连接都更新列表;
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
3.iptables的记录:/proc/net/ipt_recent/DOS
关于recent更多更详细的用法请查看iptables手册。
另外iptables还有日志记录功能,我们可以把达到过滤要求的IP输出到系统日志中,然后把这些IP筛选出来封掉。
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --name DOS --second 60 --hitcount 30 -j LOG --log-prefix "Dos Attack"
这样一来,当某IP访问tcp 80端口的新连接在60秒内超过30的时候,该IP将会被记录/var/log/messages当中。