Administration / Webmaster, German, Linux, Mailserver

Serverseitige Mailfilter mittels Sieve. Einrichtung von Dovecot & Roundcube

Sieve-Skripte sind eine einfache Möglichkeit Mailfilter auf Mailservern umzusetzen. So können serverseitig etwa Regeln definiert werden, die eingehende Nachrichten z.B. bei vorliegen eines bestimmten Absenders, Empfängers oder Betreffs in einen Ordner verschiebt. Nachrichten können z.B. auch gelöscht oder als gelesen markiert werden. Man kann auch Nachrichten weiterleiten oder mit automatisierter Antwort ablehnen. Auch Abwesenheitsnotizen sind ein Typischer Anwendungsfall.

Die Möglichkeiten sind im Prinzip sehr ähnlich zu den Filterregeln, die man in Thunderbird hinterlegen kann. Der Wesentliche Vorteil: Das Filtern erfolgt auf dem Server. Das ist insbesondere dann von Vorteil, wenn man von mehreren Clients auf ein IMAP-Account zugreift. Da wir heutzutage in der Ära der Smartphones angelangt sind, tut das quasi jeder. Manch einer neben Desktop und Smartphone womöglich noch auf der Arbeit oder per Webmail. Mittels Sieve muss man die Filter nur ein mal pflegen und zwar auf dem Server.

Sieve Clients

Sieve stellt ein eigenes Protokoll zur Verfügung und ist unter Port 4190 zu erreichen. Nun könnte man seine Filter tatsächlich sogar per Telnet pflegen. Komfortabler ist aber ein Sieve Client (Überblick hier). Viele Clients sind jedoch veraltet. Empfehlenswert ist Manage Sieve (Windows und Linux), welches das editieren von Sieve Skripten mit Syntax-Hervorhebung ermöglicht. Das ist toll für Informatiker und Enthusiasten, wird aber den Otto-Normal-Verbraucher abschrecken. Wer seinen Nutzern die Filter komfortabel per GUI erstellen lassen möchte, dem sei die Sieve Erweiterung für den Webmailclient Roundcube empfohlen. Weiterer Vorteil: Man braucht keine weitere Software installieren. Wir besprechen daher im Folgenden auch die Installation von Sieve in Roundcube.

Editieren eines Sieve Skripts mittels Manage Sieve unter Linux

Voraussetzungen

Wir verwenden folgendes System:

  • Debian 10 (Buster)
  • dovecot 2.3.4.1 (Befehl /usr/sbin/dovecot --version)

Wir gehen davon aus, dass Dovecot bereits vollständig für die Verwendung mit IMAP eingerichtet ist. Auch Roundcube sollte schon installiert sein. Wir besprechen hier nur die nötige Konfiguration für Sieve!

Dovecot einrichten

Bekanntermaßen wird Sieve häufig auch für das Filtern von z.B. Spam in den Spam-Ordner verwendet. Während hier die Regeln lediglich durch den Administrator auf dem Server abgelegt werden, möchten wir dem Endanwender ermöglichen Sieve-Skripte anzuwenden. Hierzu verwenden wir neben dem sieve Plugin auch managesieve.

Zuerst installieren wir die Sieve-Erweiterung von Dovecot:

sudo apt-get install dovecot-sieve dovecot-managesieved

Sieve für LMTP aktivieren

Wir aktivieren nun das Sieve Plugin für den LMTP (Local Mail Transfer Protocol). Dazu editieren wir die Datei /etc/dovecot/conf.d/20-lmtp.conf:

protocol lmtp {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}

Sieve konfigurieren

