我有一台配备 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 的数据包。