Eigener Mailserver: E-Mails daheim aussieben

Wer nach unserer Anleitung seine E-Mails zu Hause abholt und speichert, will sicher auch eine automatische Sortierung vornehmen, damit der Posteingang nicht überläuft. Vor allem abonnierte Mailinglisten generieren teils Hunderte von E-Mails, die ohne Sortierung das Postfach überquellen lassen. Üblicherweise lässt sich ein E-Mail-Client nutzen, um per Filter E-Mails in verschiedene Imap-Ordner zu sortieren. Zu Hause mit einem eigenen Mailserver ist diese Vorgehensweise aber wenig sinnvoll. Damit die Sortierung zeitnah geschieht, müsste der Client zusätzlich zum Server durchweg laufen. Besser ist es, die Sortierung dem Server zu überlassen. Diese Dienste benötigen ziemlich viel Rechenleistung und Speicher, daher ist ihr Einsatz auf schwächeren Rechnern, etwa dem Raspberry Pi, nicht zu empfehlen.
Für die Sortierung gibt es das Sieve-Protokoll und beispielsweise für den Imap-Server Dovecot die Anwendungen Sieve und Managesieve, die nicht ganz einfach einzurichten sind. Mit apt-get install dovecot-managesieved installieren wir beide in einem Durchgang. Jetzt muss in der Konfigurationsdatei /etc/dovecot/conf.d/15-lda.conf im Abschnitt protocol lda die Raute vor der Zeile mail_plugins entfernt werden. Sie muss zudem um die Zeichenkette sieve ergänzt werden und folgendermaßen aussehen:
mail_plugins = $mail_plugins sieve
Danach starten wir den Imap-Server mit service dovecot restart neu.
Nun folgt der kniffelige Teil der Konfiguration: das Erstellen der Filterregeln. Zunächst machen wir uns mit dem Aufbau des Maildir-Ordners in unserem Home-Verzeichnis vertraut. Unterverzeichnisse beginnen immer mit einem Punkt. Enthält der im Client erstellte Unterordner ein Leerzeichen, wird dieses ebenfalls mit einem Punkt ersetzt.
Jeder Benutzer kann für sich filtern
Jeder Benutzer kann eigene Filter verwenden. Diese werden in der Konfigurationsdatei .dovecot.sieve im Homeverzeichnis angelegt, etwa mit touch ~/.dovecot.sieve . Dort muss der vorangestellte Punkt im Dateinamen beachtet werden. Die einzelnen Filterregeln werden darin in If-Else-Anweisungen festgelegt, beispielsweise:
if header :contains "from" "Mailingliste" {fileinto "INBOX.Mailingliste";}
elsif header :contains "subject" "Linux-Kernel" {fileinto "INBOX.Linux.Kernel";}
else {keep;}
In diesem Abschnitt werden E-Mails, in deren Absender die Zeichenkette "Mailingliste" enthalten ist, in das Imap-Unterverzeichnis "Mailingliste" verschoben. Außerdem werden E-Mails, in deren Betreffzeile die Zeichenkette "Linux-Kernel" steht, in den Unterordner "Linux Kernel" verschoben. Ein Abschnitt wird stets mit der Anweisung else {keep;} geschlossen, damit der Sieve-Interpreter weiß, wie mit allen anderen E-Mails zu verfahren ist. In diesem Falle weist der Befehl Keep den Sieve-Interpreter an, alle E-Mails, auf die die vorangegangenen Konditionen nicht zutreffen, in den Hauptordner INBOX zu verschieben.
Oder oder Und
Das Beispiel zeigt nur einige der Schlüsselwörter, die der Sieve-Interpreter verarbeitet. Sieve ist eine Standardsprache nach RFC 5228(öffnet im neuen Fenster) für das Filtern von E-Mail-Nachrichten. Einzelne Anweisungen lassen sich auch zusammenfassen, etwa mit
elsif anyof (header :contains "from" "LKML",header :contains "Subject" "Linux-Kernel") {fileinto "INBOX.Linux.Kernel";}
Hier spielt der Befehl anyof die entscheidende Rolle. Damit untersucht Sieve eine E-Mail daraufhin, ob die Kopfzeile einer E-Mail die Zeichenkette LKML oder Linux-Kernel enthält, und verschiebt sie gegebenenfalls in das Imap-Unterverzeichnis Linux Kernel . Statt anyof lässt sich auch allof nutzen. Dann wird eine E-Mail nur dann verschoben, wenn beide Konditionen wahr sind.
Mit Sieve lassen sich auch Regeln für Spam-Mails erstellen, etwa
elsif (header :contains "Subject" ["*Viagra*", "*viagra*"]) {fileinfo "Inbox.spam";}
Alternativ können solche E-Mails auch gleich gelöscht werden:
elsif (header :contains "Subject" ["*Viagra*", "viagra*"]) {discard;}
Sinnvoll ist es, eine Regel in jeweils einer If-else-Anweisung festzulegen. Zu lange If-else-Ketten werden schnell unübersichtlich.
Mit Plugins über den Client sieben
Auf der Webseite thsmi.github.io(öffnet im neuen Fenster) gibt es eine übersichtliche Referenz der Sieve-Befehle, Operatoren oder Testkommandos. Auch die deutschsprachige Wikipedia-Seite zu Sieve(öffnet im neuen Fenster) ist ein guter Anlaufpunkt, um mehr über Sieve zu erfahren.
Das bereits von uns installierte zusätzliche Modul Managesieve ermöglicht die Filterverwaltung über E-Mail-Clients(öffnet im neuen Fenster) . Das erleichtert unter Umständen die Eingabe komplexer Filterregeln. Nicht alle Clients bringen jedoch die Unterstützung dafür mit. Für Thunderbird gibt es beispielsweise lediglich ein externes Plugin. Dazu muss aber der Port 4190 in der Firewall geöffnet werden, wenn Managesieve auch vom Internet aus verwaltet werden soll.
Gegen Spam und Viren vorgehen
Für das Filtern von Spam kann auch Spamassassin eingesetzt werden, das ungewollte E-Mails zwischen dem MTA Postfix und dem Imap-Server herausfiltert. Der Vorteil von Spamassassin liegt darin, dass die Anwendung selbst Listen verwaltet, die regelmäßig aus dem Internet aktualisiert werden. Die E-Mails landen im Spam-Ordner des Imap-Servers.
Zusätzlich lässt sich eine E-Mail auf dem Server auch vorab auf Viren untersuchen. Dazu dient die Anwendung Clamav, die allerdings kein Antivirenprogramm auf dem Client ersetzen kann. Beide Anwendungen nutzen die Schnittstelle Amavis, die zusätzlich installiert werden muss. Dazu reicht der Befehl apt-get install amavisd-new clamav-daemon spamassassin , den wir als Benutzer Root eingeben.
Spamassassin und Clamav einrichten
Damit Spamassassin regelmäßig seine Listen aktualisiert, müssen wir die Konfigurationsdatei /etc/default/spamassassin anpassen. Dort sollten die Werte der beiden Zeilen ENABLED= und CRON= auf 1 gesetzt werden. Anschließend wird der Dienst mit service spamassassin restart neu gestartet. Die Hersteller von Clamav empfehlen, die Datenbank alle Viertelstunde zu aktualisieren. Dazu öffnen wir /etc/clamav/freshclam.conf und passen die Zeile Checks an, dessen Wert wir von 24 auf 96 setzen. Sie geben die Anzahl der Aktualisierungen innerhalb von 24 Stunden vor. Außerdem muss der Clamav-Nutzer mit adduser clamav amavis der Amavis-Gruppe hinzugefügt werden. Mit service clamav-daemon restart wird auch dieser Dienst neu gestartet. Damit Clamav auch in möglichst viele gepackte Archivdateien hineinsehen kann, installieren wir zusätzlich noch folgende Pakete apt-get install arj unrar-free zoo nomarch lzop cabextract p7zip ripole .
Amavis als Schnittstelle
Jetzt muss Amavis konfiguriert werden. Zunächst als Virenscanner umgesetzt, (AMaViS steht für A MAil Virus Scanner) dient Amavis aktuell als Schnittstelle zu externen Antivirenprogrammen und wurde im Laufe der Zeit auch zur Schnittstelle für Spamfilter erweitert. In dessen Konfigurationsdatei /etc/amavis/conf.d/15-content_filter_mode aktivieren wir die jeweils zwei Zeilen, die mit @bypass_virus_checks_maps = und @bypass_spam_checks_maps = beginnen, indem wir die insgesamt vier Raute-Zeichen entfernen. Danach muss Amavis mit service amavis restart neu gestartet werden.
Damit Postfix E-Mails zunächst an Amavis zur Prüfung weiterleitet, muss der Befehl
postconf -e "content_filter = smtp-amavis:[127.0.0.1]:10024"
eingegeben werden, in dem Postfix der Port mitgeteilt wird, an dem Amavis lauscht.
Folgender Abschnitt muss anschließend ans Ende der Konfigurationsdatei /etc/postfix/master.cf eingeben werden:
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Die mit -o beginnenden Zeilen müssen mit der TAB-Taste eingerückt werden. Mit service postfix reload werden Postfix neu gestartet und Spamassassin sowie Clamav aktiviert.
Während sowohl die anfangs beschriebene Einrichtung eigener Filter als auch die Integration des Antivirenscanners sinnvoll sind, sollte sich der Anwender bei Spamassassin darüber im Klaren sein, dass ein eigener Spam-Filter auch E-Mails aussortieren kann, die eigentlich kein Spam sind. Sie werden zwar nicht verworfen, sondern landen im Quaratäne-Ordner des jeweiligen Benutzers, dennoch kann so die eine oder andere E-Mail übersehen werden. Ohnehin funktionieren die Spam-Filter der meisten E-Mail-Provider recht gut. Wer auf Spamassassin verzichten will, setzt jeweils eine Raute vor die Zeilen
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
in der Konfigurationsdatei /etc/amavis/conf.d/15-content_filter_mode und startet mit service amavis restart den Amavis-Dienst neu. Mit service spamassassin stop wird Spamassassin beendet.
Schließlich weisen wir nochmals darauf hin, dass zumindest in der Anfangszeit der eigene E-Mail-Server besondere Aufmerksamkeit und Pflege braucht. Ein regelmäßiger Blick in die verschiedenen Log-Dateien unter /var/log sollte Pflicht sein. Zudem sollte der Mailserver stets auf den aktuellen Stand gebracht werden, um mögliche Sicherheitslücken zu schließen.



