Помощь с форматированием regex для использования в fail2ban

Вопрос или проблема

В основном, у меня есть три разных записи в журналах, где (исходя из моей реализации) я точно знаю, что это рандомные боты, которые осматриваются и одновременно спамят мои журналы.

Я также знаю, что я ужасен в регулярных выражениях.

Если кто-то готов помочь мне с несколькими записями failregex для fail2ban по следующим трем записям журнала, я буду очень признателен:

  1. 2024/11/09 13:35:49 [crit] 1132#1132: *1300 SSL_do_handshake() неудача (SSL: ошибка:0A00006C:SSL routines::плохая передача ключа) во время SSL рукопожатия, клиент: 165.154.206.35, сервер: 0.0.0.0:443

Для этого мне нужно сопоставление по ‘SSL_do_handshake() неудача’. Нам не важна конкретная ошибка. Она может быть разной.

  1. 2024/11/09 15:00:14 [error] 1131#1131: *1406 доступ запрещён по правилу, клиент: 97.74.82.228, сервер: server.name.com, запрос: “POST / HTTP/1.1”, хост: “server.ip”

Для этого мне нужно сопоставление по ‘доступ запрещён’

  1. 2024/11/09 15:39:29 [error] 1134#1134: *1456 open() “/var/www/html/test.tst” не удалось (2: Нет такого файла или каталога), клиент: 165.154.206.35, сервер: server.name.com, запрос: “GET /test.tst HTTP/2.0”, хост: “server.name.com”

Для последнего мне нужно сопоставить ‘open()’ и ‘не удалось’, игнорируя любые попытки открыть, которые находятся между ними.

Ответ или решение

Для настройки фильтров Fail2ban с использованием регулярных выражений (regex) вам потребуется создать правила, которые точно будут соответствовать указанным логам. Рассмотрим каждый из ваших примеров и предложим соответствующие настройки failregex.

1. Лог-сообщение с ошибкой SSL

Лог:

2024/11/09 13:35:49 [crit] 1132#1132: *1300 SSL_do_handshake() failed (SSL: error:0A00006C:SSL routines::bad key share) while SSL handshaking, client: 165.154.206.35, server: 0.0.0.0:443

Регулярное выражение:

^.*\[crit\].*SSL_do_handshake\(\) failed.*client:\s*(?P<client>[0-9\.]+).*

Объяснение:

  • ^.* – совпадает с любой строкой в начале.
  • \[crit\] – ищет текст "[crit]".
  • .*SSL_do_handshake\(\) failed – ищет фразу "SSL_do_handshake() failed".
  • .*client:\s*(?P<client>[0-9\.]+).* – извлекает IP адрес клиента, используя именованный захват client.

2. Лог-сообщение с запрещенным доступом

Лог:

2024/11/09 15:00:14 [error] 1131#1131: *1406 access forbidden by rule, client: 97.74.82.228, server: server.name.com, request: "POST / HTTP/1.1", host: "server.ip"

Регулярное выражение:

^.*\[error\].*access forbidden by rule.*client:\s*(?P<client>[0-9\.]+).*

Объяснение:

  • ^.* – совпадает с любой строкой в начале.
  • \[error\] – ищет текст "[error]".
  • .*access forbidden by rule – ищет фразу "access forbidden by rule".
  • .*client:\s*(?P<client>[0-9\.]+).* – извлекает IP адрес клиента, используя именованный захват client.

3. Лог-сообщение об ошибке открытия файла

Лог:

2024/11/09 15:39:29 [error] 1134#1134: *1456 open() "/var/www/html/test.tst" failed (2: No such file or directory), client: 165.154.206.35, server: server.name.com, request: "GET /test.tst HTTP/2.0", host: "server.name.com"

Регулярное выражение:

^.*\[error\].*open\(\).*\sfailed.*client:\s*(?P<client>[0-9\.]+).*

Объяснение:

  • ^.* – совпадает с любой строкой в начале.
  • \[error\] – ищет текст "[error]".
  • .*open\(\).* – ищет вызов функции "open()", игнорируя любые символы между "open()" и "failed".
  • \sfailed – после этого должно следовать слово "failed".
  • .*client:\s*(?P<client>[0-9\.]+).* – извлекает IP адрес клиента, используя именованный захват client.

Подключение в Fail2ban

Для добавления этих регулярных выражений в файл конфигурации Fail2ban вам нужно создать собственный фильтр. Например, создайте файл myfilter.conf в директории /etc/fail2ban/filter.d/ и добавьте в него следующее содержимое:

[Definition]
failregex = ^.*\[crit\].*SSL_do_handshake\(\) failed.*client:\s*(?P<client>[0-9\.]+).*
             ^.*\[error\].*access forbidden by rule.*client:\s*(?P<client>[0-9\.]+).*
             ^.*\[error\].*open\(\).*\sfailed.*client:\s*(?P<client>[0-9\.]+).*

Затем в конфигурации jail (например, в jail.local) добавьте правила на основе созданного фильтра, чтобы блокировать IP-адреса, которые попадают под описанные условия.

Заключение

Использование регулярных выражений для фильтрации логов в Fail2ban может значительно повысить безопасность вашего сервера, блокируя нежелательные запросы на основе логов. Приведенные выше регулярные выражения позволят выявлять автоматические инструменты и боты, что предотвратит возможные атаки и злоупотребления.

Оцените материал
Добавить комментарий

Капча загружается...