Я только что выполнил базовый DDOS со своего компьютера:
websocket-bench -a 2500 -c 200 wss://s.example.com
Что к моему полному ужасу разбило мой сервер! WS работает, подключившись к моему прокси nginx:
location / {
proxy_pass http://sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60;
}
upstream sock {
server 127.0.0.1:1203 fail_timeout=1s;
}
и локально на сервере по порту 1203
является трещотка. Настройка храповика заключается в том, что я разрешаю любое соединение и первый onMessage
выполняет аутентификацию и, если она недействительна, соединение закрывается.
Я также пробовал аутентификацию, передавая заголовки при первом соединении, и если он неверен, сокет закрывается, но это не помогло вообще, и nginx все еще достигает 100% ресурсов, а затем падает.
Что я должен анализировать, чтобы предотвратить эти сбои?
При смене восходящего канала на другой закрытый порт (т. Е. Отключение его) сервер все равно дает сбой.
Либо измените логику аутентификации, чтобы Nginx ее обрабатывал, либо внедрите лимиты запроса и подключения в Nginx, чтобы контролировать, сколько соединений принято и передано на вышестоящий сервер
Других решений пока нет …