限制数据包速率、打开连接和 IP 地址

限制数据包速率、打开连接和 IP 地址

在 Linux 上,我可以使用诸如或其他工具tciptables控制/调整网络接口上的网络流量,以达到以下目的:

  1. 控制网络数据包数量速率(或者总数)。
  2. 控制连接(发送)的 IP 地址数量。
  3. 控制打开的 TCP 连接的总数(每秒)。

如果是的话,该怎么做?

答案1

对于第 2 点,我没有答案(见下文)。对于第 1 点和第 3 点,您可以使用限制模块:

  1. 控制网络包数速率:

    iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
    
  2. 控制打开的 TCP 连接总数(每秒):

    iptables -A INPUT -m state -m tcp -p tcp --dport 80 --state RELATED,ESTABLISHED -m limit --limit 10/second -j ACCEPT
    

或者您可以使用哈希限制模块:

  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
    
  2. 控制打开的 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 占主导地位的世界中,像您想要在第 2 点中做的那样限制源 IP 地址的数量真的有意义吗?我认为限制打开的 TCP 连接的总数更有意义,如下所示:

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

相关内容