![使用 iptables 对端口 80 进行速率限制是否浪费?](https://linux22.com/image/801746/%E4%BD%BF%E7%94%A8%20iptables%20%E5%AF%B9%E7%AB%AF%E5%8F%A3%2080%20%E8%BF%9B%E8%A1%8C%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6%E6%98%AF%E5%90%A6%E6%B5%AA%E8%B4%B9%EF%BC%9F.png)
我正在考虑将以下规则添加到我的 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
...并对此进行基准测试。