如果每分钟超过 n 个连接,则限制速率(切断)

如果每分钟超过 n 个连接,则限制速率(切断)

您建议我使用什么来根据每分钟 n 个连接来限制传入的 http 连接 (get/post) 的速率?

如果特定客户端在一分钟内建立超过 n 个连接,则断开所有进一步的连接,直到该分钟结束。

我目前使用 nginx 和 haproxy,但我确实在寻找最适合这项工作的工具。

更新

有些客户端每分钟允许的连接数更多,是否有办法添加每个客户端的规则?API 将是一个额外的好处。

答案1

这取决于您想如何优雅地应用截止。对于 TCP 层上的 DROP/DENY,您可以使用 iptables 执行此操作,例如:

iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set  
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP

你可以针对特定客户设定目标,并为第二条规则提供额外的替代方案,例如

iptables -I INPUT -s 1.2.3.4 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 50 -j DROP
iptables -I INPUT -s 4.3.2.1 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

答案2

我不确定 nginx 是否支持此类限制。不过,您可以使用 iptableslimit模块。您可以查看这一页了解更多解释。

下面是一个以每分钟 5 个连接的速率接受新的 HTTP 连接的示例。

-A FORWARD -d your.server.ip.addr -m state --state NEW -p tcp --dport 80 \
   -m limit --limit 5/minute -j ACCEPT

相关内容