fail2ban на примере semena.ru (rest)
Создано две конфигурации:
фильтр /etc/fail2ban/filter.d/resetpassword-abuse.conf
конфигурация jail /etc/fail2ban/jail.d/rest.conf
смотрим логи tail -F /var/www/httpd-logs/semena.ru.access.log | grep "GET /rest"
Фильтрация:
Видим как на рест идут запросы и исходя из этих данных делаем фильтр, по которому будет f2ban блочить хосты. Делаем правило фильтрации в /etc/fail2ban/filter.d/resetpassword-abuse.conf
[Definition] failregex = ^<HOST> - - [.
?] "GET /rest/RestorePassword/resetPassword/?login=[^ ]+ HTTP/1.1" 403
^<HOST> - - [.
?] "GET /rest/Registration/regUser/?name=[^&]+&phone=[^&]+&email=[^ ]+ HTTP/1.1" 404
Переносы очень важны для фильра, приводим к виду
Конфигурация fail2ban
[resetpassword-abuse]
enabled = true
filter = resetpassword-abuse
logpath = /var/www/httpd-logs/semena.ru.access.log
bantime = 14400
findtime = 1800
maxretry = 5
action = iptables[name=resetpassword-abuse, port=http, protocol=tcp] ignoreip = 78.29.35.137 87.237.235.121 82.147.126.5 37.27.2.26 135.181.150.51 83.220.168.197 2.57.96.253
filter, который определяет, какие записи логов считаются "подозрительными".
Имя фильтра соответствует файлу resetpassword-abuse.conf в каталоге /etc/fail2ban/filter.d/
bantime, время блокировки IP-адреса, если он попал под правило. Значение указано в секундах
findtime, интервал поиска попыток нарушений — 1800 секунд = 30 минут. Если в течение этих 30 минут зафиксировано maxretry или более попыток — IP будет заблокирован.
maxretry, максимально допустимое количество "плохих" попыток.
action, действие, выполняемое при срабатывании правила.
В данном случае — использовать iptables для блокировки IP-адреса на уровне фаервола.
name=resetpassword-abuse — используется как метка в логах и iptables.
port=http — блокируется порт 80 (HTTP).
protocol=tcp — блокируется по TCP-протоколу.
ignoreip - вайт-лист
Просмотр заблокированных адресов реста - fail2ban-client status resetpassword-abuse
Просмотр заблокированных адресов semena https - fail2ban-client status semena