使用 iptables 对端口 80 进行速率限制是否浪费?

使用 iptables 对端口 80 进行速率限制是否浪费?

我正在考虑将以下规则添加到我的 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

...并对此进行基准测试。

相关内容