我的互联网提供商设置了数据包速率限制(每秒最多 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
代替-A
ACCEPT。
此外,根据应用程序,这可能会终止连接。在这种情况下尝试使用 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