.
szmtag

© Alex-,photocase.com

Server-seitige Mailfilter mit Sieve

Ausgesiebt

von Markus Feilner
Erschienen im Linux-Magazin 2007/06

E-Mails auf dem Server filtern befreit von überflüssigem Ballast: Die leistungsfähige Skriptsprache Sieve ist als RFC standardisiert. Unerwünschte Nachrichten mit Spam oder Viren können Sieve-Skripte automatisch löschen oder wegsperren, ohne den Maildienst damit zu belasten.

Moderne E-Mail-Clients gestatten es dem Benutzer, neue Nachrichten automatisch zu sortieren und beispielsweise Spam direkt beim Abholen zu löschen. Diese Client-seitigen Filterregeln haben jedoch ihre Tücken: Jede Filterregel des Mailprogramms verlängert die Zeitspanne, die es zum Abholen der Post benötigt, besonders die rechenintensiven Spam- und Virenchecks fallen hier negativ auf. Meldet sich dann der Benutzer mit einem Webmailer wie Squirrelmail an, stellt er enttäuscht fest, dass Spam und Viren-Mails, die Kontact, Evolution oder Outlook automatisch löschen, immer noch in seinem Posteingang auf dem IMAP-Server landen.

Wenn verschiedene Mailprogramme zum Einsatz kommen, müssen alle Regeln doppelt gepflegt und bei Migrationen mühselig von Hand zusammengeklickt werden, da die meisten Mailclients über keine Import/Export-Funktionen für Filterregeln verfügen.

Server-basierte Regeln

Besser ist es daher, die Regeln gleich auf dem Mailserver zu speichern und zentral zu verwalten. Proprietäre Groupwaresysteme wie Exchange oder Scalix bieten das schon länger, bei ihnen administriert der Benutzer die Regeln vom Mailclient oder vom Webfrontend aus.

Allerdings verwenden die kommerziellen Systeme proprietäre Lösungen für das Speichern der Regeln. Im besten Fall übernimmt bei einem Upgrade die neue Version die alten Regeln, aber bei einer Migration auf eine andere Groupware vergeht auch bei diesen Lösungen einige Zeit, bevor alle Filterregeln im neuen System eingetragen sind. Allein die Regeln auf dem Server zu speichern ist offenbar nur der halbe Weg.

Abhilfe schafft erst der offene und per RFC definierte Standard für die Server-seitige Filterung von E-Mail namens Sieve [1]. Frühe Versionen dieser Filtersprache wurden seit 1994 diskutiert, 1999 veröffentlichte die Carnegie Mellon University die Sieve-Implementation, die der Cyrus-POP/IMAP-Server als erster übernahm. Bereits im Jahre 2001 spezifizierte RFC 3028 dann "Sieve - A Mail Filtering Language" [2]. Die einheitliche Sprache für Filterregeln umfasst automatische Weiterleitung, Abwesenheitsnotizen und Sortieren von Nachrichten sowie zahlreiche Erweiterungen.

Cyrus IMAP und Sieve

Der in vielen Groupwaresystemen integrierte Cyrus-IMAP-Server bietet neben POP und IMAP auch den Dienst »timsieved« für die Remote-Administration von Filterregeln über das Managesieve-Protokoll [3]. Timsieved kommuniziert über das Local Mail Transfer Protocol (LMTP, [4]) mit den anderen Diensten von Cyrus und fungiert als Local Mail Delivery Agent, der die Mails nach den Sieve-Regeln in die Postfächer sortiert.

LMTP ist ein SMTP-ähnliches Protokoll für die lokale Kommunikation zwischen Mailservern und wurde speziell für Serverdienste entwickelt, die über keine eigene Warteschlange verfügen. Der Client kann dabei eine Nachricht nur übertragen, wenn der Server sie auch sofort vollständig zustellen kann.

Der Cyrus-Mailserver war lange der einzige Mailserver, der den Sieve-Standard unterstützte, erst kürzlich bekamen Citadel (Abbildung 1), Dovecot, DBMail, Exim und einige kommerzielle Mailserver entsprechende Erweiterungen. Da Cyrus bei zahlreichen Groupwareprojekten erste Wahl ist, unterstützen Hersteller wie Bynari, Zarafa, Openxchange und Kolab den freien Standard gerne und integrieren eigene Frontends für die Administration. Mit dem Openxchange Oxtender erstellt sogar Microsoft Outlook seine Filterregeln als Sieve-Skripte.


