Hello, Sayetsky!
On June, 27 2013 at 14:49 you wrote to Рассылка FreeBSD UA:
SA> 27 июня 2013 г., 13:45 пользователь Alexey Markov <[email protected]>
написал:
??>>
??>> Есть некий веб-сервер под FreeBSD 8.3 на базе nginx и самописной
??>> CMS на Руби. В обычное время число соединений на нём выглядит
??>> примерно так:
??>>
??>> 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>? И стоит ли в этом случае
??>> увеличить сразу net.inet.ip.fw.dyn_max с дефолтных 8192?
??>>
SA> Может, для начала покрутить limit_zone, reset_timedout_connection etc?
reset_timedout_connection в конфиге nginx уже включен, а от limit_conn_zone
толку не много: даже нормальные клиенты иногда устанавливают до 10
соединений при скачивании картинок/скриптов/стилей, а по 10 соединений на
каждого бота дают в сумме до фига. Впрочем, это я тоже использую, но без
особого эффекта.
Но, как я понимаю, соединения в состоянии FIN_WAIT_1 к nginx уже отношения
не имеют - он закрыл соединение через close() и теперь система ждёт
подтверждения закрытия от клиента. А боты, как известно, вежливостью не
обременены. Вот я и думаю, как бы ограничить для ботов возможность создавать
новые соединения, ещё на уровне транспорта?
--
WBR, Alexey Markov.