fail2ban greift keinen SMTP-Passwort-Brute-Force-Angriff an

785
Shachar Shemesh

Spammer führen auf meinem Server Brute-Force-Password-Rate-Angriffe durch (Postfix unter Debian). Sie haben bereits die Passwörter zweier Benutzer erraten und mit dem Server begonnen, Spam zu senden. Passwörter geändert und Angriffe abgemildert (vorerst), aber ich möchte sie vollständig blockieren.

Ich habe fail2ban installiert, kann aber aus irgendeinem Grund die Angriffe nicht erkennen.

/etc/fail2ban/fail.conf enthält:

[sasl]  enabled = true port = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s filter = sasl # You might consider monitoring /var/log/mail.warn instead if you are # running postfix since it would provide the same log lines at the # "warn" level but overall at the smaller filesize. #logpath = /var/log/mail.log logpath = /var/log/mail.warn 

/etc/fail2ban/filter.d/sasl.conf enthält:

# Fail2Ban configuration file # # Author: Yaroslav Halchenko # # $Revision$ #  [Definition]  # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$  # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = 

Wenn ich den Filter aktiviere /var/log/mail.warn, werden folgende Ergebnisse erzielt:

# fail2ban-regex /var/log/mail.warn '(?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$'  Running tests =============  Use regex line : (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|P... Use log file : /var/log/mail.warn   Results =======  Failregex |- Regular expressions: | [1] (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: [ A-Za-z0-9+/]*=)?\s*$ | `- Number of matches: [1] 15293 match(es)  Ignoreregex |- Regular expressions: | `- Number of matches:  Summary =======  Addresses found: [1] 123.169.7.222 (Sun Feb 25 06:40:18 2018) 123.169.7.222 (Sun Feb 25 06:40:21 2018) ... 185.173.176.157 (Fri Mar 02 10:12:46 2018) 185.173.176.157 (Fri Mar 02 10:13:15 2018) 185.173.176.157 (Fri Mar 02 10:13:43 2018) 185.173.176.157 (Fri Mar 02 10:14:11 2018) 185.173.176.157 (Fri Mar 02 10:14:41 2018) 185.173.176.157 (Fri Mar 02 10:15:13 2018) 185.173.176.157 (Fri Mar 02 10:15:42 2018) 185.173.176.157 (Fri Mar 02 10:16:13 2018) 185.173.176.157 (Fri Mar 02 10:16:42 2018) 185.173.176.157 (Fri Mar 02 10:17:10 2018)  Date template hits: 34294 hit(s): MONTH Day Hour:Minute:Second 0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year 0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second 0 hit(s): Year/Month/Day Hour:Minute:Second 0 hit(s): Day/Month/Year Hour:Minute:Second 0 hit(s): Day/Month/Year Hour:Minute:Second 0 hit(s): Day/MONTH/Year:Hour:Minute:Second 0 hit(s): Month/Day/Year:Hour:Minute:Second 0 hit(s): Year-Month-Day Hour:Minute:Second 0 hit(s): Year.Month.Day Hour:Minute:Second 0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond] 0 hit(s): Day-Month-Year Hour:Minute:Second 0 hit(s): TAI64N 0 hit(s): Epoch 0 hit(s): ISO 8601 0 hit(s): Hour:Minute:Second 0 hit(s): <Month/Day/Year@Hour:Minute:Second>  Success, the total number of match is 15293  However, look at the above section 'Running tests' which could contain important information. 

Trotz alledem /var/log/fail2ban.logwird keine Sperrung der IP-Adresse angezeigt.

Aktualisieren

Den folgenden Vorschlägen folgend, habe ich den Log-Level erhöht. Das zeigt:

2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Processing line with time:1519986602.0 and ip:185.173.176.157 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Ignore line since time 1519986602.0 < 1519987675.92 - 600 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Processing line with time:1519986635.0 and ip:185.173.176.157 2018-03-02 12:47:55,920 fail2ban.filter : DEBUG Ignore line since time 1519986635.0 < 1519987675.92 - 600 

