我正在使用iptables的速率限制模块来防止DoS攻击(我知道它不能阻止全面的DDoS,但至少它可以帮助减少攻击).
根据我的规则,我有类似的东西:
/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m limit --limit 20/minute --limit-burst 20 -j ACCEPT
它工作得很好,直到昨晚有人正在不停地打我的80号码头.根据规则正在删除连接(如日志中所示).但是,它也使服务器对其他合法用户也不可用.
我不明白为什么会这样.我认为除了充斥服务器的用户之外,它不会影响任何其他用户.
是因为iptables不堪重负吗?
任何反馈将不胜感激.
谢谢!
解决方法
您的规则似乎没有指定任何特定来源.在一分钟内接受20个新连接后,它将停止接受新连接.
您需要使用最近的模块,以便iptables记住连接的来源,并阻止从同一地址连接太快的人.这需要两个规则:一个用于iptables以“学习”地址,另一个用于iptables以查看该地址在指定时间内到达服务器的次数:
/sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --set /sbin/iptables -A INPUT -p TCP -m state --state NEW -d xx.xxx.xxx.xx --dport 80 -m recent --update --seconds 60 --hitcount 20 -j DROP
This article进入更多细节.