Abbildung 1: Viele Groupwareserver wie etwa Citadel unterstützen Sieve-Skripte und bieten umfangreiche Weboberflächen, mit denen die Benutzer Filterregeln anlegen und bearbeiten können.

Andere Hersteller wie Scalix setzen in ihrer Entwicklung auf den freien Standard und arbeiten daran, die eigenen, proprietären Systeme zu ersetzen. Den freien Mailservern Courier und UW-IMAP fehlt aber derzeit offensichtlich eine Sieve-Implementation.


Abbildung 2: Mit dem KIO-Slave für Sieve kann jedes KDE-Programm Sieve-Skripte direkt auf dem Server öffnen. Konqueror zeigt die Skripte dabei wie ein lokales Dateisystem an.

Wie das Sieben funktioniert

Auf einem POP- oder IMAP-Server definiert der Benutzer Filter, die der Server auf eingehende Mails anwendet. In einer Textdatei kombiniert er dazu Tests, Bedingungen und Aktionen zu Filterregeln. Diese Datei kommt in das Sieve-Verzeichnis des Users. Der Server wertet diese Skripte jedes Mal automatisch aus, wenn er eine neue Mail für den Benutzer entgegenimmt.

Die Anweisungen in der Skriptdatei wendet er auf jede eingehende Mail an, unabhängig davon, ob, wann oder mit welchem Client der Benutzer seine E-Mails abholt. Wenn ein Mailclient die Verbindung zum Server aufbaut, hat der Server die Mails bereits in die zugehörigen Ordner sortiert. Als angenehmer Nebeneffekt wird dadurch auch das Abholen von E-Mail deutlich beschleunigt und beansprucht weniger Rechenleistung auf dem Client und spart Bandbreite. Die etwas längere Bearbeitungszeit der E-Mail auf dem Server fällt dagegen in den meisten Umgebungen nicht ins Gewicht


Abbildung 3: Der KDE-Groupwareclient Kontact integriert einen einfachen Sieve-Editor, mit dem der Benutzer seine Skripte direkt auf dem Server editieren kann.

Sieve-Skripte erstellen

Der Benutzer kann sein Sieve-Skript auf mehrere Arten erstellen. Im einfachsten Falle verwendet er ein Webinterface wie Avelsieve (Abbildung 4), Smartsieve, Websieve (Abbildung 5) oder das Webfrontend seiner Groupwarelösung. Deren Webmailer bieten meist ein bequemes Interface zur Erstellung von Filterregeln, wie es etwa bei Citadel, Kolab, Bynari oder Openxchange der Fall ist.


Abbildung 4: Avelsieve, das Sieve-Plugin für Squirrelmail, unterstützt auch die Notify-Erweiterung, mit der sich Benutzer beispielsweise per SMS über den Eingang bestimmter E-Mails benachrichtigen lassen können..


Abbildung 5: Websieve ist das wohl verbreitetste Webfrontend für Sieve und bietet sowohl Filterregeln als auch Abwesenheits-Benachrichtigungen. Leider kann es im Basic-Modus nur eigene Sieve-Skripte bearbeiten.

In diesen Fällen klickt der Benutzer mit der Maus auf Einträge in Dropdown-Menüs und baut sich so seine Filter zusammen (Abbildung 1). Alternativ dazu schreibt er das Skript selbst in einem Editor auf dem Sieve-Server und aktiviert es anschließend mit einem Tool namens Sieveshell.

Als dritte und wohl angenehmste Möglichkeit erstellt er das Skript lokal auf seinem Client und lädt es danach auf den Server. Dabei helfen ihm E-Mail-Programme, die Sieve-Skripte bereits unterstützen, sowie ein eigener KIO-Slave unter KDE. Letzterer ist auch in Kmail eingebunden und ermöglicht das direkte Editieren der Filterregeln über einen Menü-Eintrag aus der KDE-PIM-Anwendung heraus.

