Назад | Перейти на главную страницу

Обработка HTTP-флуда через конфигурацию веб-сервера (приложение Django)

Веб-форум на базе Django, который я поддерживаю, в последнее время часто подвергался DDOS-атакам на уровне приложений. По сути, похоже, что на домашнюю страницу попадает HTTP-поток, заставляющий сервер выполнять большое количество внутренних запросов и загружать различные файлы для создания страницы. Пик потока составляет ~ 4000 запросов в минуту (типичная пропускная способность составляет около 500 об / мин), что приводит к отключению моего сервера.

Мой веб-сервер - это nginx, служащий обратным прокси для сервера приложений Gunicorn.

Я еще не использовал параметры безопасности Gunicorn: limit_request_line, limit_request_fields, limit_request_field_size). Но у меня есть nginx fail2ban установлен, и в моем jail.local для предотвращения HTTP-флуда:

[nginx-postflood]

enabled = true
filter = nginx-postflood
port = http,https
logpath = /var/log/nginx/access.log
findtime = 60
maxretry = 13
bantime = 300

[nginx-getflood]

enabled = true
filter = nginx-getflood
port = http,https
logpath = /var/log/nginx/access.log
findtime = 5
maxretry = 6
bantime = 600

Этот параметр не помог, и я не могу понять, почему. Когда я его тестирую, я могу заблокировать свой IP, так что он определенно работает. Возможно, в HTTP-потоке IP-адреса были рандомизированы.

Какую тактику я могу использовать для предотвращения такого рода DDOS на уровне приложений? Будучи новичком, я до сих пор ломаю голову над всем этим. Мы очень ценим помощь экспертов!

В итоге я справился с этим на уровне nginx. Я добавил следующее в http { в nginx.conf:

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=7r/s;
limit_conn_status 403;
limit_req_status 403;

А затем в файле виртуального хоста server { блок (вне любого location { блоки):

limit_conn conn_limit_per_ip 10;
limit_req zone=req_limit_per_ip burst=5 nodelay;

Пока эта конфигурация у меня работает нормально.


Примечание. Работает для DoS, но не уверен, насколько надежно он выдержит DDoS. Надеюсь, эксперт сможет вмешаться.