Die jail.conf hat:

bantime = 600 maxretry = 3 
2
Eine Einstellung im Dunkeln: Hast du die Schwelle richtig verstanden? Ich meine, f2b kann diese Angriffe richtig erkennen, aber die Logik besagt, dass die IP-Adresse nur dann gesperrt wird, wenn "X" erfolglose Versuche in der "Y" -Zeitspanne hatte, dh mit einer gewissen Rate "X / Y". Wenn dieser Schwellenwert in Ihrem Fall zu niedrig ist (dh der Angriff wird rechtzeitig verteilt), wird dies von fail2ban nicht als Angriff betrachtet. Wenn Fail2ban jede Übereinstimmung seiner Kriterien verbieten würde, würden die Benutzer, die ihr Passwort nicht richtig eingeben, sofort gesperrt. kostix vor 6 Jahren 0
Erwägen Sie, das Loglevel der f2b (zum Setzen von "Loglevel" auf "4") für das Debugging zu erhöhen. kostix vor 6 Jahren 0
@kostix habe ich gemacht, aber ich verstehe das Protokoll nicht. Shachar Shemesh vor 6 Jahren 0
Von `Linie seit der Zeit ignorieren 1519986602.0 <1519987675.92 - 600` und [die Dokumente] (https://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options), denke ich, dass '600' der Wert von ist `findtime`-Option. Das heißt, Crack-Versuche von einem bestimmten IP scheinen in Schritten größer als "findtime" zu sein und werden daher von "fail2ban" ignoriert. "1519987675.92-1519986602.0" ist "1073.92" oder ungefähr 18 Minuten. kostix vor 6 Jahren 0
@kostix Kannst du das als Antwort schreiben, damit ich das akzeptieren kann? Die (schlechten Wörter zensiert) passen ihre Scangeschwindigkeit an meine Einstellungen an. Gut, ich werde sie 24 Passwörter pro Tag scannen lassen und sehen, wie lange es dauert, bis sie ein Passwort knacken. Shachar Shemesh vor 6 Jahren 0
Kann ich Ihnen empfehlen, die TLS-Authentifizierung einzurichten? Ich meine, TLS von außen beauftragen und die Validierung der von den Kunden vorgelegten Zertifikate verlangen. Möglicherweise müssen Sie Ihre eigene Zertifizierungsstelle erstellen und unterstützen (das `easy-rsa`-Paket kann hilfreich sein), aber im Gegenzug ist diese Lösung ziemlich kugelsicher gegen das Erraten von Kennwörtern. kostix vor 6 Jahren 0
Ich finde das nicht passend für die Bereitstellung, die ich für meine Zielgruppe (insbesondere meine Eltern) durchführe. Das ist keine schlechte Idee, nur eine, die nicht praktikabel ist. Ein bisschen wie alle anderen TLS-Implementierungen. Ich glaube nicht, dass es sich bei letsencrypt um eine private CA handeln muss. Shachar Shemesh vor 6 Jahren 0
Ich kann jedoch einen SMTP-Authentifizierungsbenutzernamen verwenden, der sich von der E-Mail-Adresse unterscheidet, zu der er gehört. Selbst das könnte sich über die Fähigkeiten meiner Zielgruppe hinaus erweisen. Shachar Shemesh vor 6 Jahren 0

1 Antwort auf die Frage

3
kostix

Ich beschwöre aus dem Ignore line since time 1519986602.0 < 1519987675.92 - 600Protokollsatz und den Dokumenten, dass dies 600der Wert der findtimeOption ist. Das heißt, Crack-Versuche von einem bestimmten IP scheinen in Schritten größer zu sein findtimeund werden daher ignoriert fail2ban.

1519987675.92-1519986602.0ist 1073.92oder ca. 18 Minuten.


Eine kugelsichere Lösung würde die Verwendung von TLS auf der Schnittstelle zum Internet vorschreiben und die Verifizierung der von den Clients vorgelegten Zertifikate durch eine vertrauenswürdige Zertifizierungsstelle vorschreiben.