Auch Mulberry, Squirrelmail und Emacs können (mit den passenden Erweiterungen) Sieve-Skripte editieren und speichern. Bei anderen Mailclients schaut es jedoch noch schlecht aus.

Syntax

Eine Sieve-Regel ist aus mehreren Teilen aufgebaut: Kontrollstrukturen wie Bedingungen, Matching Rules und Handlungsanweisungen. Die Regeln lassen sich, wie bei anderen Regelassistenten auch, als ganze Sätze formulieren: Wenn der Absender »mfeilner@linuxnewmedia.de« ist, dann verwerfe die Mail. Basierend auf RFC 3028 [7] unterstützen die Sieve-Implementationen mindestens die Aktionen »keep«, »discard«, »redirect«, fast immer auch die Erweiterungen »reject« und »fileinto« (Tabelle 1).

Tabelle 1:
Sieve-Aktionen

 

Name

Aktion

keep

Mail im Posteingang behalten,

discard

verwerfen,

redirect

umleiten,

reject

ablehnen,

fileinto

in Ordner einsortieren.

stop

Prüfung beenden.

Standardaktion ist »keep«. Wenn nichts anderes definiert ist, hinterlegt Timsieved die E-Mail im Posteingang des Benutzers. Mit »discard« löscht er die betreffende Nachricht und bei »redirect« leitet der Mailserver sie zu einer beliebigen anderen E-Mail-Adresse um. Die Anweisung »reject« veranlasst den Mailserver dazu, die Mail an den Absender zurückzuschicken. Mit »fileinto« wird die Nachricht in einen Mailboxordner einsortiert.

Damit Sieve die Aktionen sinnvoll anwendet, benötigt es Kontrollstrukturen und Bedingungen. Für Unterscheidungen zwischen Bedingungen dient das »if«-Kommando. Zusammen mit den Schlüsselwörtern »elseif« und »else« sind geschachtelte Blöcke von Anweisungen möglich, gruppiert durch geschweifte Klammern und Strichpunkte.

Das Kommando »stop« beendet die Verarbeitung der E-Mail. Wenn keine andere Aktion ausgeführt wurde, landet die Nachricht nach einem »stop« einfach im Eingangsordner des Benutzers. Ein einfaches Beispiel eines Anweisungsblocks in einem Sieve-Skript sieht so aus:

if header :contains "Subject" "SPAM"
{
   discard;
   stop;
}

Diese fünf Zeilen reichen aus, damit der Mailserver alle E-Mails, in deren Betreffzeile der Begriff »SPAM« auftritt, selbstständig löscht. Etwas genauer: Die Anweisung »if header :contains "Subject" "SPAM"« veranlasst den Server dazu, die Anweisung der folgenden Zeilen auf alle Mails anzuwenden, in deren E-Mail- Header mit der Bezeichnung »Subject« die Zeichenkette »SPAM« vorkommt. Im Gegensatz zu »:is« reicht es für die Matching Rule »:contains« aus, wenn die Zeichenkette an irgendeiner Stelle im Header vorkommt. Dagegen trifft »:is« nur zu, wenn der Header genau den darauf folgenden Inhalt hat.

Gruppieren von Tests

Mehrzeilige Anweisungen werden in geschweiften Klammern notiert, wobei jede Zeile mit einem Strichpunkt endet. Die Anweisung »discard« steht für das sofortige Löschen, »stop« beendet die Verarbeitung der Mail an dieser Stelle. Leerzeichen trennen die Parameter der Anweisungen voneinander. Runde Klammern rahmen mehrzeilige Aufzählungen innerhalb der If-Kontrollstrukturen durch Kommata separiert ein.

Am Ende der letzten Zeile einer Anweisung darf allerdings kein Komma mehr stehen. Neben einer langen Liste von möglichen Tests bieten die Schlüsselwörter »anyof« oder »allof« die Möglichkeit, andere Tests miteinander zu verknüpfen. Das folgende Skript löscht alle Mails, die entweder »SPAM« oder »VIRUS« in ihrer Betreffzeile enthalten, sofort:

if anyof (
   header :contains "Subject" "SPAM",
   header :contains "Subject" "VIRUS"
)
{
   discard;
   stop;
}

Wird hier »anyof« durch »allof« ersetzt, dann löscht der Server nur die Mails, deren Subject sowohl »SPAM« als auch »VIRUS« enthält, was einer logischen UND-Verknüpfung entspricht.

