TCP DOS:如何终止CLOSE_WAIT连接?

我的一台服务器正在进行DOS操作 – 在CLOSE_WAIT状态下有大量连接阻止合法用户连接到系统。

那么有什么办法可以closuresCLOSE_WAIT连接而不会造成底层的服务器进程? 杀死这个过程会导致我想避免的停机时间。

有没有其他的方法?

据我所知,没有办法closuresCLOSE_WAT连接而不杀死进程。

也许你可以使用iptables及其最近的模块,在短时间内停止多个连接尝试到相同的TCP服务器端口和相同的IP。

这里有一个例子(改变你的networking接口的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. 前三行将被ulogd使用。 它使我们能够logging下降的stream量。 我们正在创build一个名为LOGDOS的新的iptables链。
  2. 第四行接受build立的连接。
  3. 第五行将被最近的模块用来跟踪新的连接。
  4. 第六行将被最近的模块使用。 如果在不到60秒的时间内有超过3个来自同一个IP的新连接,它将被发送到LOGDOS链。
  5. LOGDOS链将使用ulogd守护进程来写一个日志(例如在/var/log/ulog/syslogemu.log中,这一切都取决于ulog的configuration),默认情况下它会删除连接。

希望这会为你工作。