![通过 iptables 设置连接限制](https://linux22.com/image/58302/%E9%80%9A%E8%BF%87%20iptables%20%E8%AE%BE%E7%BD%AE%E8%BF%9E%E6%8E%A5%E9%99%90%E5%88%B6.png)
我想限制应用程序(AceStream Player)的IP流量。问题是,如果建立太多 IP 连接,我就会断开连接。
有谁知道如何使用 iptables 将连接限制为例如 10/秒?
受到下面答案的启发,我尝试了:
$iptables -A OUTPUT -p tcp --dport 8621 -m limit --limit 10/s -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 8621 -j DROP
这似乎限制了连接,但不知何故达到了较低的限制,如 2-3/秒。上限规则是否将连接或数据包限制为 10/秒?
是否也可以使用 QUEUE 而不是 DROP 来延迟连接?
答案1
这可以通过该选项轻松完成--limit
。
例如,iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/s -j ACCEPT
应该是一个很好的起点。
我还建议您查看 Gregor Purdy 撰写的 Linux iptables pocket 参考资料(ISBN:0-596-00569-5)。每当我对 iptables 有疑问时我都会使用它。
答案2
您需要限制建立新连接的速率。如果你只是使用-m limit
你会限制数据包速率,无论是新的连接数据包还是现有连接的数据包。
根据这个问题你可以用-m state
它。整个 iptables 规则集是:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT
您可能更愿意稍微微调此规则,使其与出现的任何内容相匹配。
例如,仅以这种方式限制 tcp 连接,并保留其他任何内容:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -j REJECT
请注意,我只更改了最后一条规则,其他所有内容都将被默认接受或归结为其他规则。
要想更进一步,你应该真正学习 iptables。 @sailor 已经向您推荐了一本关于这个主题的好书。有足够的网上好资源以及。一旦你掌握了 iptables 处理的概念(链、表、规则和策略),你就会发现man 8 iptables
所有的答案。
如果您没有时间深入了解 iptables,那么使用 iptables 前端也是一个不错的选择。我用岸墙对于我管理的大多数防火墙。