Greylisting als Konzept
"Greylisting" bezeichnet eine Vorgehensweise, bei der die Entscheidung über die Annahme oder Ablehnung einer E- Mail nicht sofort fällt, sondern die Annahme der Mail zunächst verzögert - der Auslieferungsversuch also mit einem temporären Fehlercode zurückgewiesen - wird. Wenn jedoch in einem konfigurierbaren Zeitfenster (meist Stunden) nach einer gleichfalls konfigurierbaren Wartezeit eine erneute Auslieferung mit demselben Absender an denselben Empfänger von demselben Host aus erfolgt, wird die E-Mail angenommen und der Host als Absender legitimer Mail für eine konfigurierbaren Zeitraum (meist Wochen) von erneutem Greylisting ausgenommen.
Das Konzept setzt also darauf, dass Versender unerwünschter E-Mail, die namentlich auf spezielle Tools zum Massenversand von E-Mails setzen oder gekaperte Fremdrechner für den Versand nutzen, eine Auslieferung nur einmal versuchen, legitime Mailversender aber mehrfach. Diese Grundannahme trifft allerdings nicht immer zu. Nach einigen erfolgreichen Jahren schaffen Spammer es zunehmend, mehrere Zustellversuche zu unternehmen; auf der anderen Seite gibt es Mailserver, die erhebliche Schwierigkeiten mit der im Standard vorgesehenen erneuten Auslieferung einer vorübergehend nicht zustellbaren E-Mail haben, bzw. Konstellationen, in denen der neue Zustellversuch von einem anderen Host als der erste ausgeht (Serverfarmen) oder einen anderen Absender hat (Mailinglisten mit VERP).
Vorsicht bei der Anwendung ist also geboten; für nähere Informationen zum Konzept und seinen Vor- und Nachteilen verweise ich auf die weiterführenden Links am Ende dieser Seite.
Vorbemerkungen
Meine Installation läuft unter Debian (ursprünglich einmal Sarge, jetzt Stretch), wobei ich allerdings nicht die "split configuration" nutze, sondern vielmehr die Standard-Konfigurationsdatei des Exim-Upstreams einspiele. Für das Greylisting verwende ich das Debian-Paket von greylistd, das die Integration mit dem Debian-Exim-Paket übrigens automatisiert hat (siehe die weiterführenden Links am Ende dieser Seite).
Mein Ziel war es, möglichst konservativ zu filtern; insbesondere will ich nur Hosts greylisten, die bereits auf einer Real-time Blackhole List (RBL) bzw. DNS Blacklist (DNSBL) stehen. Das erlaubt es mir, Blacklists zu verwenden, die für ein direktes Abweisen nicht geeignet sind, weil die Gefahr falsch positiver Treffer zu hoch ist. Außerdem werden "unbescholtene" Einlieferer nach Möglichkeit nicht gebremst. Das erscheint mir ein brauchbarer Kompromiss zu sein.
Implementation
Installation
Wenn Exim bereits installiert ist und läuft (ich verwende für
Mailserver standardmäßig das "große" Paket exim4-daemon-heavy
), ist
zunächst greylistd zu installieren: aptitude install
greylistd
Danach muss der Exim-Benutzer (hier Debian-Exim
) der Gruppe
greylist
hinzugefügt werden: adduser Debian-exim greylist
Konfiguration von greylistd
Danach ist greylistd zu konfigurieren. Die Konfigurationsdatei findet
sich unter /etc/greylistd/config
. Dort sollten auf jeden Fall die
Parameter singlecheck
und singleupdate
auf true
gesetzt werden.
Damit wird nur die IP-Adresse des absendenden Servers in der Whitelist
gespeichert, und auch nur auf das Vorhandensein dieser IP-Adresse geprüft.
Anderenfalls speichert greylistd ein Tripel, bestehend aus der IP-Adresse
des absendenden Servers, der Mailadresse des Absenders und der Mailadresse
des Empfängers, und prüft auch darauf. Dann wird nach erfolgreichem
Durchlauf des Greylistings nicht der Absenderhost freigeschaltet, sondern
nur der konkrete Absender von diesem Host für den konkreten Empfänger. Diese
Einstellung erscheint mir zu streng. Auch das Wartezeitintervall sollte man
kritisch prüfen; 60 Minuten erscheinen mir zu viel, ich setze den Wert in
der Regel auf 10 Minuten.
Außerdem sollte man sich überlegen, welche einliefernden Hosts man
whitelisten, also vom Greylisting ausnehmen will. Eine Liste von
Servern, die mit Greylisting Schwierigkeiten haben, wird bei greylistd
unter /var/lib/greylistd/whitelist-hosts
bereits mitgeliefert. Eigene
Ergänzungen - bspw. große deutschsprachige Mailanbieter, Mailserver der
eigenen Firma oder von Freunden und Bekannten - kommen in
/etc/greylistd/whitelist-hosts
. Beide Dateien werden allerdings nicht
von greylistd selbst ausgewertet, sondern von Exim! Sie müssen also bei
der Anbindung an Exim berücksichtigt werden.
Vergessen Sie nicht, die Konfiguration von greylistd neu laden zu lassen: service greylistd reload
Einbindung in Exim
Für die Nutzung mit dem Standard-Debian-Exim-Paket genügt der Aufruf von greylistd-setup-exim4 als Root; näheres bitte ich der Dokumentation des Pakets zu entnehmen. Das ermöglicht allerdings nicht alle Features, die ich in meiner eigenen Lösung eingebaut habe!
Wer - wie ich - seinen Exim lieber selbst von Hand konfiguriert, muss von Hand eine weitere ACL einfügen, sinnvollerweise nach allen anderen Spamfiltern und der Überprüfung, ob der Adressat der E-Mail existiert, und vor der Annahme der E-Mail.
Meine Lösung dafür, die ich anschließend dann im einzelnen zur Erläuterung auseinandernehme, sieht - ausgehend von den Beispielen aus der greylistd-Konfiguration - so aus:
# greylisting
# greylistd(8) configuration follows.
defer
message = $sender_host_address is not yet authorized to deliver \
mail from <$sender_address> to <$local_part@$domain>. \
Please try later.
log_message = greylisted.
!senders = : postmaster@*
!hosts = : +relay_from_hosts : \
${if exists {/etc/greylistd/whitelist-hosts}\
{/etc/greylistd/whitelist-hosts}{}} : \
${if exists {/var/lib/greylistd/whitelist-hosts}\
{/var/lib/greylistd/whitelist-hosts}{}}
!authenticated = *
domains = +local_domains : +relay_to_domains
dnslists = ${readfile{/etc/exim4/greylist-rbls}{:}}
condition = ${readsocket{/var/run/greylistd/socket}\
{--grey \
$sender_host_address \
$sender_address \
$local_part@$domain}\
{5s}{}{false}}
Im einzelnen haben die Teile dieser ACL folgende Bedeutung:
SMTP-Fehlermeldung für den Einlieferer
message = $sender_host_address is not yet authorized to deliver \
mail from <$sender_address> to <$local_part@$domain>. \
Please try later.
Diese Nachricht erhält der einliefernde Server, wenn Greylisting greift.
Lognachricht
log_message = greylisted.
Diese Information schreibt Exim ins Log.
Whitelisting bestimmter Absender
!senders = : postmaster@*
Diese Absender (Envelope-Sender!) werden vom Greylisting generell
ausgenommen; das betrifft den leeren Absender <>
und den Absender
postmaster
. Wer hier keine Ausnahmen macht, riskiert Probleme mit der
Mailauslieferung an Hosts, die durch einen Callout die Gültigkeit der
Absenderadresse zu prüfen versuchen.
Whitelisting bestimmter einliefernder Hosts
!hosts = : +relay_from_hosts : \
${if exists {/etc/greylistd/whitelist-hosts}\
{/etc/greylistd/whitelist-hosts}{}} : \
${if exists {/var/lib/greylistd/whitelist-hosts}\
{/var/lib/greylistd/whitelist-hosts}{}}
Diese Hosts werden vom Greylisting generell ausgenommen:
-
Einlieferungen, die nicht per SMTP erfolgen, sondern durch lokalen Aufruf von Exim (
:
), -
Einlieferungen durch Hosts, die per SMTP relayen dürfen (
+relay_from_hosts
), und -
Einlieferungen durch Hosts, die auf einer der bereits zuvor genannten Whitelists stehen.
Welche Hosts Sie ggf. whitelisten müssen, dürfte sehr von Ihrem spezifischen Mailverkehr abhängig sein. Ich persönlich habe mit meinem Greylist-Filter - auch ohne explizites Whitelisting über die "mitgelieferten" Listen hinaus - in den letzten gut neun Jahren keine Schwierigkeiten gehabt (im Gegensatz bspw. zu Sender Callouts); das heißt aber nicht, dass nicht durch Greylisting - wie letztlich durch jeden Filter - auch erwünschte Mail verlorengehen kann. Die Wahrscheinlichkeit dafür hingegen erscheint mir in der hier vorgeschlagenen Konfiguration denkbar gering.
Whitelisting authentifizierter Clients
!authenticated = *
Mail, die durch authentifizierte Nutzer eingeliefert wird, wird gleichfalls vom Greylisting ausgenommen. Das ist schon deshalb empfehlenswert, weil es sich dabei zumeist nicht um andere Mailserver, sondern Mailclients von Endnutzern handeln dürfte.
Domains, für die das Greylisting greifen soll
domains = +local_domains : +relay_to_domains
Nur Mail an Domains, für die der Server zuständig ist, wird dem Greylisting unterworfen, also nur eingehende Mail.
Man kann sich hier auch eine Whitelist von Empfänger-Domains konfigurieren, für die kein Greylisting erfolgen soll:
domains = !+acl_whitelist : +local_domains : +relay_to_domains
+acl_whitelist
muss dann passend definiert sei, bspw. direkt in der
Exim-Konfiguration
(domainlist acl_whitelist = maillists.mydomain.example
), durch Einbinden
einer Datei (domainlist acl_whitelist = /etc/exim4/domains-whitelist)
)
oder auch durch Abruf aus LDAP, einer Datenbank oder wie auch
immer.
Beschränkung auf in RBLs gelistete Hosts
dnslists = ${readfile{/etc/exim4/greylist-rbls}{:}}
Das Greylisting greift nur für Hosts, die bereits auf einer der in der Datei
greylist-rbls
genannten Blacklists (eine pro Zeile) stehen. Wenn Sie diese
Zeile weglassen, greift das Greylisting hingegen für alle Hosts, die nicht
explizit ausgenommen wurden.
Überlegen Sie sich, welche Blacklists Sie nutzen wollen! In Betracht kommen bspw.
- pbl.spamhaus.org
- bl.spamcop.net
- ix.dnsbl.manitu.net
- psbl.surriel.com
- dnsbl-1.uceprotect.net
- dnsbl-2.uceprotect.net
- dnsbl-3.uceprotect.net
Nicht jede dieser Listen werden Sie nutzen wollen; bitte kopieren Sie nicht einfach den Text, sondern prüfen Sie die Policy der jeweiligen Listen.
Der eigentliche greylistd-Aufruf
condition = ${readsocket{/var/run/greylistd/socket}\
{--grey \
$sender_host_address \
$sender_address \
$local_part@$domain}\
{5s}{}{false}}
Hier wird greylistd aufgerufen und erhält die IP-Adresse des einliefernden Hosts, die Absenderadresse und die Zieladresse übergeben.
Wenn der Host schon in der Whitelist steht, darf er sofort ausliefern (die condition ist false). Ist er noch unbekannt, wird die Einlieferung verzögert (die condition ist true); zugleich wird das Tripel aus Host-IP, Absender und Empfänger in die Greylist-Datenbank aufgenommen. Wenn jetzt binnen des in der greylistd-Konfiguration definierten Zeitfensters noch einmal derselbe Host eine Mail mit demselben Absender an denselben Empfänger einzuliefern versucht, wird die Mail diesmal angenommen und die IP-Adresse des Hosts zugleich auf die Whitelist übernommen, d.h. bei späteren Einlieferversuchen - auch von Mails anderer Absender an andere Empfänger - nicht mehr verzögert.
Haben Sie hingegen in der Konfiguration des greylistd die Parameter
singlecheck
und singleupdate
auf false
belassen, werden nur Mails
desselben Absenders an denselben Empfänger von diesem Host unverzögert
durchgelassen.
In beiden Fällen wird der Whitelist-Eintrag nach Ablauf einer einstellbaren Zeit (standardmäßig 60 Tage) wieder gelöscht, wenn seitdem keine neue Mail von diesem Host (bzw. desselben Absenders an denselben Empfänger von diesem Host) eingegangen ist. Jede neue "passende" Mail setzt den Expire-Timer zurück.
Bedienung
Zugriff auf die Datenbanken von greylistd zum Ausgeben oder Bearbeiten der
Grey- und Whitelist oder zur Anzeige von Statistiken erhalten Sie über den
Befehl greylist
(ohne "d" am Ende!). Die verfügbaren Befehle erhalten Sie
durch Aufruf von greylist --help.
Weiterführende Links
-
Greylisting with exim4
für die Installation mit den Standard-Debian-Paketenexim4
undgreylistd
-
Adding Greylisting Support
aus "Spam Filtering for Mail Exchangers" von Tor Slettnes, dem Autor von greylistd -
Greylisting
aus "Spam Filtering for Mail Exchangers" von Tor Slettnes, dem Autor von greylistd -
What is Greylisting? von Evan Harris
Lizenz
Dieser Inhalt ist unter der Creative Commons-Lizenz BY-NC-SA 4.0 DE lizenziert; er darf unter Namensnennung des Autors nicht-kommerziell weitergegeben und auch bearbeitet werden, soweit das neue Werk gleichfalls wieder dieser Creative-Commons-Lizenz unterliegt. Die Einzelheiten ergeben sich aus dem Lizenzvertrag.