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.

Ответить