.png)
С помощью fail2ban я хочу забанить IP-адреса на основе содержимого файла apache_access.log.
Вот пример строки, которую я хочу сопоставить с правилами регулярного выражения:
197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
Итак, это мой файл пользовательского фильтра fail2ban:
[Definition]
failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =
Регулярное выражение отлично работает на таких сайтах, как «https://regex101.com/».
Но когда я использую инструменты fail2ban-regex следующим образом:
sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf
Я подбираю что угодно.
Я попробовал с этим простейшим правилом регулярного выражения: ^<ADDR> - - \[\S+ \S+
И это работает!
Results
=======
Failregex: 10 total
|- #) [# of hits] regular expression
| 1) [10] ^<ADDR> - - \[\S+ \S+
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [10] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.03 sec]
Но когда я пробую с регулярным выражением: ^<ADDR> - - \[\S+ \S+\]
(левый квадратный sracket]добавил справа)) команда 'fail2ban-regex'возвращает мне:
Lines: 10 lines, 0 ignored, 0 matched, 10 missed
[processed in 0.03 sec]
|- Missed line(s):
| 36.170.59.167 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 183.228.2.12 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 126.131.138.146 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 110.11.157.122 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 220.135.236.27 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 106.165.107.215 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
| 61.231.224.176 - - [13/Jun/2022:23:00:00 +0200] "GET / HTTP/1.0" 400 0 "-" "-"
`-
10 пропущено! Ни одна из моих строк-примеров не соответствует регулярному выражению, когда я добавляю левую квадратную скобку ( ] )
Я не понимаю, где моя ошибка... спасибо за любую помощь :)
решение1
Лучше всего уловить то, что вам нужно, классическим способом, например:
\[.*\]
Часть шаблона даты (которая создает проблему, которую вы заметили), по-видимому, обрабатывается fail2ban особым образом.
Если вы попробуете следующую схему:
\[\]
Вы увидите, что это также совпадает, по иронии судьбы, что означает, что шаблон даты внутри квадратных скобок удален. Так что не принимайте это во внимание.
Вы можете использовать что-то вроде этого:
^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$
P.S. Ваш failregex действительно закомментирован внутри файла фильтра, не забудьте раскомментировать его, когда будете вносить изменения.