В логах веб сервера можно заметить множество ошибок HTTP error 404, это может быть связано как с поведением различных ботов, так и с атакующими.
В процессе атаки веб сервера, атакующие используют различные инструменты к примеру DirBuster, OWASP ZAP и подобные, которые генерируют множество ошибок 404.
Данный метод надо применять с осторожностью, так как могут заблокироваться легитимные пользователи или поисковые системы. К примеру если удалить несколько страниц
Данный метод не будет работать с серверами установленными за реверс прокси, к примеру cloudflare. Блокировка происходит на фаерволе, а подключение к серверу происходит от серверов прокси. Что может привести к остановке публикации сайта.
По умолчанию у Nginx и Apache формат лога одинаковый. Разница лишь в пути до журналов работы.
На самом деле это может не являться атакой, причин такому поведению может быть много.
1) Заходим в консоль
2) Необходимо создать файл с политикой fail2ban
1 | echo > /etc/fail2ban/filter.d/nginx-400.conf |
со следующим содержимым
1 2 3 4 | [Definition] failregex = ^<HOST>.*"(GET|POST).*" (404|444|403|400) .*$ ignoreregex = /apple-touch-icon.* /favicon\.ico |
Правило обрабатывает ошибки 400, при этом игнорирует некоторые файлы, к которым обычно обращаются браузеры.
3) Тестируем правило
1 | fail2ban-regex --print-all-matched /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-400.conf |
4) Открываем политики /etc/fail2ban/jail.conf и добавляем следующую
1 2 3 4 5 6 7 8 | [nginx-400] enabled = true port = http,https filter = nginx-400 logpath = /var/log/nginx/access.log bantime = 1800 findtime = 10 maxretry = 10 |
5) перезапускаем fail2ban для применения изменений
1 | service fail2ban restart |
Проверить статистику можно командой
1 | fail2ban-client status nginx-400 |