Nun richten wir Sieve selbst ein. Dazu editieren wir /etc/dovecot/conf.d/90-sieve.conf. Generell gilt, dass ein Benutzer beliebig viele Sieve-Skripte haben kann. Diese müssen an einem Ort gespeichert werden. Hierfür bietet sich z.B. /var/vmail/sieve/scripts/%u an. Hierbei ist %u ein Platzhalter für den vollständigen Benutzernamen inklusive Domain, also der Form user@example.com. Außerdem muss der Ort für das aktuell aktive Sieve-Skript eines Nutzers angegeben werden. Ein Nutzer kann zwar beliebig viele Sieve-Skripte definieren, hat aber immer nur genau ein aktives Skript. Wir nehmen hier den Pfad /var/vmail/sieve/%u.sieve. Die 90-sieve.conf beinhaltet nun folgendes:

sieve = file:/var/vmail/sieve/scripts/%u;active=/var/vmail/sieve/%u.sieve

Wer ein Sieve-Skript für einen Spamfilter anlegen möchte, also z.B. bei vorliegen eines Spam-Headers in einen Spam-Ordner filtern möchte, tut dies in der Regel bevor das Skript des Benutzers ausgeführt wird. Daher wird sieve_before gesetzt. Folgendes könnte in 90-sieve.conf eingetragen werden:

sieve_before = /var/vmail/sieve/spam-global.sieve

Die Datei spam-global.sieve kann wie folgt aussehen:

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
  fileinto "Spam";
}

Managesieve konfigurieren

Um unsere Sieve-Skripte auch von außen bearbeiten zu können, müssen wir nun managesieve aktivieren. Wir bearbeiten /etc/dovecot/conf.d/20-managesieve.conf:

service managesieve-login {
  inet_listener sieve {
    port = 4190
   }
}

Damit hätten wir es geschafft. Jetzt noch neu starten!

sudo service dovecot restart

Roundcube

Zuerst richten wir das Plugin managesieve für Roundcube ein. Dazu legen wir die Configdatei config.inc.php durch Kopieren der Defaultconfig config.inc.php.dist an:

cp /path-to-roundcube/plugins/managesieve/config.inc.php.dist /path-to-roundcube/plugins/managesieve/config.inc.php

Nun editieren wir die config.inc.php wie folgt:

$config['managesieve_port'] = 4190;
$config['managesieve_host'] = '%h';
$config['managesieve_usetls'] = true;

Der Port 4190 ist der Standardport für Sieve und wir haben diesen in der managesieve.conf von Dovecot entsprechend gesetzt. Ich gehe davon aus, dass die Hostnamen in der Roundcube Konfigurationsdatei explizit gesetzt sind. So ist es mit dieser Konfiguration auch möglich Sieve-Skripte auf fremden Mailservern (ungleich localhost) zu editieren. Da dies möglich ist, sollten wir managesieve_usetls auf jeden Fall auf true setzen, damit wir Transportverschlüsselung haben. Wir müssen nun noch das managesieve-Plugin in der Roudcube Konfigurationsdatei aktivieren. Bei mir sieht /path-to-roundcube/config/config.inc.php ausschnittsweise wie folgt aus:

$config['default_host'] = array('tls://imap.occumail.net','tls://imap.digitalcourage.de');
$config['smtp_server'] = 'tls://smtp.%z';
$config['smtp_port'] = '587';
$config['plugins'] = array(
'emoticons',
'archive',
'zipdownload',
'password',
'managesieve',
);

Filter in Roundcube bearbeiten

Wir können uns nun in Roundcube einloggen. Oben rechts unter Einstellungen finden wir nun links den Eintrag Filter. Hier können wir neue Filtersätze anlegen und einen Filtersatz aktivieren. Filter können sehr komfortabel über die GUI zusammengeklickt werden. Roundcube generiert das Sieve-Skript und pusht dieses auf den Server.

Bezüglich der möglichen Filter sind bei mir keine Wünsche offen geblieben. Aktuell wäre mir nicht bekannt, dass die Sieve-Skriptsprache Operationen unterstützt, die hier nicht abgedeckt werden. Solltest du andere Erfahrungen gemacht haben, dann kontaktiere mich doch bitte und ich werde den Artikel entsprechend ergänzen!

Einstellen eines Sieve-Filters auf Roundcube