Schöne Stunden bei Kaffee & Kuchen

Kampf gegen e-Mail-Adressverifizierungsdienste

Mit Angeboten wie any?mail_finder[.]com kann jedermann beliebige Mailadressen verifizieren.

Unter anderem wird per SMTP Dialog versucht, die Mailadresse einer Domain zu verifizieren. Dabei wird eine Standardfunktion des MTA ausgenutzt, welcher auf eine nicht vorhandene Mailadresse mit folgenden Fehler reagiert.

Beispiel

Aug 4 22:01:54 blubb postfix/smtpd[7368]: NOQUEUE: reject: RCPT from ec2-54-204-189-252.compute-1.amazonaws.com[54.204.189.252]: 550 5.1.1 <foo.bar@kaffeekrone.de>: Recipient address rejected: User unknown in virtual mailbox table; from=<probe@any?mail_finder[.]com> to=<foo.bar@kaffeekrone.de> proto=SMTP helo=<ip-172-31-29-82.ec2.internal>

Es werden dabei von diesem Dienst mehrere Versuche gestartet die Adresse zu erraten. Als erstes wird probiert eine beliebige Adresse zu kontaktieren, es wird also versucht herauszufinden, ob es eine Catch-All Adresse gibt.

Ich habe hier Zufallsadressen der Form drzerz@ in den Logs gesehen.

Anschließend wird versucht eine der möglichen Standardkombinationen für die Mailadresse aus Vorname und Nachname des Gesuchten zu finden.

Name: Foo Bar
Domain: kaffeekrone.de

Mit dieser Eingabe auf o.g. Seite werden dann u.a. folgende Adresse ausprobiert.

f.bar@kaffeekrone.de
bar.foo@kaffeekrone.de

Dabei enstehen dann innerhalb kürzester Zeit mehrere 550 Fehler in den MTA-Logs.

Gegenmaßnahmen

Da solche Dienste eher nicht (warum eigentlich?) auf den einschlägigen Spam-Block-Listen gelistet sind, muss man auf der Ebene darunter tätig werden.

Fail2Ban

Fail2Ban bietet bereits eine Filterkonfiguration für Postfix an, diese muss aber für unseren Fall angepasst werden.

/etc/fail2ban/jail.conf

...

[postfix] enabled = true
bantime = 3600
maxretry = 5
port = smtp
filter = postfix
logpath = /var/log/mail.log
...

Dies setzt die Bantime auf 1 Stunde nach 5 erfolglosen Versuchen sich mit Postfix per SMTP zu verbinden. Die Bedingungen dafür werden in der Filterkonfiguration gesetzt.

/etc/fail2ban/filter.d/postfix

...
failregex = ^%(_prefixline)sNOQUEUE: reject: RCPT from \S+[]: 5\d{2} .*$
...

Dieser reguläre Ausdruck passt dann auf alle 500er Fehler. Siehe RFC-3463.

Bemerkungen

Mit dieser rigorosen Konfiguration wird allen ma­li­zi­ösen Diensten, die sich einen SMTP-Dialog mit 500er Fehlern quitieren lassen, das Leben schwer gemacht.

Leider ist fail2ban aktuell noch nicht in der Lage auch IPv6 Adressen zu sperren, aber Besserung ist in Sicht

Viele Grüße,
Die Auslese.