Greylisting – eine Methode zur absichtlichen E Mail-Empfangsverzögerung zur Spambekämpfung funktioniert so: Auf dem Mailserver, genauer dem SMTP-Server läuft ein Prozess der den ersten Versuch eines anderen Mailservers oder Spammers eine Nachricht zuzustellen mit einem temporären Fehler abweist. In der Fehlermeldung steht dann meistens “Message Rejected – Greylisting for xx Minutes”. Die meisten modernen Mailserver sind so konfiguriert, dass beim auftreten einer 4xx Meldung nach X Minuten die Nachricht erneut gesendet wird. Je nach Konfiguration des Mailservers kann dies aber auch mal mehrere Stunden dauern.
Die meisten Greylisting-Dienste warten allerdings nicht ewig auf die erneute Zustellung einer Nachricht. Verwirft der Greylisting-Dienst nun die Nachricht aus der Datenbank bevor der Mailserver des Absenders einen erneuten Versuch startet, wird die Nachricht niemals ankommen. Das kann relativ schnell passieren, wenn es beim Absender tatsächlich Probleme gab die Nachricht zuzustellen. Dann verdoppelt sich nämlich das resend Intervall nach jedem Fehlversuch.
Nimmt man nun als Beispiel Postfix, versucht der Mailserver des Absenders nach einem Fehlversuch nach 5 Minuten die Nachricht erneut zu zusenden. Scheitert das erneut, verdoppelt sich die Wartezeit bis zum nächstem Versuch. Nehmen wir an, der Server des Empfängers hat eine Greylist-Time von 5 Minuten. Der Server des Absenders addiert zum Nachrichtenzeitstempel bei ersten Versuch die konfigurierte minimal_backoff_time. Sind das ebenfalls 5 Minuten, versucht es das System nach Eingangszeit+5Minuten erneut. Das sind allerdings niemals 5 Minuten ab Greylist-Startzeit, da die Nachricht je nach Last einige Sekunden auf dem Mailserver des Absenders verbleibt. Also scheitert auch der zweite Versuch in 50% der Fälle, da sich die Zähler um einige Sekunden unterscheiden.
Für einen dritten Versuch wartet der Mailserver des Absenders nun die doppelte Zeit, also 10 Minuten. Die minimale Verzögerung neuer Nachrichten sind bei Postgrey in der Standardkonfiguration also 15 Minuten. Einige ganz schlaue Admins setzen allerdings ihre Greylist-Time auf 30 Minuten. Der Server des Absenders wartet für den 3. Versuch 20 Minuten. 5 + 10 + 20 = 35Minuten. Wenn es ungünstig läuft und die Nachricht vorher mehr als 5 Minuten in der Warteschlange lag, braucht der Server einen weiteren Versuch. 5 + 10 + 20 + 30 = 1h. Nun habe ich es erlebt, dass einige Server die Nachricht maximal 1 Stunde in der Greylist-Datenbank halten. Wie soll hier im ungünstigstem Fall jemals eine Nachricht ankommen?
Dazu kommt, die Spammer haben inzwischen dazu gelernt. Da in der Fehlermeldung meistens “Greylisted for xx Minutes” erscheint, werten die Spam-Scripte einfach diese Zeit aus und versuchen es anschließend erneut.
Die oben beschriebenen Szenarios sind real und kommen in der Praxis tatsächlich so vor. Selten, aber es passiert. Dazu kommt auch noch, einige Admins die scheinbar die RFC nicht gelesen haben, verwerfen alle Mails die vom Zielserver mit einer temporären Fehlermeldung abgewiesen werden. Manchmal liegt das auch an schlecht umgesetzten SMTP-Diensten die alle nicht zustellbaren Nachrichten gleich behandeln. Solche Systeme werden nicht in der Lage sein, an Server mit Greylist-Daemon Nachrichten zu senden. Ein Beispiel ist mail.ru.
Auch ist die absichtliche Verzögerung nicht in der RFC vorgesehen. Es gibt bessere und Sinnvollere Möglichkeiten Mailserver zu schützen. Greylisting war eine Zeit lang als Notlösung gut, inzwischen aber unbrauchbar und sollte abgeschaltet werden.
