Greylisting zur Spamvermeidung

Was bedeutet „Greylisting“?

Greylisting ist eine Methode zur Bekämpfung von Spam. Absender, die zum ersten Mal eine Mail schicken, werden zunächst temporär abgewiesen und in der Greylist gespeichert. „Echte“ Mailserver werden die Mail nach einiger Zeit erneut senden, da es nicht ungewöhnlich ist, das Mails nicht sofort zustellbar sind. Bei diesem zweiten Zustellversuch ist der Absender bekannt und die Mail wird zugestellt. Weitere Mails vom selben Absender werden für einen gewissen Zeitraum ohne Verzögerungen zugelassen.

Spammer werden aber Mails nur einmal schicken, da sie häufig nur simple SMTP-Clients ohne Fehlerbehandlung verwenden. Selbst wenn einzelne Spammer reguläre Mailserver benutzen, ist die Chance hoch, dass der Spammer beim zweiten Zustellversuch bereits bekannt ist und durch RBLs und Spamfilter erkannt wird.

Installation von Postgrey für Postfix

Hinweis: Die folgenden Anleitung ist eine Gedächtnisstütze für mich selber und beschreibt die nötigen Schritte für Ubuntu 10.04 LTS.

Wenn auf dem eigenen Server Postfix als Mailserver eingesetzt wird, kann man Greylisting sehr leicht mit Postgrey nachträglich hinzufügen.

Schritt 1: Paket installieren

apt-get install postgrey

Schritt 2: Prüfen, dass der Postgrey-Daemon läuft

ps aux | grep postgrey

Es sollte dann etwa folgende Zeile zu sehen sein:

postgrey 31898 ?        Ss     0:00 /usr/sbin/postgrey --pidfile=/var/run/postgrey.pid --daemonize --inet=10023

Wichtig ist hier die Angabe –inet=10023 – das ist der Port, über den Postgrey Verbindungen entgegennimmt.

Auf Wunsch kann man in der Datei /etc/default/postgrey auch die Optionen anpassen – etwa die Zeit, ab der ein Absender beim zweiten Versuch akzeptiert wird (Standard sind 300 Sekunden – eine Reduzierung auf 50 Sekunden ist hier sinnvoll, da manche Server bereits nach einer Minute einen zweiten Zustellversuch machen):

POSTGREY_OPTS="--inet=10023 --delay=50"

Wenn man Änderungen an den Vorgaben für Postgrey vornimmt, sollte man danach den Daemon mit

/etc/init.d/postgrey restart

neu starten.

Schritt 3: Die Postfix-Konfiguration erweitern, damit Postgrey genutzt wird

Dazu ist die Datei /etc/postfix/main.cf wie folgt zu erweitern: In der Zeile mit der Angabe smtpd_recipient_restrictions =  ist ein zusätzlicher Eintrag check_policy_service inet:127.0.0.1:10023 zu ergänzen (wenn Postgrey einen anderen Port als 10023 verwendet, ist die Angabe entsprechend anzupassen).

Danach die Postfix-Konfiguration neu laden:

postfix reload

Schritt 4: Prüfen, ob Greylisting funktioniert

Dazu schickt man sich eine Test-Mail – von einer anderen Adresse aus – und kontrolliert, ob in der Datei /var/log/mail.info Einträge auftauchen, die etwa wie folgt aussehen (manche Stellen wurden mit xxx anonymisiert – selbstverständlich sollte man dort die echten Daten vorfinden):

Sep 11 07:52:43 xxx postgrey[31898]: action=greylist, reason=new, client_name=xxx, client_address=xxx, sender=xxx, recipient=xxx
Sep 11 07:52:43 xxx postfix/smtpd[31972]: NOQUEUE: reject: RCPT from unknown[xxx]: 450 4.2.0 <xxx>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/xxx; from=<xxx> to=<xxx> proto=SMTP helo=<xxx>

Wenn der sendende Mailserver die Zustellung erneut versucht, sollte die Mail dann akzeptiert werden, was ebenfalls an einer entsprechenden Meldung erkennbar ist:

Sep 11 08:01:05 xxx postgrey[31898]: action=pass, reason=triplet found, delay=508, client_name=xxx, client_address=xxx, sender=xxx, recipient=xxx

Das Triplet aus IP-Adresse, Absender und Empfänger wird nun in der Datenbank von Postgrey als „bekannter Absender“ eingetragen und weitere Mails von der selben Adresse sollten ohne Verzögerung sofort zugestellt werden.

Da die meisten Spammer genau das nicht tun – die Zustellung erneut versuchen – werden die meisten Spam-Mails schlicht ignoriert :-)