Um die Antwort gleich vorweg zu nehmen – es hängt stark vom Kenntnisstand des einzelnen ab und wie oft man sich damit beschäftigt. Für Anfänger ist es sicherlich mehr Fluch als Segen, für ausgebuffte Profis wahrscheinlich genau anders herum. Aber man sollte sich auf ein gewisses Maß an Kraftausdrücken gewöhnen, wenn man sich in die dunkle Materie der „regulären Ausdrücke“ einarbeitet. 😉
Ich bin das erste mal beim programmieren in ABAP (SAP) darauf gestoßen, vorher hatte ich mich immer erfolgreich davor drücken können. Die Erstellung des regex für die Überprüfung eines Traffic Codes war damals noch relativ harmlos. Allerdings kam ich bei der Installation von fail2ban wieder damit in Berührung und habe es doch tatsächlich geschafft, eigene Regeln zu erstellen, die mir beim vertreiben der alltäglichen Schmeißfliegen wertvolle Dienste leisten. Diese habe ich für postscreen erstellt, um die Voreiligen und die durch die DNSBL Dienste markierten per fail2ban auszusperren.
failregex = PREGREET [0-9]* after [0-9.]* from \[<HOST>\
DNSBL rank [3-9] for \[<HOST>\]
Für Apache2 habe ich mir noch folgende Regel einfallen lassen, da mir die regelmäßigen Abfragen nach phpmysql in meinem access.log auch so langsam auf den Wecker gehen.
failregex = ^<HOST> - - \[.*\] "GET|POST|HEAD).*http:.*/phpmyadmin(?i)/.*$
Es gibt jede Menge an Tutorials, die man zu dem Thema im Internet findet. Und auch Möglichkeiten, die Ausdrücke online testen zu lassen. Für fail2ban kann man den erstellen Filter vorher prüfen, was ich jedem ans Herz legen würde. Das Kommando dazu lautet:
fail2ban-regex <Name der Logdatei mit Verzeichnis> <Name des Filters mit Verzeichnis> --print-all-matched
Von mir am häufigsten verwendet ist der Ausdruck .* Damit lassen sich alle Passagen eine Textes ignorieren, bis man wieder explizit etwas zu überprüfen hat.