Mailserver mit Spamfilter

Seite 4: Aussieben

Inhaltsverzeichnis

Doch wer soll die ganzen Mails dort einsortieren – der, der sich hat breitschlagen lassen, alle Mailing-Listen auf seinen Namen zu abonnieren? Was bei geringem Mail-Aufkommen vielleicht noch leicht von der Hand geht, wächst sich bei Anwendern, die sich in einem Dutzend oder mehr hochfrequenter Verteiler eingeschrieben haben, zu einer zeitraubenden Tätigkeit aus. Besser also, ein Automatismus schiebt die Mails auf der Grundlage eines einfach zu programmierenden Regelwerks ins gewünschte Fach. Einen solchen bringt das Cyrus-IMAPD-Paket gleich mit: Sieve. Wer sich etwa zu den regen eBay-Nutzern zählt, möchte vielleicht alle Mails von eBay in einen eigenen Ordner schieben. Folgende Regel veranlasst Sieve, jede eingehende Mail in den Ordner INBOX.eBay zu verschieben, wenn die From-Zeile im Mail-Header die Zeichenfolgen "ebay.de" oder "ebay.com" enthält (:contains) oder die In-Reply-To- beziehungsweise Message-ID-Zeile die Zeichenfolge "JavaMail.ebayapp":

require ["fileinto", "reject"];
if anyof (header :contains
"from" ["ebay.de", "ebay.com"],
header :contains
["In-Reply-To", "Message-ID"]
"JavaMail.ebayapp") {
fileinto "INBOX.eBay"; }

Alternativ soll Sieve prüfen, ob die Mail vom Zitat-des-Tages-Verteiler des Online-Dienstleisters zitate.at stammt. Das Schlüsselwort elsif zeigt an, dass Sieve die Regel immer genau dann anwenden soll, wenn die vorangegangenen nicht gegriffen haben. Das Schlüsselwort allof bezeichnet im Unterschied zu anyof aus dem Beispiel davor nicht eine Oder-, sondern eine Und-Verknüpfung der :contains-Regeln.

Nach folgender Regel muss der Mail-Header demnach eine From-Zeile enthalten, in der die Zeichenfolge "zitate.at" vorkommt und eine Betreffzeile mit "Zitat des Tages"; trifft das zu, legt Sieve die Mail im Ordner pub.Mailinglists.Zitate ab:

elsif allof (header :contains "from" "zitate.at",
header :contains "subject" "Zitat des Tages")
{
fileinto "pub.Mailinglists.Zitate";
}

Was keine Filterregel abgefangen hat, soll anschließend im Hauptpostfach des Users landen:

else { fileinto "INBOX"; }

Neben fileinto gibt es noch eine Reihe weiterer Aktionen, beispielsweise redirect, um eine Mail an eine andere Adresse weiterzuleiten, oder reject, um den Absender davon in Kenntnis zu setzen, dass man keine Mails von ihm in Empfang nimmt, etwa wenn sie eine Größe von 10 MByte überschreitet:

if size :over 10M { reject; }

Die Sieve-Syntax und sämtliche Schlüsselwörter erklärt [1], ein Beispielskript finden Sie unter [12]. Um Sieve die Regeln bekannt zu geben, bedient man sich des Kommandozeilenwerkzeugs sieveshell. Da der Sieve-Filtermechanismus beim Cyrus-IMAP-Server benutzerabhängig ist – jeder Benutzer soll ja seine eigenen Regeln einrichten dürfen und sich nicht auf das verlassen müssen, was ihm der Mail-Administrator vorgibt –, ruft man sieveshell immer als der Nutzer auf, unter dessen Kennung man sich auch beim IMAP-Server anmeldet:

sieveshell localhost

verbindet Sie mit dem lokalen Rechner. Läuft der IMAP-Daemon auf einem anderen Rechner, ersetzt man "localhost" durch dessen DNS-Namen oder IP-Adresse. Nach Eingabe des Cyrus-Passworts (das im Beispiel identisch ist mit dem Login-Passwort auf dem Mail-Server) wird man mit einem nüchternen Prompt begrüßt. Liegt das Regelwerk in der Datei "default", schiebt es ein

put default

auf den Mail-Server,

activate default

aktiviert das Regelskript. Mit Hilfe dieses Verfahrens lassen sich also mehrere Skripte auf den Server laden und fallweise aktivieren, etwa um sämtliche direkt an den User adressierten Mails während des Urlaubs mit einer vorgefertigten Abwesenheitsnachricht zu beantworten. Das Kommando list zeigt die Liste der hochgeladenen Skripte an, deactivate deaktiviert ein Regelskript, get lädt es herunter und delete löscht es. Die Syntax der Kommandos beschreibt die Manual-Page (man sieveshell).

Mails aller Art schickt Postfix durch den Virenscanner, bevor sie den Spam-Filter SpamAssassin durchlaufen, der deren Inhalt nach Spam-Wahrscheinlichkeit klassifiziert. Erst danach stellt Postfix sie dem Empfänger zu.

Per Sieve lassen sich auch Spam-Mails aussortieren. Damit Sieve Mails als Spam erkennt, muss man deren Header mit einer Markierung wie

X-Spam-Level: ******

versehen, die Auskunft über die Spam-Klassifizierung gibt: je mehr Sternchen, desto höher die Wahrscheinlichkeit, dass die Mail unerwünschtes Material enthält. Erfahrungsgemäß genügt ein Spam-Level von fünf und höher (also fünf Sternchen und mehr), um eine Mail mit Hilfe von Sieve als Spam zu ignorieren oder in einen Ordner der Wahl zu schieben.

Die Software zum Markieren der Mails heißt SpamAssassin. Bei dem sich automatisch in SpamAssassin einklinkenden Razor [13] handelt es sich um ein Werkzeug, das die Spam-Erkennung verbessert, indem es über die untersuchten Mails mehrere Prüfsummen bildet und diese mit denen auf einem zentralen Server vergleicht. Details zum Razor-Verfahren finden sich in [14].