Задать вопрос
Ответы пользователя по тегу Fail2ban
  • Как создать fail2ban regex выражение?

    @Fess
    Моя версия 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]+\. повторяется несколько раз в итоговой регулярке.

    Данное выражение можно построить и более изящно, но на первом этапе важно понимание работы регулярок. Потом можно будет строить и более сложные выражения.
    Ответ написан
    7 комментариев