Mailscanner wie Amavis, Spamassassin und Clam AV fügen den Betreffzeilen der als Spam- oder Viren-verseucht erkannten E-Mails unter anderem diese Schlüsselwörter hinzu.

Mails automatisch sortieren

Mit der oben beschriebenen Sieve-Regel könnten Spam- und Viren-Mails automatisch gelöscht werden. Das ist allerdings in vielen Fällen rechtlich fragwürdig, deshalb ist es besser, Spam und Viren in gesonderte Ordner zu verschieben. Dafür benötigt Sieve die Erweiterung »fileinto«. Sie ist im Standardumfang des Cyrus-Mailservers enthalten. Wenn sie geladen ist, kann Sieve eine E-Mail mit der Anweisung »fileinto« in einen Ordner einsortieren.

Analog zu Include-Direktiven anderer Skriptsprachen lädt das Kommando »require« in den ersten Zeilen eines Sieve-Skripts Erweiterungen hinzu. Das Skript im folgenden Beispiel filtert dementsprechend nicht mehr nach der Betreffzeile, sondern wertet verschiedene Header der E-Mail aus:

require "fileinto";
if allof (
   header :is "X-Spam-Flag" "YES",
   header :contains ["To", "Cc", "Bcc"] "mfeilner@linux-magazin.de"
)
{
   fileinto "INBOX.Spam";
   stop;
}

Ein von Spamassassin hinzugefügter Header ist »X-Spam-Flag«. In ihm steht »YES«, wenn die Mail als Spam erkannt wurde, »NO«, wenn die Mail wahrscheinlich kein Spam war. Das Beispiel filtert außerdem nach der Empfängeradresse in den Feldern »To:«, »Cc:« und »Bcc:«. Eckige Klammern begrenzen dabei die durch Kommata getrennte Liste der Header. Alle E-Mails, die in den Feldern »To«, »Cc« oder »Bcc« die Adresse »mfeilner@linux-magazin.de« enthalten und bei denen die Zeichenkette »YES« im Header »X-Spam-Flag« vorkommt, werden mit dieser Regel automatisch in den IMAP-Ordner »INBOX.Spam« einsortiert. Im Namespace des Cyrus-Mailservers entspricht dies dem Ordner »Spam« im Posteingang.

Matching Rules

Im X-Spam-Header steht nur »YES« oder »NO«, während in jenen Feldern, in denen eine E-Mail-Adresse steht, der Mailclient des Absenders auch zum Beispiel »Markus Feilner <mfeilner@linux-magazin.de>« oder einen anderen Namen eintragen kann. Folglich ist hier einmal die Matching-Regel »:is« und einmal das Target »:contains« aktiv.

Sieve kennt drei Typen von Matching-Regeln (Tabelle 2), nämlich Absolute, Substring und Wildcard Match: »:is«, »:contains« und »:matches«. Der absolute Match trifft immer dann zu, wenn das angegebene Muster genau dem Inhalt des Headers entspricht. Der Substring Match trifft zu, wenn der Header das Muster an einer beliebigen Stelle enthält. Als Platzhalter dienen dem Wildcard Match »:matches« die Zeichen »*« und »?« analog zur Bash.

Tabelle 2: Tests und
Matches

 

Schlüsselwort

Funktion

Matching Rules

:is

Absoluter Match, ein Header muss nur genau dieses Muster
enthalten

:contains

Substring Match, im Header stehen neben dem Muster andere
Zeichen

:matches

Wildcard Match, Platzhalter wie »*« und
»?« sind erlaubt

Schlüsselwörter für Tests

anyof

Wenn eines der folgenden Kriterien zutrifft (OR)

allof

Wenn alle der folgenden Kriterien zutreffen (AND)

header

Wenn das folgende Kriterium auf den Header zutrifft

size

Wenn das folgende Kriterium auf die Größe der E-Mail
zutrifft

exists

Wenn das folgende Kriterium existiert (zum Beispiel ein
Header)

not

Umkehrung

address

Wenn die folgende Adresse in einem der Adressfelder der Header
vorkommt

envelope

