我正在考虑将以下规则添加到我的 IP 表中:
-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP
-A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT
以避免意外的基于 Ajax 的 Web API 滥用(过多请求)。
由于端口 80 请求的普遍性,这种状态过滤是否被认为是资源密集型的或浪费的(与诸如限制端口 22 的速率之类的操作相比,这会导致状态少得多)?我意识到在专用防火墙中执行此操作是理想的,但我正在尝试看看我能在我的服务器中完成什么。
答案1
我不知道使用状态模块与过滤 SYN 数据包(可以有效地完成相同的技巧)的性能如何。
也许您可以测试一下...尝试添加规则 - 然后使用 Apache Bench 或类似程序生成尽可能多的请求,同时监控服务器的 CPU 和内存使用情况。然后尝试添加以下规则:
-N tcpsyn
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn
-A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN
-A tcpsyn -p tcp --dport 80 -j DROP
...并对此进行基准测试。