TCP DOS:如何终止 CLOSE_WAIT 连接?

TCP DOS:如何终止 CLOSE_WAIT 连接?

我的一台服务器遭受了 DOS 攻击 - 状态下有大量连接CLOSE_WAIT阻止合法用户连接到系统。

那么,有没有办法在CLOSE_WAIT不终止底层服务器进程的情况下关闭连接?终止进程会导致停机,而这正是我想要避免的。

还有其他方法吗?

答案1

据我所知,如果不终止进程,就无法关闭 CLOSE_WAT 连接。

也许您可以使用 iptables 及其最新的模块来阻止在短时间内对同一 TCP 服务器端口和同一 IP 的多次连接尝试。

这里有一个例子(将 eth0 更改为您的网络接口或直接将其删除):

iptables -N LOGDOS
iptables -A LOGDOS -m limit --limit 5/minute --limit-burst 5 -j ULOG --ulog-nlgroup 1 --ulog-prefix "LOGDOS" --ulog-cprange 0 --ulog-qthreshold 1
iptables -A LOGDOS -j DROP
iptables -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 27015 -m state --state NEW -m recent --set --name cssdos
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 27015 -m state --state NEW -m recent --update --name cssdos --seconds 60 --hitcount 4 -j LOGDOS
iptables -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 27015 -j ACCEPT

简短解释:

  1. 前 3 行将由 ulogd 使用。它使我们能够记录丢弃的流量。我们正在创建一个名为 LOGDOS 的新 iptables 链。
  2. 第四行接受已建立的连接。
  3. 第五行将被最近的模块用来跟踪新的连接。
  4. 第 6 行将由最近模块使用。如果在 60 秒内有来自同一 IP 的新连接超过 3 个,它将被发送到 LOGDOS 链。
  5. LOGDOS 链将使用 ulogd 守护进程来写入日志(例如在 /var/log/ulog/syslogemu.log 中,这完全取决于 ulog 配置),并且默认情况下它将断开连接。

希望这对你有用。

相关内容