Iptables

限制數據包速率、打開的連接和 IP 地址

  • November 24, 2018

tc在 Linux 上,我是否可以使用iptables或其他工具來控制/調整網路介面上的網路流量,用於以下目的:

  1. 控製網路包數率(或總數)。
  2. 控制連接(發送)的 IP 地址數量。
  3. 控制打開的 TCP 連接總數(每秒)。

如果是這樣,該怎麼做?

我沒有 nr 的答案。2(見下文)。對於 1. 和 3. 您可以使用limit模組:

  1. 控製網路包數率:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
  1. 控制打開的 TCP 連接總數(每秒):
iptables -A INPUT -m state -m tcp -p tcp --dport 80 --state RELATED,ESTABLISHED -m limit --limit 10/second -j ACCEPT

或者,您可以使用hashlimit模組:

  1. 控製網路包數率:
iptables -A INPUT -m hashlimit -m tcp -p tcp --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 10/sec --hashlimit-burst 2 --hashlimit-htable-expire 30000 --hashlimit-name pktlimit -j DROP
  1. 控制打開的 TCP 連接總數(每秒):
iptables -I INPUT -m hashlimit -m tcp -p tcp --dport 80 --hashlimit-above 10/sec --hashlimit-mode srcip --hashlimit-name connlimit -m state --state RELATED,ESTABLISHED -j DROP

您可以通過查看以下內容來監控 hashlimit 的執行情況:

cat /proc/net/ipt_hashlimit/pktlimit
cat /proc/net/ipt_hashlimit/connlimit

編輯

在 NAT 占主導地位的世界中,限制源 IP 地址的數量真的有意義嗎?2?我認為限制打開的 TCP 連接的總數更有意義,如下所示:

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

引用自:https://serverfault.com/questions/910132