Рейтинг:1

Регулярное выражение Fail2ban работает, но не банит. Вместо этого предупреждение DNS

флаг in

У меня была следующая проблема (уже решенная) с fail2ban, и я потерял ее из-за переполнения стека, поэтому я помещаю ее здесь сейчас.

Итак, я читаю вопросы в течение нескольких дней и, похоже, нигде не нахожу решения. Я делаю несколько тестов в лаборатории веб-сервера, я настроил две виртуальные машины (Ubuntu 20.04) сервер и клиент. На сервере у меня есть приложение входа в систему PHP, настроенное для предоставления мне этого журнала всякий раз, когда кто-то не может войти в систему.

root@local:/var/log/apache2# tail -f error.log
[Пт, 18 июня, 10:13:37.657446 2021] [php7:notice] [pid 2465] [клиент 192.168.1.11:44750] [ошибка] не удалось войти в систему, реферер: http://192.168.1.10/index.php
[Пт, 18 июня, 10:13:41.434454 2021] [php7:notice] [pid 2465] [клиент 192.168.1.11:44750] [ошибка] не удалось войти в систему, реферер: http://192.168.1.10/index.php
[Пт, 18 июня, 10:13:46.236750 2021] [php7:notice] [pid 2465] [клиент 192.168.1.11:44750] [ошибка] не удалось войти в систему, реферер: http://192.168.1.10/index.php

И Fail2Ban v0.10.2 настроен на его отлов. /etc/fail2ban/jail.local:

[логин-бан]
включено = верно
порт = http,https
фильтр = логин-бан
logpath = /var/log/apache2/error.log
максимальная попытка = 3
найти время = 180
бантайм = 60

/etc/fail2ban/filter.d/login-ban.conf:

[Определение]
failregex = ^\[.*\]\s\[.*]\s\[.*].*\[client.*<HOST>\].*\[ошибка\].*
игнорироватьregex =

Теперь регулярное выражение работает отлично, если я проверю с помощью fail2ban-regex:

fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/login-ban.conf --print-all-matched

я получил

|- Совпадающие строки:
| [Пт, 18 июня, 10:36:07.312503 2021] [php7:notice] [pid 780] [клиент 192.168.1.11:44754] [ошибка] не удалось войти в систему, реферер: http://192.168.1.10/index.php
| [Пт, 18 июня, 10:36:14.417955 2021] [php7:notice] [pid 784] [клиент 192.168.1.11:44756] [ошибка] не удалось войти в систему, реферер: http://192.168.1.10/index.php

Но fail2ban не блокирует IP-адрес, и fail2ban.log выдает мне предупреждение DNS:

2021-06-18 10:50:22,083 fail2ban.ipdns [2154]: ПРЕДУПРЕЖДЕНИЕ IP-адрес определен с помощью поиска DNS: 8 = {'0.0.0.8'}
2021-06-18 10:50:22,085 fail2ban.filter [2154]: INFO [логин-бан] Найдено 0.0.0.8 - 2021-06-18 10:50:22

Я попытался установить для параметра usedns значение «нет» и «сырой», единственное, что удалось сделать, это избавиться от журнала предупреждений DNS, по-прежнему не запрещая и не записывая хост, который пытался войти в систему.

Я надеюсь, что этой информации достаточно, и что это поможет кому-то так же, как и мне.

Рейтинг:2
флаг in

РЕШЕНИЕ

Пользователь @sebres ответил мне:

просто перестаньте использовать универсальные выражения (.* и т. д.), e. г. одно исправление, чтобы заставить его работать, может быть

- ... \[клиент.*<HOST>\] ...
+ ... \[клиент <HOST>:\d+\] ...

RE .* является жадным, поэтому он соответствует как можно большему количеству символов, а <HOST> может соответствовать чему угодно (имя хоста), а не только адресу, и вместо этого лучше использовать <ADDR>, если ваша версия fail2ban >= 0.10.

И все ваше выражение "уязвимо" из-за нескольких ловушек (поэтому якорь действительно не взят).

*** Так что я сделал изменение, которое он предложил, в итоге получилось так:

^\[.*\[клиент <АДРЕС>:\d+\].*\[ошибка\].*

теперь все работает как надо. Надеюсь, это поможет!

djdomi avatar
флаг za
пожалуйста, напомните принять ваш ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.