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

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

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

root@local:/var/log/apache2# tail -f error.log
[Fri Jun 18 10:13:37.657446 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:41.434454 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php
[Fri Jun 18 10:13:46.236750 2021] [php7:notice] [pid 2465] [client 192.168.1.11:44750] [error] failed login, referer: http://192.168.1.10/index.php

И Fail2Ban v0.10.2 настроен на его перехват. {{1} } /etc/fail2ban/jail.local:

[login-ban]
enabled   = true
port      = http,https
filter    = login-ban
logpath  = /var/log/apache2/error.log
maxretry = 3
findtime  = 180
bantime = 60

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

[Definition]
failregex =  ^\[.*\]\s\[.*]\s\[.*].*\[client.*<HOST>\].*\[error\].*
ignoreregex =

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

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

I get

|- Matched line(s):
|  [Fri Jun 18 10:36:07.312503 2021] [php7:notice] [pid 780] [client 192.168.1.11:44754] [error] failed login, referer: http://192.168.1.10/index.php
|  [Fri Jun 18 10:36:14.417955 2021] [php7:notice] [pid 784] [client 192.168.1.11:44756] [error] failed login, referer: http://192.168.1.10/index.php

Но fail2ban не запрещает IP, а журнал fail2ban.log выдает мне предупреждение DNS:

2021-06-18 10:50:22,083 fail2ban.ipdns          [2154]: WARNING Determined IP using DNS Lookup: 8 = {'0.0.0.8'}
2021-06-18 10:50:22,085 fail2ban.filter         [2154]: INFO    [login-ban] Found 0.0.0.8 - 2021-06-18 10:50:22

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

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

1
задан 18 June 2021 в 14:56
1 ответ

РЕШЕНИЕ

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

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

- ... \[client.*<HOST>\] ...
+ ... \[client <HOST>:\d+\] ...

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

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

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

^\[.*\[client <ADDR>:\d+\].*\[error\].*

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

2
ответ дан 28 July 2021 в 12:59

Теги

Похожие вопросы