2017-08-17 2 views
0

Ich optimiere gerade meinen fail2ban-Filter.Fail2ban konnte nicht mit dem Datumsformat übereinstimmen

Vor meiner regex war:

<HOST> \- \- \[.*\] \"(GET|POST) .+ HTTP\/\d\.\d\" 40\d \d{2,5} \"(.*)\" \"(.*)\"$ 

und es funktionierte für jede Zeile, die einen 404-Fehler wie folgt enthält:

<HOST> - - [16/Aug/2017:14:02:33 +0200] "GET /favicon.ico HTTP/1.1" 404 6494 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko" 

Danach habe ich geändert, um die:

\[.*\] 

Von

\[[0-9]{2}\/.{3}\/[0-9]{4}\:([0-9]{2}\:){2}[0-9]{2} \+[0-9]{4}\] 

Aber jetzt passt es nicht mehr mit fail2ban, während Website wie regex101 immer noch das richtige patern erkennen! (Passen Sie nicht auf das \ HOST auf, wenn ich das Wort nicht eingefügt habe).

Ich versuchte \ d von [0-9]/ von \/zu ändern: von \: Fail2ban immer vermisst die Linien und ich weiß nicht, warum.

Hat jemand das gleiche Problem? Vielen Dank ! :)

+0

Sind Sie bewusst die beiden '*' am Ende des ersten regulären Ausdruck zu entkommen? Denn das scheint zu verhindern, dass es funktioniert. Ich war in der Lage, es mit Ihrer Änderung durch Unescaping laufen zu lassen: http://regexr.com/3giqc – Bananaapple

+0

@ Bananaapple Nein, das war vor der Codeblock-Syntax Ich habe vergessen, es zu löschen. Mein zweiter Regex funktioniert mit einem Online-Tool wie deins, aber nicht mit fail2ban:/ – Levrifon

+0

Hm, nach http://fail2ban.readthedocs.io/en/latest/filters.html # reguläre Ausdrücke fail2ban verwendet Pythons Regex-Geschmack, und Ihre Regex funktioniert auch dann gut, wenn ich sie mit diesem speziellen Geschmack teste: https://www.debuggex.com/r/xC-YEMB4P-DM-Td2 - das lässt zwei Optionen übrig dann. 1 - Fehler in fail2ban, 2 - Tippfehler oder andere Versehen an Ihrem Ende. Haben Sie die Regex mit ihrem Befehlszeilenprogramm getestet? ./fail2ban-regex --help – Bananaapple

Antwort

0

Sie müssen die letzten + und die Hinter ]

\[[0-9]{2}/.{3}/[0-9]{4}:([0-9]{2}:){2}[0-9]{2} \+[0-9]{4}\]

Auch möglicherweise entkommen, schlitzt die Vorwärts / - abhängig von diesen bestimmten Regex-Interpreter.

+0

Vielen Dank für Ihre Antwort, diese Symbole sind bereits maskiert aber Stackoverflow entfernt sie Ich korrigiere meine Frage Danke;) – Levrifon

+0

@Levrifon Sie sollten Code-Formatierung anstelle von Blockquotes verwenden. –

+0

@SebastianProske danke :) Ich habe es leider geändert – Levrifon

0

Wahrscheinlich das einzige erforderliche Muster ist: <HOST> .* 404 Dies sollte gegen tatsächliche Protokolle getestet werden. Das Befehlszeilen-Dienstprogramm fail2ban-regex ist sehr nützlich zum Testen.

Beachten Sie, dass es möglicherweise falsche Positive geben würde, so dass es einfacher wäre, den Antwortcode nach dem Host zu verschieben und dann das Datum/die Uhrzeit danach zu haben. In diesem Fall wäre ^<HOST> 404 genauer.

In Bezug auf die Leistung scheint dies weniger fehleranfällig und so schnell, wenn nicht schneller als die viel länger. Siehe den zweiten Link unten bezüglich der Filterleistungstipps.

+0

Danke für Ihre Antwort, das funktioniert ja, aber ist es die optimale Ausführungszeit? – Levrifon

+0

Ich habe auf die Frage der optimalen Ausführungszeit geantwortet. – jeffmcneill

Verwandte Themen