连接数过多,iptables 无法限制每个 ip 的连接数

连接数过多,iptables 无法限制每个 ip 的连接数

我有一台配备 32GB RAM 的专用服务器。它运行良好,直到一些用户来对我的服务器进行 DDoS 攻击。我的上行带宽使用率非常高(超过 150Mbps)。我使用以下命令查看了 netstat:

netstat -an | grep tcp | awk '{print $5}' | cut -f 1 -d : | sort | uniq -c | sort -n

它显示了多个 IP 的数千个连接:我使用以下 iptable 规则来限制每个 IP 的连接:

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

iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT

我保存了这些规则,这些规则在 iptables 列表中位于顶部。我重新启动系统以关闭所有连接并恢复 iptable 规则。将服务器上线。服务器几乎死机,再次出现数千个连接。我安装了 UFW,只有几个端口处于打开状态。

我该怎么做才能阻止它?如何终止每个 IP 建立的连接?顺便说一句。所有 IP 都是屏蔽的和假的。

编辑:

netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
      1 CLOSING
      1 established)
      1 Foreign
      2 SYN_SENT
      7 FIN_WAIT2
     16 LISTEN
     21 CLOSE_WAIT
     48 LAST_ACK
    209 SYN_RECV
    284 FIN_WAIT1
    772 ESTABLISHED
  35426 TIME_WAIT

答案1

尝试这个:

/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --set
/sbin/iptables -I INPUT -p tcp --dport 80 -i eth? -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

第一行将监视连接到您的以太网接口的 IP。

第二行将检查连接是否在过去 60 秒内建立,以及数据包流量是否高于 10,如果是,则将断开连接。

要阻止 IP 地址,您必须输入:

/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

如果您只想阻止某个 IP 对某个端口的访问,则必须输入:

/sbin/iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port 25 -j DROP

上述规则将丢弃所有来自 IP xxx.xxx.xxx.xxx 到端口 25 的数据包。

相关内容