Моя версия fail2ban
#fail2ban-server -V
Fail2Ban v0.9.3
в файл
/etc/fail2ban/jail.local добавить:
[minecraft]
filter = minecraft
enabled = true
logpath = full_path_to_minecraft_logs
bantime = 3600
findtime = 60
maxretry = 3
[minecraft] - название файла-фильтра (
minecraft.conf), либо (если назвали секцию как-нибудь произвольно), используем директиву
filter;
filter - указывает название файла-фильтра( в нашем случае
minecraft.conf) без расширения;
findtime и
bantime в секундах;
maxretry - количество вхождений строки в лог;
logpath - полный путь к файлам логов. Можно использовать
* и
? как знаки-подстановки.
В файле-фильтре
/etc/fail2ban/filter.d/minecraft.conf пишем следующее:
[Definition]
failregex = \[INFO\] \[\/<HOST>:\d+\] <-> InitialHandler has connected$
ignoreregex =
-----------------------------------------------
Правила, используемые вашей версией fail2ban
зависят от версии питона, используемого на системе.
#python -V
Python 2.6.6
Документация на модуль регулярных выражений python 2.7:
https://docs.python.org/2/library/re.html
Учитывайте, что флаг
re.MULTILINE уже используется в
fail2ban. Т.е. знаки
^ и
$ матчат начало и конец строки.
Нюансы написания фильтров для
fail2ban:
www.fail2ban.org/wiki/index.php/MANUAL_0_8#Filters
Инструменты для проверки регулярный выражений:
https://regex101.com/#python
https://www.debuggex.com/
Рекомендую первую ссылку.
Принцип простой:
- Указали язык регулярок python
- Текст для примера (логи), который хотим разобрать регулярками
- В поле для регулярных выражений пишем регулярку и, по мере набора регулярки, смотрим, как матчится регулярка на наш текст.
Для примера(на первом ресурсе):
- в поле текста забейте свои логи
- в поле gmixsu напишите gm (это аналог служебных флагов для выражения, вроде re.MULTILINE в python'е)
- в поле регулярки забиваем [0-9] - выделит все цифры как отдельные элементы. Значения элементов выражения смотрим в подсказках.
- Добиваем регулярку до вида: [0-9]+ - имеем 4 цифры как отдельные элементы: т.е. ip 192.168.0.1 разбивается на элементы 192, 168, 0 и 1
- Точка в регулярках - спец. символ. Мапится в любой один знак. Экранируем его, ибо ищем точку, а не любой символ, иначе символ _ в строке 192_ так же попадёт под выражение.
- Итого, приведём выражение к виду [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+. Сразу понятно будет, что этим выражением выделим все ip адреса в логах.
Снимите флаг
g в примере(поле
gmixsu ;)) и напишите регулярное выражение заново. По мере набора, будет понятно, зачем конструкция
[0-9]+\. повторяется несколько раз в итоговой регулярке.
Данное выражение можно построить и более изящно, но на первом этапе важно понимание работы регулярок. Потом можно будет строить и более сложные выражения.