Thema Sieve (Mailfilterung)
Abschnitt 1: Was ist Sieve?
**Sieve** ist eine standardisierte Skriptsprache für die **serverseitige E-Mail-Filterung**. Im Gegensatz zu Filtern, die in E-Mail-Clients eingerichtet werden (z.B. Thunderbird oder Outlook), führt der Server Sieve-Skripte aus, **bevor** die Mail im Posteingang landet. Da die Filterung direkt auf dem Server stattfindet, ist sie unabhängig vom verwendeten Mail-Client.
Abschnitt 2: Dovecot Sieve Konfiguration
Die Hauptkonfiguration für das Sieve-Plugin von Dovecot befindet sich in der Datei **90-sieve.conf** im Konfigurationsverzeichnis. Hier definierst du, wo die Skripte gespeichert werden und welche Skripte (z.B. globale Richtlinien) ausgeführt werden sollen.
Dateipfad der Konfiguration:
/etc/dovecot/conf.d/90-sieve.conf
Inhalt der Konfiguration (90-sieve.conf):
##
## Settings for the Sieve interpreter
##
# Sieve script storage for global scripts that run *before* user scripts
sieve_script default {
type = before
driver = file
# Der Pfad zum globalen Sieve Skript
path = /etc/dovecot/sieve/global-policy.sieve
}
# Der Ordner, in dem kompilierte Skripte gespeichert werden
sieve_script_bin_path = /var/lib/dovecot/sieve
Die Zeile sieve_script default mit dem Parameter type = before stellt sicher, dass dieses globale Skript ausgeführt wird, **bevor** die individuellen Filterregeln der Benutzer greifen. Dies ist ideal für Spam- oder allgemeine Routing-Regeln.
Abschnitt 3: Aufbau eines Sieve-Skripts
Sieve-Skripte beginnen mit der Deklaration der benötigten **Erweiterungen** (require) und bestehen dann aus logischen **if**-Blöcken mit Aktionen. Als Beispiel dient hier ein globales Skript, das Mails an bestimmte Adressen in öffentliche Ordner verschiebt.
Inhalt des globalen Policy-Skripts (global-policy.sieve):
require ["fileinto", "regex", "variables", "enotify", "environment", "reject", "vacation", "relational", "copy", "date", "index", "body", "mailbox"];
# Alle E-Mail-Adressen für fail2ban in einen gemeinsamen Ordner verschieben
if anyof (
header :contains ["To", "Cc", "Bcc"] "fail2ban@beispiel-domain.com"
) {
fileinto "Public/fail2ban";
stop;
}
# Alle E-Mail-Adressen für Garten-Themen in einen gemeinsamen Ordner verschieben
if anyof (
header :contains ["To", "Cc", "Bcc"] "garten@beispiel-domain.com"
) {
fileinto "Public/garten";
stop;
}
# Alle E-Mails an eine dedizierte Junk-Adresse in den Junk-Ordner verschieben
if anyof (
header :contains ["To", "Cc", "Bcc"] "junk@beispiel-domain.com"
) {
fileinto "Public/Junk";
stop;
}
Die Anweisung stop; ist hier sehr wichtig. Sie beendet die weitere Verarbeitung des Sieve-Skripts (sowohl des globalen Skripts als auch aller nachfolgenden Benutzerskripte), nachdem die Aktion ausgeführt wurde.
Abschnitt 4: Sieve Skript Kompilierung
Sieve-Skripte müssen vor der Verwendung in ein binäres Format kompiliert werden, um die Leistung zu optimieren. Das Tool hierfür ist **sievec**.
sievec /etc/dovecot/sieve/global-policy.sieve
Nach der erfolgreichen Kompilierung wird die kompilierte Datei (z.B. global-policy.svbin) automatisch im Pfad /var/lib/dovecot/sieve abgelegt, wie in der Konfigurationsdatei 90-sieve.conf festgelegt. **Erst dann** wird das Skript von Dovecot verwendet.