![Fail2ban: In Failregex verwendeter regulärer Ausdruck funktioniert nicht (Problem mit eckigen Klammern ]?!)](https://rvso.com/image/777952/Fail2ban%3A%20In%20Failregex%20verwendeter%20regul%C3%A4rer%20Ausdruck%20funktioniert%20nicht%20(Problem%20mit%20eckigen%20Klammern%20%5D%3F!).png)
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.