Postgrey - Postfix Spamfilter unter Debian / Ubuntu

Was ist Postgrey?

Postgrey ist ein Policy-Server für Postfix, um "Greylisting" zu implementieren. Greylisting ist eine Methode zur Spam-Filterung, bei der E-Mails von externen Servern beim ersten Versuch zurückgewiesen werden. Spammer versuchen in der Regel nicht, ihre Nachrichten erneut zu versenden, legitime Mailserver hingegen schon. Postgrey ist zwar für die Verwendung mit Postfix konzipiert, kann aber auch mit Exim verwendet werden.

Wir zeigen Ihnen nachfolgend, wie Sie Postgrey ganz einfach unter Debian/Ubuntu installieren und konfigurieren können.


Pakete installieren

Unter Debian/Ubuntu kann Postgrey mit folgendem Befehl installiert werden:
apt-get install postgrey -y


Konfiguration

Die Datei /etc/postfix/main.cf bearbeiten und den Parameter smtpd_recipient_restrictions um check_policy_service inet:127.0.0.1:10023 erweitern.
Anschließend muss die Postfix-Konfiguration neu geladen werden:
sudo postfix reload


Im Einsatz

Sobald Postgrey läuft und Postfix für seine Nutzung eingerichtet ist, werden Einträge in /var/log/mail.log angezeigt. Um die Einträge zu erhalten, die Postfix ausgibt, sobald ihm mitgeteilt wird, dass eine Nachricht verzögert wird, ist Folgendes auszuführen:
sudo grep -i "postfix/smtpd" /var/log/mail.log | grep -i "greylisted"
Die Einträge werden in etwa so aussehen:
Jul 24 16:00:57 mailserver postfix/smtpd[12524]: NOQUEUE: reject: RCPT from mail.server.com[1.2.3.4]: 450 4.2.0 <someone@somedomain.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/somedomain.com.html; from=<bounce-someone.else@anotherdomain.com> proto=ESMTP helo=<mail.server.com>
Postgrey schreibt auch seine eigenen Protokolleinträge. Die Einträge, die Postfix erzeugt, sobald eine Nachricht verzögert werden soll, können wie folgt angezeigt werden:
sudo grep -i "postgrey" /var/log/mail.log | grep -i "action=greylist"
Die Einträge werden in etwa so aussehen:
Jul 24 16:00:57 mailserver postgrey[1420]: action=greylist, reason=new, client_name=mail.server.com, client_address=1.2.3.4, sender=bounce-mc.us11_12345678.998765-someone=somedomain.com@mail.server.com, recipient=someone@somedomain.com
Nachrichten, die aufgrund von Greylisting verzögert wurden, werden mit einem X-Greylist-Header versehen, z.B.:
X-Greylist: delayed 341 seconds by postgrey-1.34 at mail.server.com; Sun, 24 Jul 2016 16:26:38 CEST


Anpassungen

Sie sollten unbedingt Testnachrichten von einem anderen Server aus versenden und /var/log/mail.log genau beobachten, wenn Sie Änderungen vornehmen, die in diesem Abschnitt erläutert worden sind.


Whitelisting

Unter Umständen möchten Sie verhindern, dass bestimmte Remote-Clients und/oder lokale Empfänger ihre Mails durch das Greylisting verzögert erhalten. Hier ist aber auch noch anzumerken, dass Postgrey selbstlernend ist und die Mails der Absender, welche mehrmals eingehen, ohne Prüfung zugestellt werden.

Bevor allerdings mit der Zusammenstellung einer Liste von Domänen begonnen wird, sollte man einen Blick auf den Inhalt der Datei /etc/postgrey/whitelist_clients werfen. In Ubuntu und anderen Debian-Versionen enthält die Standardversion dieser Datei bereits Domänennamen bekannter E-Mail-Anbieter (z. B. Google), deren Server dafür bekannt sind, dass sie legitime E-Mails übertragen.

Um eine eigene Liste von Whitelist-Clients zusätzlich zu den Standard-Clients hinzuzufügen, muss die Datei /etc/postgrey/whitelist_clients.local erstellt und pro Zeile einen Host oder eine Domain eingetragen werden.

Um die Änderungen zu übernehmen, muss Postgrey neu geladen werden:
sudo systemctl reload postgrey


Verzögerung

Die Standardverzögerung - d.h. die Zeitspanne, die mindestens vergehen muss, bevor Postgrey einen erneuten Versuch von einem Greylist-Client akzeptiert - beträgt 300 Sekunden (5 Minuten). Um diesen Wert zu ändern, bearbeiten Sie /etc/default/postgrey und fügen das Argument --delay=N zu POSTGREY_OPTS hinzu, wobei N die gewünschte Verzögerung in Sekunden ist.

Beispiel für eine Verzögerung von 60 Sekunden:
POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=60"
Die Änderungen werden durch einen Neustart von Postgrey übernommen:
sudo systemctl restart postgrey


Listening Port

In dieser Anleitung gehen wir davon aus, dass Postgrey den Port 10023 abhört.
Um das unter Ubuntu 16.04 zu prüfen, muss man Folgendes ausführen:
sudo grep "postgrey" /var/log/mail.log | grep -i "resolved"
Die Ausgabe sollte in etwa so aussehen:
Jul 29 13:40:26 mailserver postgrey[16036]: Resolved [localhost]:10023 to [127.0.0.1]:10023, IPv4
In diesem Fall wurde bestätigt, dass der Dienst auf Port 10023 lauscht.

Wenn Postgrey an einem anderen Port lauschen soll, muss die Datei /etc/default/postgrey bearbeitet und der Wert des Arguments "--inet" wie gewünscht geändert werden.
Um Postgrey zum Beispiel auf Port 10113 lauschen zu lassen, muss --inet=10113 verwendet werden.

Anschließend muss die Postfix-Konfiguration in /etc/postfix/main.cf angepasst werden, indem der Parameter "check_policy_service" in check_policy_service inet:127.0.0.1:10113 geändert wird. Um die Änderung zu übernehmen, muss Postgrey neu gestartet...
sudo systemctl restart postgrey
...und die Postfix-Konfiguration neu laden werden
sudo postfix reload


IPv6

Wenn Postgrey auf demselben Rechner wie Postfix läuft und IPv6 anstelle des IPv4-Standards genutzt werden soll, wird das in der Praxis wahrscheinlich keinen großen Unterschied in Bezug auf die Performance machen, kann aber für andere Anwendungen nützlich sein.

Um Postgrey über IPv6 zu verwenden, muss lediglich die IPv6-Adresse zusätzlich zur Portnummer in /etc/default/postgrey angegeben werden.
Um zum Beispiel auf Port 10023 über IPv6 auf localhost zu lauschen, verwendet man --inet=[::1]:10023.

Anschließend bearbeitet man die Postfix-Konfiguration in /etc/postfix/main.cf und ändert den Parameter "check_policy_service" zu check_policy_service inet:[::1]:10023.

Um die Änderung zu übernehmen, muss Postgrey neu gestartet...
sudo systemctl restart postgrey
...und die Postfix-Konfiguration neu laden werden
sudo postfix reload
Tags