
Ich openSMPTD
betreibe einen Mailserver. Es sieht so aus, als ob ich derzeit Opfer von Brute-Force-Angriffen werde, obwohl ich bezweifle, dass sie überhaupt reinkommen. Trotzdem würde ich meinen Server gerne durch die ständigen Anmeldeversuche entlasten. Ich konfiguriere gerade, fail2ban
um die Angreifer zu sperren. Allerdings bekomme ich den richtigen regulären Ausdruck nicht hin und das macht mich wahnsinnig! Ich habe gesehendieser Link im freeBSD-Forumüber den fail2ban
regulären Ausdruck, um ihn abzufangen. Aber selbst dieser reguläre Ausdruck schien den von ihnen bereitgestellten Beispieltext nicht zu erfassen. Ich habe ihren regulären Ausdruck ohne Erfolg bearbeitet. Ich hoffe, dass mir jemand ein paar Tipps geben kann, da ich bei regulären Ausdrücken sehr schwach bin.
Meine Protokolldateien sehen folgendermaßen aus:
Dec 25 20:03:29 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp tls ciphers=TLSv1.2:ECDHE-RSA-AES128-SHA256:128
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp authentication user=info result=permfail
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Dec 25 20:03:30 frick mail.info smtpd[16849]: f7fa148a43b34578 smtp disconnected reason=quit
"
Lassen Sie uns das also aufschlüsseln: Die Zeile, die zeigt, dass sie rohe Gewalt anwenden, lautet:
f7fa148a43b34578 smtp failed-command command="AUTH LOGIN (password)" result="535 Authentication failed"
Hier sehen wir, dass die Authentifizierung fehlgeschlagen ist. Seltsamerweise gibt openSMTPD in dieser Zeile jedoch nicht die zu sperrende IP-Adresse an: Wir müssen eine variable Zahl darüber suchen, um:
f7fa148a43b34578 smtp connected address=193.169.254.42 host=<unknown>
Hier können wir die IP-Adresse des Täters sehen. Okay, das ist in Ordnung. Der aktuelle reguläre Ausdruck, der den gesamten Text auswählt, lautet:
^.*smtp connected address=\w[1-9.]* host=[a-z<>]*\n*[a-zA-Z0-9_.-\s\]\[:=<>"()]*
obwohl fail2ban
ich eine feinere Lösung möchte. Ich bin mir nicht sicher, ob ich eine saubere Methode habe, um die entsprechende IP-Adresse zum Sperren zu erhalten, da es möglich ist, dass sich zwei Personen gleichzeitig verbinden und dann die falsche Leitung zum Sperren ausgewählt wird.
Irgendwelche Vorschläge?
Antwort1
Die neuere und sauberere Möglichkeit, einen mehrzeiligen regulären Ausdruck zu verwenden, wäre die Verwendung der <F-...>
Tags, die in dieser Version eingeführt wurden 0.10.0
und leider noch immer nicht gut dokumentiert sind.
[Definition]
prefregex = <F-MLFID>: \w{16} </F-MLFID><F-CONTENT>.+</F-CONTENT>$
failregex = <F-NOFAIL>smtp connected address=(?:<IP6>|<IP4>)</F-NOFAIL>
smtp failed-command command="AUTH LOGIN \(password\)" result="535 Authentication failed"
<F-NOFAIL><F-MLFFORGET>smtp disconnected</F-MLFFORGET></F-NOFAIL>
Erläuterung
Der Vorfilter-Regex wird verwendet, um jede Zeile vorzuverarbeiten und die Sitzungs-ID zu erfassen, die meiner Meinung nach der f7fa148a43b34578
Teil ist, und um dieselbe Sitzung zu identifizieren, die sich über mehrere Zeilen erstreckt. Der darin enthaltene Text <F-CONTENT>
ist der Teil, der uns interessiert und der vom Failregex verarbeitet wird.
Im Failregex wird derErsteMan gleicht die Zeile mit der IP-Adresse ab, die benötigt wird, wenn ein Verbot ausgesprochen werden soll, und wird in die <F-NOFAIL>
Tags eingeschlossen, um anzuzeigen, dass die Zeile nicht als Fehler betrachtet wird. Diezweiteregex ist der eigentliche Authentifizierungsfehler. Wenn dieser übereinstimmt, blockiert fail2ban die zuvor erfasste IP-Adresse. DerzuletztEine ist von der <F-MLFFORGET>
Anweisung umgeben, um zu signalisieren, dass es Zeit ist, die erfasste Verbindungs-ID zu löschen (da der Benutzer die Verbindung getrennt hat), und sie ist außerdem zwischen <F-NOFAIL>
Tags eingeschlossen, da diese Zeile allein auch keinen Fehler darstellt.
Mit dem Tool können Sie fail2ban-regex
dies testen.
Ich kann verstehen, warum der reguläre Ausdruck aus dem verlinkten Forumsbeitrag bei Ihnen nicht funktioniert hat; die Zeichenfolge ist in mehreren Teilen unterschiedlich. Sie müssen also offensichtlich den zweiten Failregex von oben ändern, wenn Sie allgemeinere Fälle abgleichen möchten (ich verwende kein OpenSMTPD, daher kann ich Ihnen dabei nicht helfen).