Wenn der spezifizierte Teil des SMTP-Envelope
übereinstimmt

Neben den Tests auf den Inhalt von Headern wie in den Beispielen oben bietet Sieve weitere Möglichkeiten. Es testet auf Wunsch auch auf Inhalt oder Vorhandensein von Headern, Größe der E-Mail, Vorkommen von Adressen und auf Teile des SMTP-Envelope einer E-Mail und gestattet beliebige Verknüpfungen dieser Tests. Der Test »if address :is :all "from" "mfeilner@linux-magazin.de"« prüft alle Header, in denen Adressen erlaubt sind, ob diese exakt »mfeilner@linux-magazin.de« lauten, und führt die danach angegebene Aktion aus, wenn die Adresse in einem der Header steht. Dagegen testet das Sieve-Skript

if size :over 10M {
   fileinto "INBOX.BIG";
}

die Größe einer E-Mail und sortiert alle E-Mails über 10 MByte in den Ordner »BIG«. Die Anweisung »:over« trifft alle E-Mails über einem einstellbaren Schwellenwert, während »:under« auf alle Nachrichten zutrifft, die kleiner sind als die folgende Größenangabe. K, M und G stehen hier für Kilobyte, Megabyte oder Gigabyte. Durch geschicktes Kombinieren der Kriterien ist so eine genaue Filterung der E-Mails zu erreichen, bevor Sieve aufwändige Tests am Message-Body vornimmt. Das Skript

if allof (
   size :over 1M,
   size :under 2M
)
{
   fileinto "INBOX.MEDIUM";
}

sortiert E-Mails einer bestimmten Größe, hier zwischen 1 und 2 MByte, in den Ordner »MEDIUM«.

Mit Telnet kann der Benutzer an der Befehlszeile eine Verbindung zu einem Sieve-Server aufbauen und erhält neben Informationen über den Server auch die Liste der installierten Erweiterungen (Listing 1). In diesem Beispiel handelt es sich um einen Ubuntu-Server mit Cyrus und Timsieved, der zwölf Erweiterungen unterstützt und das Sieve-Protokoll mit TLS verschlüsseln kann. Die genauen Abläufe dieses Protokolls sind in der Managesieve-Draft [3] beschrieben.

Listing 1: Telnet-Sitzung mit
Sieve

01 mfeilner@abulafia:~> telnet 192.168.0.1 sieve
02 Trying 192.168.0.1...
03 Connected to sieveserver...
04 Escape character is '^]'.
05 "IMPLEMENTATION" "Cyrus timsieved v2.2.12-Debian-2.2.12-4ubuntu1"
06 "SASL" "PLAIN LOGIN"
07 "SIEVE" "fileinto reject envelope vacation imapflags notify subaddress relational comparator-i;ascii-numeric regex"
08 "STARTTLS"
09 OK
10 Logout
11 Connection closed by foreign host.
12 mfeilner@abulafia:~>

Erweiterungen für Sieve

Es gibt zahlreiche Erweiterungen für Sieve (Tabelle 3), nur wenige davon sind allerdings standardisiert. Die beste Dokumentation zu den Erweiterungen bieten die Drafts an, die auf den Seiten der IETF [5] hinterlegt sind. Über die Suchmaschine finden sich die entsprechenden Dokumente.

Tabelle 3:
Sieve-Erweiterungen

 

Sieve-Erweiterung

Funktion

fileinto

Mail in einen Ordner einordnen

reject

Nachricht zurückweisen

envelope

SMTP-Envelope prüfen

comparator-i;ascii-numeric

Vergleichsoperator, der auf das Vorkommen von Zahlen am Anfang
eines Strings testet

vacation

Abwesenheits-Benachrichtigung senden

imapflags

Verändern der IMAP-Flags auf einem Server

notify

Versenden von Benachrichtigungen beim E-Mail-Eingang

subaddress

Unterstützung von Subadressen (RFC 3598)

relational

Größer/kleiner-Vergleiche von Feldern im Header

regex

Reguläre Ausdrücke

spamtest virustest

Spam- und Virentest (RFC 3685)

copying

Einfaches Kopieren (RFC 3894)

variables

Variablen in Sieve-Skripten verwenden

body

Den Body einer Mail durchsuchen

edit header

