Server-Blog Ubuntu Server

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.