Greylisting mit Postfix

Greylisting ist ein sehr einfacher und ebenso wirkungsvoller Kniff um sich gegen Spam und Viren zu schützen. 80 bis 90 Prozent der Spammails und fast schon alle Viren werden inzwischen von großen Botnetzen verschickt. Vor allem Betreiber größerer Mailserver bekommen schnell Probleme durch solche Botnetze. Die von großen Botnetzten ausgelösten Spam- und Virenfluten, verstopfen die Mailserver. Dadurch verzögern sich die Zustellungen einzelner E-Mails auf fast schon unbestimmte Zeit. Der bearbeitende Mailserver ist oft damit ausgelastet sich um Spam- und Virenmails zu kümmern.

Wie kann Greylisting hier nun helfen? Im Grunde ganz einfach....

Wenn ein Mailserver das erste Mal versucht einem Mailserver mit Greylisting eine E-Mail zuzustellen, wird diese mit der Bitte abgewiesen, es in ein paar Minuten noch einmal zu probieren. Im gleichen Moment speichert der Mailserver ein so genanntes Tripple. Dieses Tripple besteht aus der E-Mail Adresse des Empfängers, der E-Mail Adresse des Absenders und der IP-Adresse des Clients. Versucht nun der Mailserver nach ein paar Minuten eine erneute Zustellung, wird dieses von unserem greylistingfähigen Mailserver erkannt und die E-Mail wird ohne weitere Verzögerung zugestellt. Was das nun bringen soll? Nun ja, fast alle Botnetze arbeiten nach dem "fire and forget" Prinzip. E-Mails werden also einfach abgeschickt und dann nicht weiter beachtet. Das liegt daran, dass die Botnetze sehr effektiv arbeiten sollen. In der Zeit, in welcher sich das Botnetz damit befasst eine E-Mail zu puffern und später noch einmal zuzustellen, sich darum kümmert das ein angesprochener Mailserver gerade nicht antwortet oder eine E-Mail Adresse nicht mehr existiert, in dieser Zeit hätte das Botnetz schon mehrere andere Empfänger anschreiben können. Zudem ist die Wahrscheinlichkeit, dass ein Server mit Greylisting auch sonst gut vor Spam geschützt ist und die E-Mail in einem nachgeschalteten Filter sowieso ausgefiltert wird, größer als bei einem anderen Server. Denn hier hat der Admin anscheinend seine Hausaufgaben gemacht. Aus diesen Gründen ist es für einen Botnetzbetreiber einfacher und besser von seinem vermeintlichen Opfer abzulassen und sich mit einem anderen zu beschäftigen!

Mit aktiviertem Greylisting wird nun jede erste Zustellung eines Mailservers verzögert zugestellt. Fast alle Greylistingsysteme sind selbstlernend, d.h.: nach kurzer Zeit landen bereits bekannte Mailserver auf einer whitelist und müssen ab diesem Moment keine Verzögerung mehr erdulden. Greylisting ist zwar in einigen Fällen nutzlos und sicher ist es kein Allheilmittel gegen Spam und Viren, es hält dem Mailserver denn noch sehr viel "Müll" vom Hals, damit dieser sich um andere Dinge kümmern kann!

Zusammen mit Postfix benutze ich seit längerem schön das Tool postgrey von David Schweikert.

Eine Erste funktionsfähige Implementierung ist unter Debian schon in 5 - 7 Minuten zu realisieren.

 

Postgrey ist direkt aus dem Paketmanager heraus zu installieren:

apt-get install postgrey

Im Normalfall wird postgrey nach der Installation sofort ausgeführt. Dieses lässt sich recht schnell überprüfen, da es auf dem Port 60000 auf 127.0.0.1 lauscht.

netstat -anp | grep 60000

Sollte hier nun etwas wie:

tcp 0 0 127.0.0.1:60000 0.0.0.0:* LISTEN 2540/postgrey.pid -

zurückgeben....

Um Postfix nun die Nutzung von postgrey näher zu bringen, müssen in der Datei /etc/postfix/main.cf die "smtpd_recipient_restrictions" um den Eintrag:

check_policy_service inet:127.0.0.1:60000

erweitert werden. Nach einem Postfixrestart sollte das Greylisting schon laufen. Genauer kann man es sich direkt im Logfile anschauen:

tail -f -n 200 /var/log/mail.log

Es wird das erste Mal versucht eine E-Mails einzuliefern. Porstgrey vergibt die action greylist. Postfix antwortet dem einlieferndem Server also mit:: "450 4.2.0 <Testadresse@testdomain.de>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/testdomain.de.html" Alle 4XX Fehler sind als temporäre Fehler deklariert, daher wird es der einliefernde Mailserver in kürze noch einmal probieren!

