Seite 1 von 1
[solved] fail2ban regex gesucht
Verfasst: 24.10.2022 16:11:44
von sunghost
Hi,
ich habe diverse Einträge in einem error.log und da ich bereits fail2ban nutze, müchte ich dieses prüfen.
Log Beispiel:
[Mon Oct 24 16:09:01.550739 2022] [proxy_fcgi:error] [pid 873152:tid 140177775216384] [client xxx.xxx.xxx.xxx.:43282] AH01071: Got error 'PHP message: Datenbank-Fehler UPDATE command denied to user ' ....
Seit mehreren Stunde probiere und lese ich, aber es klappt nicht. Bisher habe ich:
client <HOST> .*(Datenbank-Fehler UPDATE command denied to user)
Ich erhalte 2 Treffer aber es sind deutlich mehrere hundert. Bei der Variable <HOST> bin ich mir auch unsicher. Letztendlich sollte fail2ban den Host per route blocken.
Könnt ihr helfen?
thx
Re: fail2ban regex gesucht
Verfasst: 24.10.2022 16:31:34
von heisenberg
Grundsätzlich kannst Du mit
fail2ban-regex Dein Muster testen.
Zeig mal Dein Muster, dass aktuell noch nicht funktioniert. Das steht da ja schon...
Dein Muster ist...
Code: Alles auswählen
client <HOST> .*(Datenbank-Fehler UPDATE command denied to user)
Dein Log-Auszug ist...
Code: Alles auswählen
[Mon Oct 24 16:09:01.550739 2022] [proxy_fcgi:error] [pid 873152:tid 140177775216384]
[client xxx.xxx.xxx.xxx.:43282] AH01071: Got error 'PHP message: Datenbank-Fehler UPDATE command denied to user ' ....
Dein Muster gibt an, dass da ein Leerzeichen nach dem Host sein soll. Dein Logauszug gibt aber an, dass da ein Punkt nach der IP-Adresse ist - was vermutlich ein Tippfehler des Forenbetrages ist. Wenn es kein Punkt ist, dann ist es ein Doppelpunkt.
Runde Klammern sind auch keine drin. Das könnte aber als neutrale Metazeichen durchgehen.
Richtiges Muster, wenn meine Annahme korrekt ist, ist also:
Code: Alles auswählen
client <HOST>:[0-9].*PHP message: Datenbank-Fehler UPDATE command denied to user
Ansonsten ist Dein Regex recht grob. D. h. du könntest da evtl. leicht false-positives generieren. Ein mehr spezifischerer Regex würde das vermeiden.
Re: fail2ban regex gesucht
Verfasst: 24.10.2022 17:00:07
von hikaru
Vorweg:
Ich habe keine Ahnung von fail2ban und davon, ob dessen Regex-Parser irgendwelche Besonderheiten hat, aber:
heisenberg hat geschrieben: 24.10.2022 16:31:34
Code: Alles auswählen
client <HOST>:[0-9].*PHP message: Datenbank-Fehler UPDATE command denied to user
"<HOST>" ist hier offensichtlich eine Variable, dann kommt der Doppelpunkt um den Port abzutrennen und dann versuchst du den Port mit "[0-9]" zu matchen. Das wird in der Praxis funktionieren, weil du danach auf beliebig viele beliebige Zeichen matchst (".*"), aber explizit matchst du nur die erste Stelle der Portnummer, denn deine Zeichenklasse hat keinen Quantifier.
Daher als Vorschlag ("[0-9]
+"):
Code: Alles auswählen
client <HOST>:[0-9]+.*PHP message: Datenbank-Fehler UPDATE command denied to user
heisenberg hat geschrieben: 24.10.2022 16:31:34
Ansonsten ist Dein Regex recht grob. D. h. du könntest da evtl. leicht false-positives generieren. Ein mehr spezifischerer Regex würde das vermeiden.
Zustimmung! Regex sollten meiner Erfahrung nach immer so scharf wie möglich sein.
Re: fail2ban regex gesucht
Verfasst: 24.10.2022 17:08:41
von heisenberg
hikaru hat geschrieben: 24.10.2022 17:00:07
Daher als Vorschlag ("[0-9]
+"):
Das hatte ich mal lieber weggelassen, weil ich nicht weiss, ob ich
+ da escapen muss oder nicht. Bin in Python-RE da jetzt nicht so sicher.
Re: fail2ban regex gesucht
Verfasst: 24.10.2022 21:32:37
von sunghost
Hi,
und erst mal danke an euch für die schnelle Unterstützung.
Mit fail2ban-regex habe ich es auch getestet. Bei mir klappte es halt nicht, aber das sieht sehr gut aus:
# fail2ban-regex error.log 'client <HOST>:.*PHP message: Datenbank-Fehler UPDATE command denied to user'
Soweit scheint es zu laufen. Ich abe mir nun das fail2ban Log angesehen und erhalte:
fail2ban.filter [1695437]: INFO [my-filter Found 2003:d1:670e:b500:e825:de5f:fa79:2bfb - 2022-10-24 21:26:09
2022-10-24 21:26:10,266 fail2ban.filter [1695437]: INFO [my-filter] Found 2003:d1:670e:b500:e825:de5f:fa79:2bfb - 2022-10-24 21:26:10
2022-10-24 21:26:10,613 fail2ban.actions [1695437]: NOTICE [my-filter] Ban 2003:d1:670e:b500:e825:de5f:fa79:2bfb
Sehe ich es richtig und er erkennt oben die IPv6 inkl. Datetime-Angabe,, dann die selbe Info nochmal und als Notice erhalte ich die eigentliche IPv6 die dann gebannt wird. Korrekt?
Als Status erhalte ich aktuell:
Status for the jail: my-filter
|- Filter
| |- Currently failed: 616
| |- Total failed: 1887
Passt das ?
thx
Re: fail2ban regex gesucht
Verfasst: 24.10.2022 21:39:24
von heisenberg
Found heisst, dass der Filter einen Treffer erzielt hat.
Ban heisst, dass die Anzahl der konfigurierten Treffer für einen Ban - in der gesetzten Zeit - erreicht ist und deswegen der Ban ausgeführt wird.
Re: fail2ban regex gesucht
Verfasst: 25.10.2022 08:53:32
von sunghost
Hi,
ok super. Habe es nun seit gestern laufen und es funktioniert.
Euch nochmal vielen Dank.