通过 iptables 设置连接限制

通过 iptables 设置连接限制

我想限制应用程序(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 前端也是一个不错的选择。我用岸墙对于我管理的大多数防火墙。

相关内容