[solved] fail2ban regex gesucht

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
sunghost
Beiträge: 794
Registriert: 27.10.2004 18:55:14

[solved] fail2ban regex gesucht

Beitrag von sunghost » 24.10.2022 16:11:44

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
Zuletzt geändert von sunghost am 25.10.2022 08:53:57, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 3526
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: fail2ban regex gesucht

Beitrag von heisenberg » 24.10.2022 16:31:34

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.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: fail2ban regex gesucht

Beitrag von hikaru » 24.10.2022 17:00:07

Vorweg:
Ich habe keine Ahnung von fail2ban und davon, ob dessen Regex-Parser irgendwelche Besonderheiten hat, aber:
heisenberg hat geschrieben: ↑ zum Beitrag ↑
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: ↑ zum Beitrag ↑
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.

Benutzeravatar
heisenberg
Beiträge: 3526
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: fail2ban regex gesucht

Beitrag von heisenberg » 24.10.2022 17:08:41

hikaru hat geschrieben: ↑ zum Beitrag ↑
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.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

sunghost
Beiträge: 794
Registriert: 27.10.2004 18:55:14

Re: fail2ban regex gesucht

Beitrag von sunghost » 24.10.2022 21:32:37

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

Benutzeravatar
heisenberg
Beiträge: 3526
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: fail2ban regex gesucht

Beitrag von heisenberg » 24.10.2022 21:39:24

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.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

sunghost
Beiträge: 794
Registriert: 27.10.2004 18:55:14

Re: fail2ban regex gesucht

Beitrag von sunghost » 25.10.2022 08:53:32

Hi,
ok super. Habe es nun seit gestern laufen und es funktioniert.

Euch nochmal vielen Dank.

Antworten