Fail2ban: In Failregex verwendeter regulärer Ausdruck funktioniert nicht (Problem mit eckigen Klammern ]?!)

Fail2ban: In Failregex verwendeter regulärer Ausdruck funktioniert nicht (Problem mit eckigen Klammern ]?!)

Mit fail2ban möchte ich IPs basierend auf dem Inhalt der Datei apache_access.log sperren.

Dies ist ein Beispiel für eine Zeile, die ich mit Regex-Regeln abgleichen möchte:

197.221.254.56 - - [13/Jun/2022:22:59:59 +0200] "GET / HTTP/1.0" 400 0 "-" "-"

Dies ist also meine benutzerdefinierte Fail2ban-Filterdatei:

[Definition]

failregex = ^<ADDR> - - \[\S+ \S+\] "GET \/ HTTP\/1.0" 400 \S "-" "-"$
ignoreregex =

Der reguläre Ausdruck funktioniert perfekt auf Websites wie „https://regex101.com/“.

Aber wenn ich die fail2ban-regex-Tools wie folgt verwende:

sudo fail2ban-regex /var/log/site1_access.log /etc/fail2ban/filter.d/les400enhttp1-0.conf

Ich passe zu allem.

Ich habe es mit dieser einfachsten Regex-Regel versucht: ^<ADDR> - - \[\S+ \S+ Und es funktioniert!

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]

Aber wenn ich es mit dem regulären Ausdruck versuche: ^<ADDR> - - \[\S+ \S+\](linkes quadratisches Kreuz]rechts hinzugefügt)) der Befehl 'fail2ban-regex' gibt mir Folgendes zurück:

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 verpasst! Keine meiner Beispielzeilen stimmt mit dem regulären Ausdruck überein, wenn ich die linke eckige Klammer ( ] ) hinzufüge.

Ich verstehe nicht, wo mein Fehler liegt ... danke für jede Hilfe :)

Antwort1

Es wäre besser, das Gewünschte auf klassische Weise abzufangen, zB:

\[.*\]

Der Datumsmusterteil (der das von Ihnen bemerkte Problem verursacht) wird von fail2ban anscheinend auf besondere Weise behandelt.

Wenn Sie das folgende Muster versuchen:

\[\]

Sie werden sehen, dass es ironischerweise auch übereinstimmt, was bedeutet, dass das Datumsmuster innerhalb der eckigen Klammern entfernt wird. Berücksichtigen Sie dies also nicht.

Sie könnten so etwas verwenden:

^<ADDR> -.*\"(GET|POST|HEAD).*HTTP.*\"$

PS. Ihr Failregex ist in Ihrer Filterdatei tatsächlich auskommentiert. Achten Sie darauf, die Kommentierung aufzuheben, wenn Sie Ihre Änderungen vornehmen.

verwandte Informationen