Я использую mod_evasive Apache, чтобы уменьшить вероятность появления DOS. Проблема, с которой я столкнулся, заключалась в том, что приложение за обратным прокси-сервером (которым является наш серверный apache) очень слабое и разработано так, что одна страница загружает 200 файлов (css, js и т. Д.). Поэтому, когда я использую сценарий вроде https://github.com/rohitchormale/hulk/blob/master/hulk.py, Мне удалось убить приложение, потому что сценарий генерирует множество уникальных URI для атаки и потому что я был обязан разрешать более 300 страниц (* 10 возможных клиентов с одинаковым IP-адресом) в секунду.
Итак, решение, о котором я подумал, - это занести в черный список ip, когда он получает ошибку 404 за одну секунду. Возможно ли это?
Как предположил Свен в своем комментарии, Fail2ban позволяет такое поведение, анализируя журналы Apache. Итак, позвольте мне напомнить вам мою цель: запретить пользователю доступ к моему серверу, если он вызвал определенное количество ошибок 404 или любую другую ошибку. Вот что я сделал в своих настройках:
В /etc/fail2ban/jail.conf:
[http-error-dos]
enabled = true
port = http,https
filter = http-error-dos
logpath = /var/log/httpd/*acces*log #change it to put your path
maxretry = 20
findtime = 100
bantime = 600 #ban for 10 minutes
action = iptables[name=HTTP, port=http, protocol=tcp]
В /etc/fail2ban/filter.d/http-error-dos.conf:
# Fail2Ban configuration file
failregex = <HOST>.* HTTP/.*\" [13456789][1023456789]{2,2}.*
Обязательно измените failregex в зависимости от формата вашего журнала.