Beliebige Header einer Mail verändern

mime

Tests und Veränderung von Mime-Parts

Die Sieve-Erweiterung Vacation erlaubt gezielte Abwesenheits-Benachrichtigungen, Listing 2 zeigt die passende Syntax. Die Anweisung »require« bindet die Erweiterung »vacation« ein. Die Anweisung in Zeile 2 bewirkt, dass der Server für jede Mail an die Adresse »mfeilner@linuxnewmedia.de« eine Abwesenheitsnachricht sendet.

Listing 2:
Abwesenheits-Benachrichtigungen

01 require "vacation";
02 vacation :days 5 :addresses "mfeilner@linuxnewmedia.de" :subject "Out Of Office Reply"
03 "Vielen Dank für Ihre E-Mail,
04 ich bin diese Woche ausser Haus
05 und werde Ihre Nachricht nächste
06 Woche beantworten.
07 In dringenden Fällen steht Ihnen..."

Im Betreff der Nachricht steht »Out Of Office Reply«, im Body der Benachrichtigung der Text ab der dritten Zeile des Listings. Ein interessantes Detail ist der Parameter »:days 5«: Selbst wenn ein Absender mehrere E-Mails sendet, erhält er nur alle fünf Tage eine Abwesenheits-Benachrichtigung. Standardwert ist hier »7«. Die Sieve-Anweisung: »redirect "mysecret@example.com"« leitet alle E-Mails, die mit dieser Aktion verknüpft sind, an die Adresse »mysecret@example.com« weiter.

Sieve und Cyrus einrichten

Auf allen Distributionen ist Sieve in Gestalt von Timsieved im Cyrus-Paket enthalten. Ist Cyrus aus den RPM- oder Debian-Paketen installiert, dann finden sich die Konfigurationsdateien in »/etc/cyrus.conf« (Listing 3) und »/etc/imapd.conf« (Einstellungen siehe Tabelle 4).

Listing 3: Auszug aus
»cyrus.conf«

01 # useful if you need to give users remote access to sieve
02 # by default, we limit this to localhost in Debian
03 sieve   cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=100

Tabelle 4:
Einstellungen in »imapd.conf«

 

Parameter

Funktion

rfc3028_strict: 1

RFC 3028 wird streng ausgelegt, nur die Header, die per
Definition Adressen enthalten, werden bei den entsprechenden
Matching Rules getestet

sendmail: /usr/lib/sendmail

Pfad zu Sendmail, das Sieve verwendet, um
Abwesenheitsnachrichten und Rejection Mails zu versenden

sieve_maxSkriptsize: 32

Maximale Größe in KBytes für Sieve-Skripte

sieve_maxSkripts: 5

Maximale Anzahl an Skripten pro User

sievedir: /usr/sieve

Verzeichnis für Sieve-Skripte

sievenotifier: <none>

Benachrichtigungsmethoden für die Notify-Erweiterung von
Sieve

sieveusehomedir: 0

Ob Sieve-Skripte in ~/home/.sieve abgelegt werden sollen

Hinzu kommt noch eine Datei für die PAM-Konfiguration in »/etc/pam.d« für vom Standard abweichende Authentifizierungsmethoden. Normalerweise verwendet Timsieved dieselbe Konfiguration wie Cyrus, in der Regel SASL über TLS. Der Timsieved-Daemon läuft auf dem für Sieve vorgesehenen Port 2000. Meist ist dieser Port auch in der Datei »/etc/services« dem Protokoll »sieve« zugeordnet. In »/etc/cyrus.conf« stehen Parameter wie IP und Port, auf denen Timsieved lauscht (Listing 3).

Die Sieve-Erweiterung »notify« verwendet den Cyrus-Notification-Server »notifyd«, um Benutzern Benachrichtigungen über den Eingang von E-Mails zuzustellen. Er kommuniziert mit Sieve über den Socket »/var/run/cyrus/socket/notify« und wird ebenfalls über die Datei »/etc/cyrus.conf« konfiguriert. Details dazu bietet seine Manpage.

