Как добавить новое правило (filter + jail) fail2ban для своего сервиса.
1. Определить регулярное выражение
Для начала мы должны найти строку в лог-файле сервиса, по которой будем банить пользователя. Вот пример строки из одного моего сервиса:
Passcode incorrect; userId [100500]; 80.80.100.100
Вы можете увидеть сообщение о некорректном вводе пароля с указанием внешнего IP адреса пользователя. Мы должны заменить IP адрес на специальный тег <HOST> внутри выражения, чтобы fail2ban смог по нему выцепить из строки нужный IP адрес. У меня получилась такое выражение:
Passcode incorrect; mailId \[.*\]; <HOST>
2. Создать фильтр
Создаем новый файл в директории filter.d , к примеру : /etc/fail2ban/filter.d/myservice.conf с нашим выражением:
[Definition] failregex = Passcode incorrect; mailId \[.*\]; <HOST>
Если вы хотите добавить какие-либо исключения из правил (фильтра), добавьте ignoreregex. По одному выражению на строку. Например:
ignoreregex = 192.168.0.1
Затем необходимо протестировать наш фильтр командой fail2ban-regex:
fail2ban-regex /var/log/myservice.log /etc/fail2ban/filter.d/myservice.conf /etc/fail2ban/filter.d/myservice.conf
формат: fail2ban-regex <лог файл> <фильтр> <ignore-фильтр>
Так что если вы используете исключающие выражения (ignoreregex), вы должны обязательно указать третий параметр (тот же конфигурационный файл)! В противном случаи он не будет протестирован.
В результате теста получаем что-то типа:
Lines: 15390 lines, 1 ignored, 5 matched, 15384 missed
3. Создать правило
Создаем новый файл в директории jail.d , к примеру myservice.conf с описанием правила бана по фильтру:
# имя сервиса [myservice] # вкл / откл enabled = true # порты для бана пользователю (число или текст) port = http,https # имя фильтра из предыдущего шага filter = myservice # лог файл сервиса для разбора logpath = /var/log/myservice.log # правило бана: # за 5 раз в течении 1 минуты (60 секунд) maxretry = 5 findtime = 60 # баним на 10 минут (600 секунд) bantime = 600
Тестируем:
service fail2ban restart fail2ban-client status fail2ban-client status myservice
Ссылки по теме:
- Обработка ошибки HTTP 404 для популярных веб сервисов: Nginx, HAProxy, HTTP.
- Как забанить повторные попытки взлома.