Один из моих серверов переходит в режим DOS - большое количество подключений в CLOSE_WAIT
состояния, которые не позволяют законным пользователям подключаться к системе.
Так есть ли способ закрыть CLOSE_WAIT
соединение, не убивая базовый серверный процесс? Прерывание процесса приведет к простою, которого я хочу избежать.
Есть ли другой путь?
Насколько я знаю, невозможно закрыть соединение 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
Краткое объяснение:
Надеюсь, это сработает для вас.