Jun 7 10:26:29 smtp postfix/smtpd[9268]: connect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]
Jun 7 10:26:40 smtp postgrey[1202]: action=greylist, reason=new, client_name=static-xxxxxxxxxxxx.de, client_address=xxxxxxxxxxxxx, sender=kernel-error@kernel-error.de, recipient=Testadresse@testdomain.de
Jun 7 10:26:40 smtp postfix/smtpd[9268]: NOQUEUE: reject: RCPT from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]: 450 4.2.0 <Testadresse@testdomain.de>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/testdomain.de.html; from=<kernel-error@kernel-error.de> to=<Testadresse@testdomain.de> proto=ESMTP helo=<smtp.kernel-error.de>
Jun 7 10:26:40 smtp postfix/smtpd[9268]: disconnect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]

Hier ist nun der zweite Einlieferungsversuch des Mailservers! Postgrey erkennt hier schon, den Server. Die Zeit, welche zwischen den Zustellversuchen vergehen muss (default 5 Minuten), ist noch nicht abgelaufen: "reason=early-retry (84s missing)". Aus diesem Grund wird dem einliefernden Mailserver wieder ein: "450 4.2.0 <Testadresse@testdomain.de>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/testdomain.de.html" zurückgegeben.

Jun 7 10:30:11 smtp postfix/smtpd[9268]: connect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]
Jun 7 10:30:16 smtp postgrey[1202]: action=greylist, reason=early-retry (84s missing), client_name=static-xxxxxxxxxxxx.de, client_address=xxxxxxxxxxxxx, sender=kernel-error@kernel-error.de, recipient=Testadresse@testdomain.de
Jun 7 10:30:16 smtp postfix/smtpd[9268]: NOQUEUE: reject: RCPT static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]: 450 4.2.0 <Testadresse@testdomain.de>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/testdomain.de.html; from=<kernel-error@kernel-error.de> to=<Testadresse@testdomain.de> proto=ESMTP helo=<smtp.kernel-error.de>
Jun 7 10:30:16 smtp postfix/smtpd[9268]: disconnect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]

Jetzt kommen wir zum dritten Einlieferungsversuch. Postgrey findet das Tripple und die minimale Zeit zwischen den Zustellversuchen ist inzwischen vergangen. Daher bekommen wir die action pass, welche Postfix zur Annahme der E-Mail bringt! Die E-Mail wurde zugestellt! Postgrey wird sich diesen Vorgang nun für (default) 35 Tage speichern. Aus dieser Merkliste wird postgrey nun lernen und das Greylisting wird Stück für Stück, bei bekannten Kombinationen, verschwinden!

Jun 7 10:32:34 smtp postfix/smtpd[9827]: connect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]
Jun 7 10:32:35 smtp postgrey[1202]: action=pass, reason=triplet found, delay=355, client_name=static-xxxxxxxxxxxx.de, client_address=xxxxxxxxxxxxx, sender=kernel-error@kernel-error.de, recipient=Testadresse@testdomain.de
Jun 7 10:32:35 smtp postfix/smtpd[9827]: 6B271904DA4C: client=static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]
Jun 7 10:32:35 smtp postfix/cleanup[10999]: 6B271904DA4C: message-id=<584E00FCBBB4684XXXXXXD0119300F37D4@smtp.kernel-error.de>
Jun 7 10:32:35 smtp postfix/qmgr[1637]: 6B271904DA4C: from=<kernel-error@kernel-error.de>, size=5104, nrcpt=1 (queue active)
Jun 7 10:32:36 smtp postfix/smtpd[9827]: disconnect from static-xxxxxxxxxxxx.de[xxxxxxxxxxxxx]

Hier ist nun ein Beispiel für einen Vorgang, bei welchem der Client schon eingelernt wurde.

Jun 18 11:43:40 smtp postfix/smtpd[17392]: connect from www.XXX.nrw.de[193.xxx.xxx.xxx]
Jun 18 11:43:55 smtp postgrey[1203]: action=pass, reason=client AWL, client_name=www.XXX.nrw.de, client_address=193.xxx.xxx.xxx, sender=xxxxxxxxxxxxx@uni-wuppertal.de, recipient=kernel-error@kernle-error.de
Jun 18 11:43:55 smtp postfix/smtpd[16425]: B1613904DA46: client=www.XXX.nrw.de[193.xxx.xxx.xxx]
Jun 18 11:43:55 smtp postfix/cleanup[18052]: B1613904DA46: message-id=<2A15E2XXXXXXXXXX9A17CF771D007BDC@men>
Jun 18 11:43:55 smtp postfix/qmgr[1643]: B1613904DA46: from=<xxxxxxxxxx@uni-wuppertal.de>, size=79646, nrcpt=1 (queue active)
Jun 18 11:43:55 smtp postfix/smtpd[16425]: disconnect from www.XXX.nrw.de[193.xxx.xxx.xxx]

Ich hoffe dieser Beitrag hilft dem einen oder anderen, sich etwas mehr Müll vom Hals zu halten!

Fragen oder Anregungen sehe ich wie immer gerne!