Ddos
Nginx
Ограничение одновременных запросов с одного IP адреса.
limit_req_zone $binary_remote_addr zone=myzone:10m rate=20r/m;
Данная строка означает
zone=myzone
- название зоны
10m
- буфер для хранения данных IP адресов. Этого числа вполне достаточно. Если буфер будет заполнен будут удаляться самые невостребованные записи
rate=20r/m
- в данном случае означает 20 запросов в минуту, можно указать например 2r/s
это будет значит 2 запроса в секунду. Далее в лог будут писаться сообщения об ошибке и остальные запросы блокироваться.
location / {
limit_req zone=myzone burst=20 nodelay;
limit_req_status 429;
proxy_pass http://myzone;
}
limit_req_status
- какое сообщение об ошибке будет отправлено клиенту.
burst=20
- какое количество пакетов может привысить заданное выше в rate
число. В моем случае указано 20 запросов в минуту, значит я могу посылать запрос не чаще чем раз в 3 секунды, но указывая 20 здесь, показывает, что я могу отправить 20 запросов в минуту и не получить ошибку.
nodelay
- означает, что те 20 запросов, что я могу отправить будут без задержек, иначе запрос отработается с задержкой в 3 секунды.
Не забудье исключить всю графику и системные url из этого правила.
fail2ban
/etc/fail2ban/jail.conf
[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
findetime = 60
maxretry = 30
bantime = 1800
enabled
- включаем обработчик
filter
- тип фильтра
port
- порт
logpath
- путь к логу который будем парсить
findetime
- время за которое будем искать запросы
maxretry
- количество запросов за findetime
время
bantime
- время на которое блокируем
[ Править ]