Da die »cyrus.conf« die einzige Möglichkeit für Einstellungen ist, die die Sicherheit des Sieve-Daemon betreffen, sollte sich der Administrator sehr genau überlegen, ob er Sieve auch für andere Rechner erreichbar macht oder nur auf Anfragen vom Localhost lauschen lässt. SASL über TLS gilt zwar als sicher, trotzdem sollte Sieve nur in vertrauenswürdigen Netzen erreichbar oder durch passende Firewallregeln eingeschränkt sein.

Mehr Parameter bietet die Datei »/etc/imapd.conf« (Tabelle 4). Sehr interessant ist hier die Option, abweichend vom Standard die Sieve-Skripte nicht in »/var/spool/sieve/[a-z]/$USERNAME« zu hinterlegen, sondern im Homeverzeichnis der User. Die maximale Größe und Anzahl der Sieve-Skripte, die einem Benutzer gestattet sind, wird hier ebenfalls festgelegt.

Sieveshell

Lokal mit einem Editor erstellte Sieve-Skripte lädt der Benutzer mit einem FTP-ähnlichen Programm namens »sieveshell« auf den Server. Sieveshell verwendet Managesieve, um die Skripte zu Timsieved zu übertragen und zu aktivieren. Jeder Benutzer kann mehrere Sieve-Skripte auf dem Server halten, aber immer nur eines ist aktiv.

Wie Listing 4 zeigt, kennt Sieveshell analog zu FTP die Kommandos »put«, »get« und »list«. Nach dem Upload mit »put« aktiviert »activate« ein Skript.

Listing 4: Sitzung mit
Sieveshell

01 mfeilner:~$ sieveshell localhost
02 connecting to localhost
03 Please enter your password:
04 > help
05 Usage:
06   sieveshell [-u username] [-a authname] [-r realm] <server>
07 
08 help             - this screen
09 list             - list scripts on server
10 put <filename> [<target name>]
11                  - upload script to server
12 get <name> [<filename>]
13                  - get script. if no filename display to stdout
14 delete <name>    - delete script.
15 activate <name>  - set a script as the active script
16 deactivate       - deactivate all scripts
17 quit             - quit
18 >

Konqueror, Kontact und der KIO-Slave

Unter KDE bietet ein Hilfsprogramm für Sieve, ein KIO-Slave, eine angenehme Möglichkeit, Sieve-Skripte zu editieren und auf den Server zu laden. Nach der Eingabe von »sieve://Servername« in die Adresszeile von Konqueror zeigt dieser eine Liste der Sieve-Skripte auf dem Server an (Abbildung 2).

Jeder KDE-Editor kann diese direkt bearbeiten und speichern, Kate und Kwrite haben sogar Syntax-Highlighting für Sieve an Bord. Beim Speichern des Skripts überträgt der KIO-Slave es sofort auf den Server, führt einen Syntaxcheck durch und aktiviert es. Diese Methode ist für Einsteiger, die Sieve erst kennen lernen wollen, sicherlich die angenehmste Methode, da jeder Fehler sofort angezeigt wird.

Auch die KDE-PIM-Suite Kontact bietet im Hauptmenü unter »Einstellungen | Sieve-Skripte verwalten« einen minimalistischen Editor für Sieve-Skripte (Abbildung 3). Wenn in den Einstellungen des Kontos Sieve-Skripte aktiviert sind, zeigt Kontact automatisch alle bekannten Skripte an und bietet einen kleinen Editor. Der beherrscht zwar kein Syntax-Highlighting, der KIO-Slave im Hintergrund führt aber trotzdem beim Upload einen Syntaxcheck durch.

Webclients

Für den beliebten Webmailer Squirrelmail steht das Plugin Avelsieve in Version 1.9.7 zur Verfügung. Wie Abbildung 4 zeigt, bietet das Webinterface alle grundlegenden Funktionen für Filter und Aktionen. Avelsieve sticht unter den zahlreichen Frontends für Sieve hervor, da es auch Erweiterungen wie Notify und Copy unterstützt.

