And*_*ndy 6 process iptables limit tc application
我有一个由我的互联网提供商设置的数据包速率限制(每秒最多 10 个)。如果我想使用 AceStream 播放器,这是一个问题,因为如果我超过限制,我就会断开连接。
如何限制该程序的互联网访问?
我尝试了建议的命令:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
但我收到一条致命错误消息:
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.
Run Code Online (Sandbox Code Playgroud)
具有管理员权限:
sudo iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
没有错误信息了。但它仍然无法正常工作,我断开连接。
命令行中是否有错误?还是我必须使用 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
Run Code Online (Sandbox Code Playgroud)
这种方法似乎无助于仍然使用该应用程序。所以,我发布了另一个问题:通过 iptables 设置连接限制。
您找到的解决方案是正确的:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
但它假设了 DROP 或 REJECT 的默认策略,这对于 OUTPUT 来说并不常见。您需要添加:
iptables -A OUTPUT -j REJECT
Run Code Online (Sandbox Code Playgroud)
请务必在 ACCEPT 之后添加此规则。要么按此顺序执行它们,要么使用-I
代替-A
ACCEPT。
此外,根据应用程序,这可能会终止连接。在这种情况下,请尝试使用 DROP 而不是 REJECT或尝试使用不同的--reject-with
(默认为 icmp-port-unreachable)。
我刚刚用 telnet 对 DVR 服务器进行了测试,它没有终止连接。当然,由于新连接是一个输出数据包,如果您使用 REJECT,尝试在达到限制后立即重新连接将立即失败。
我从评论中了解到,您的 ISP 也希望您限制 INPUT 数据包……您不能这样做。当您能够阻止它们时,它们已经到达您的 NIC,这意味着它们已经被您的 ISP 处理了。当您限制 OUTPUT 时,INPUT 数据包计数也会显着增加,因为大多数 ACK 无法发送出去,从而导致大量重传。
每秒 10 个数据包是疯狂的。