Вопрос или проблема
В основном, у меня есть три разных записи в журналах, где (исходя из моей реализации) я точно знаю, что это рандомные боты, которые осматриваются и одновременно спамят мои журналы.
Я также знаю, что я ужасен в регулярных выражениях.
Если кто-то готов помочь мне с несколькими записями failregex для fail2ban по следующим трем записям журнала, я буду очень признателен:
- 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() неудача’. Нам не важна конкретная ошибка. Она может быть разной.
- 2024/11/09 15:00:14 [error] 1131#1131: *1406 доступ запрещён по правилу, клиент: 97.74.82.228, сервер: server.name.com, запрос: “POST / HTTP/1.1”, хост: “server.ip”
Для этого мне нужно сопоставление по ‘доступ запрещён’
- 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 может значительно повысить безопасность вашего сервера, блокируя нежелательные запросы на основе логов. Приведенные выше регулярные выражения позволят выявлять автоматические инструменты и боты, что предотвратит возможные атаки и злоупотребления.