Process
通過 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 設置連接限制。
您找到的解決方案是正確的:
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 個數據包太瘋狂了。