通过 iptables 设置数据包速率限制

通过 iptables 设置数据包速率限制

我的互联网提供商设置了数据包速率限制(每秒最多 10 个)。如果我想使用 AceStream 播放器,这就是一个问题,因为如果超过限制,我就会断开连接。

如何限制该程序的互联网访问?

我尝试了建议的命令:

iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT

但我收到一条致命错误消息:

FATAL: Error inserting ip_tables (/lib/modules/3.2.0-67-generic/kernel/net/ipv4/netfilter/ip_tables.ko): Operation not permitted
iptables v1.4.12: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

具有管理员权限:

sudo iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT

不再有错误消息。但它仍然不起作用,我断开连接。

是不是命令行有错误?或者我必须使用 iptables 的其他参数吗?

以下是当我超出提供商的限制时收到的实际消息。在此输入图像描述

到目前为止,我尝试了不同的方法,但没有一个不起作用。

sudo iptables -A INPUT -p tcp --syn --dport 8621 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 9/second --limit-burst 10 -j ACCEPT

sudo iptables -A INPUT -p tcp --destination-port 8621 --syn -m state --state NEW -m limit --limit 9/s --limit-burst 10 -j ACCEPT

这种方法似乎对继续使用该应用程序没有帮助。所以,我发布了另一个问题:通过 iptables 设置连接限制

答案1

您找到的解决方案是正确的:

iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT

但它假设默认策略为 DROP 或 REJECT,这对于 OUTPUT 来说并不常见。您需要添加:

iptables -A OUTPUT -j REJECT

请务必在 ACCEPT 规则之后添加此规则。要么按此顺序执行它们,要么使用-I代替-AACCEPT。

此外,根据应用程序,这可能会终止连接。在这种情况下尝试使用 DROP 而不是 REJECT或尝试使用不同的--reject-with(默认为 icmp-port-unreachable)。

我刚刚用 telnet 测试了 DVR 服务器,它没有中断连接。当然,由于新连接是输出数据包,因此如果使用 REJECT,在达到限制后立即尝试重新连接将立即失败。

我从评论中得知,您的 ISP 也希望您限制您的 INPUT 数据包...您不能这样做。当您能够阻止它们时,它们已经到达您的 NIC,这意味着它们已被您的 ISP 占用。当您限制 OUTPUT 时,INPUT 数据包计数也会显着增加,因为大多数 ACK 无法完成,从而导致大量重传。

每秒 10 个数据包太疯狂了。

答案2

同步洪水保护:

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

秘密端口扫描仪:

# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

死亡之平:

# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

相关内容