Quoting Alexey Markov <[email protected]>:
Всем, всего, и много!
Есть некий веб-сервер под FreeBSD 8.3 на базе nginx и самописной
CMS на Руби. В обычное время число соединений на нём выглядит
Эту самую CMS обучить работать через local socket
примерно так:
Connections: 1404
TIME_WAIT 1316
ESTABLISHED 70
FIN_WAIT_1 8
LAST_ACK 5
SYN_RCVD 3
FIN_WAIT_2 1
LISTEN 1
В последнее время на этот веб-сервер повадились набегать боты с целью
устроить DDoS. С помощью nginx все ботовые запросы успешно отсекались,
но вот с числом соединений творилось неприятное:
Connections: 68628
FIN_WAIT_1 44255
TIME_WAIT 11944
LAST_ACK 6141
SYN_RCVD 3687
ESTABLISHED 1589
FIN_WAIT_2 765
CLOSING 241
CLOSED 5
LISTEN 1
Насколько я помню, состояние FIN_WAIT_1 - это когда приложение (nginx)
уже закрыло соединение через close(), система послала FIN клиенту, а в
ответ - тишина... В итоге, через некоторое время общее число соединений
упирается в системный лимит, и все остальные клиенты обламываются. :-(
Собственно, вопрос такой: будет ли ipfw считать соединения в состоянии
FIN_WAIT_1 как "всё ещё установленные", и тем самым можно ли ограничить
их число через limit src-addr <N>? И стоит ли в этом случае увеличить
С Немалой долей вероятности это приведет к росту числа соединений в
состояниях FIN_WAIT_2 и TIME_WAIT
Достаточно большое количество соединений в TIME_WAIT как раз скорее
всего из-зв вмешательства firewall в процесс закрытия соединения.
сразу net.inet.ip.fw.dyn_max с дефолтных 8192?
--
WBR, Alexey Markov.