Bei allen Web-basierten Sieve-Frontends hängt es stark von der eingesetzten Version ab, ob die Skripte kompatibel zu anderen Sieve-Programmen sind. In der Regel verstehen die Programme nur ihre eigene Syntax und überschreiben beim Speichern Änderungen von anderen Programmen. Dazu kommt, dass die meisten Programme in Kommentaren Tags hinzufügen, die nur sie selbst interpretieren können. Ein verbreitetes Beispiel hierfür ist Websieve (Abbildung 5), das die Regeln nummeriert und Prioritäten vergibt. Gut, dass Websieve über einen Advanced Mode verfügt, der es dem Benutzer gestattet, die Regeln direkt zu editieren. Sowohl Websive als auch Avelsieve bieten außerdem einfache Möglichkeiten, um Abwesenheits-Benachrichtigungen einzurichten.

Die Installation der Webfrontends gestaltet sich einfach: Sowohl Websieve als auch Avelsieve benötigen nur einen Cyrus-IMAP-Server, Apache und PHP. Unter Debian gibt es Pakete, aber es genügt auch, die »tar.gz«-Dateien im Document Root des Webservers zu entpacken. Eventuell ist noch eine Konfigurationsdatei anzupassen, bei Squirrelmail ruft der Administrator das Setup-Tool »config.pl« an einer Befehlszeile auf und aktiviert Avelsieve.

Die Möglichkeit für derartige Programme entstand erst dadurch, dass die freie Entwicklergemeinde Managesieve-Bibliotheken wie Phpsieve oder Managesieve.pm in Perl oder PHP integrierte. Ähnliche Libraries gibt es auch für Ruby oder Python, sodass eine reichhaltige Palette an Browser-basierten Sieve-Frontends zur Verfügung steht.

Benutzer von Cyrus IMAP kennen und schätzen die flexiblen Sieve-Skripte schon lange. Mehr und mehr Groupwarelösungen integrieren Sieve, die Web-basierten Oberflächen sind ausgereift und stabil. Weil die anderen großen IMAP-Server wie Courier und UW-IMAP sowie die meisten Clients Sieve noch nicht beherrschen, hält sich seine Verbreitung aber immer noch in Grenzen. Trotzdem geben immer mehr Benutzer ihre Abwesenheits-Benachrichtigung über Webfrontends wie Websieve ein.

Feines Sieb

Die größte Schwäche der Sieve-Frontends ist derzeit, dass verbreitete Tools fremde Skripte nicht laden können und Änderungen anderer Programme überschreiben. Den ganzen Funktionsumfang erhält nur, wer die Skripte in einem Editor erstellt, am besten mit Syntax-Highlighting und automatischer Aktivierung wie unter KDE. Zusammen mit der wachsenden Familie an Erweiterungen bleibt dann fast kein Wunsch offen. Sieve ist die einzige in einer RFC spezifizierte Mailfilter-Sprache, sie ist portabel und funktioniert zuverlässig.

Infos

[1] Sieve: [http://sieve.info]

[2] RFC 3028, "Sieve: A Mail Filtering Language": [http://tools.ietf.org/html/rfc3028]

[3] Managesieve Draft: [http://www.ietf.org/internet-drafts/draft-martin-managesieve-07.txt]

[4] RFC 2033, "Local Mail Transfer Protocol": [http://www.ietf.org/rfc/rfc2033.txt]

[5] IETF: [http://www.ietf.org]

[6] Sieve-Beispiele von Marcel Holtmann: [http://www.holtmann.org/email/sieve/]

[7] Avelsieve: [http://email.uoa.gr/projects/squirrelmail/avelsieve.php]

[8] Websieve: [http://sourceforge.net/projects/websieve]

[9] Sieve-Support für Emacs: [http://josefsson.org/sieve/]

[10] Sieve-Support für Mulberry: [http://www.bath.ac.uk/bucs/email/sieve/mulberry-sieve.shtml]

[11] Sieve Extension Support Matrix: [http://wiki.fastmail.fm/wiki/index.php/SieveExtensionsSupportMatrix]


Impressum |Datenschutzerklärung  | Mediadaten  | © 2010Linux New Media AG
Linux New Media Websites
Deutschland: [Admin-Magazin] [LinuxUser] [EasyLinux] [Linux-Community] [Linux Technical Review] [Ubuntu User]
Europa: [EasyLinux Polen] [Linux Magazine Polen] [Linux Magazine Spanien]
International: [Linux Magazine International] [Linux Pro Magazine] [Admin Magazine] [Ubuntu User] [Linux Magazine Brasilien] [EasyLinux Brasilien]