Mailserver mit Spamfilter

Seite 6: Lernen lassen

Inhaltsverzeichnis

Die Spam-Erkennungsleistung eines Bayes-Filters ist nur so gut, wie die Daten, mit denen er gefüttert wird. Um SpamAssassin beizubringen, was gute Mails sind (Ham) und was schlechte, verwenden Sie das mitgelieferte Kommandozeilenwerkzeug sa-learn.

Hat der Nutzer ola schon fleißig Spam-Mails beispielsweise im IMAP-Ordner "SPAM" gesammelt, kopieren Sie diese als root zunächst in das gegebenenfalls neu anzulegende Verzeichnis /tmp/spam:

cp /var/spool/imap/user/ola/SPAM/[0-9]*\. /tmp/spam

Hier offenbart sich, wie der Cyrus-IMAP-Server Mails auf der Platte ablegt: Als Stammverzeichnis ist bei OpenSuse 10.1 das Verzeichnis /var/spool/imap vorgegeben, die Mailbox eines Anwenders liegt in einem nach dessen Login-Kennung benannten Unterverzeichnis von /var/spool/imap/user. Sämtliche Mails lagern darin in Dateien, die mit einer Zahl beginnen und auf einen Punkt enden.

Ein anschließendes

chown mail /tmp/spam
sudo -u mail -H sa-learn --spam --showdots --dir tmp/spam

führt dazu, dass der Bayes-Algorithmus die typischen Wortmuster aller in dem Ordner enthaltener Mails lernt. sa-learn ist unter der Kennung mail auszuführen, weil der spampd-Prozess ebenfalls als mail läuft und die von spampd verwendete SpamAssassin-Bibliothek die Datenbank für den Bayes-Filter sets im Heimverzeichnis des Users erwartet, unter dessen Kennung auf die Bibliothek zugegriffen wird.

Erfahrungsgemäß benötigt der Lernmechanismus sehr viele Mails, um die Treffergenauigkeit merklich zu verbessern: 10.000 und mehr Spam-Botschaften dürfen es gerne sein. Wer so viel postalischen Schund nicht in seinen eigenen Ordnern findet, greift alternativ auf ein öffentliches Archiv wie www.spamarchive.org zurück. Speichert man die dort zu findenden gezippten Mailbox-Dateien im Verzeichnis /tmp/spam ab, lassen sie sich in einem Rutsch entpacken und in sa-learn einspeisen. Das erledigt ein in /root/bin angelegtes Shell-Skript namens "learn.sh" mit folgendem Inhalt, das Sie mit chmod a+x als ausführbar kennzeichnen:

#!/bin/sh
for f in `ls /tmp/spam/*.gz`; do
echo Lernen der Spam-Mails aus Datei $f ...
gzip -cd $f | sa-learn --spam --showdots --mbox;
done

Um den Lernvorgang in Gang zu setzen – der je nach Rechenleistung durchaus ein paar Tage dauern kann und nicht unterbrochen werden sollte –, starten Sie das Skript als root mit folgendem Kommandozeilenbefehl:

screen sudo -u mail -H /root/bin/learn.sh

Auf Strg+A/Strg+D verlassen Sie die Screen-Konsole, ohne dass das Skript beendet wird. Mit screen -r zeigen Sie alle laufenden Screens an, mit screen -r 7651.pts-4.homeserver klinken Sie sich wieder in einen verlassenen Screen ein (hier der Screen mit der Kennung 7651.pts-4.homeserver). man screen führt in die Benutzung dieses Utility ein.

Wichtig ist darüber hinaus, dem Bayes-Filter mitzuteilen, wie erwünschte Mails aussehen (Ham). Dazu ersetzt man den sa-learn-Parameter --spam einfach durch --ham und lässt das Lern-Werkzeug nach dem eben beschriebenen Verfahren auf Mails mit erwünschtem Inhalt los.

Die Spam-Marker in den Mails lassen sich bequem mit Hilfe eines Sieve-Regelwerks auswerten. Die folgende Regel nimmt an, dass Mails mit einem Spam-Level von zehn aufwärts zu 100 Prozent unerwünscht sind und verwirft sie:

if header :contains "X-Spam-Level" "**********" {
discard;
}

Mails mit einem Spam-Level von fünf oder größer werden sicherheitshalber im Ordner SPAM des jeweiligen Nutzers gespeichert:

elsif header :contains "X-Spam-Level" "*****" {
fileinto "INBOX.SPAM";
}

Und ein Spam-Level von drei oder vier soll Sieve veranlassen, die betreffenden Mails im Ordner Junk abzulegen – den Sie sich etwas genauer als den SPAM-Ordner anschauen sollten, bevor Sie alle darin enthaltenen Mails mit einem Tastendruck löschen:

elsif header :contains "X-Spam-Level" "***" {
fileinto "INBOX.Junk";
}

Anschließend schiebt man das überarbeitete Regelwerk wieder mit put auf den Server. So gerüstet, braucht man seinen Lieblings-Mail-Client nur noch auf einen einzigen Server einzustellen: seinen Homeserver. Ob Thunderbird, Outlook oder Pine – Hauptsache, der Client ist IMAP-tauglich [11]. (ola)

[1] Tim Showalter, Sieve: A Mail Filtering Language (RFC 3028), www.ietf.org/rfc/rfc3028.txt

[2] Suse-Spiegelserver: http://www.novell.com/products/linuxprofessional/downloads/ftp/ int_mirrors.html

[3] Dušan Živadinovic, Universalfernbedienung, Linux, Mac OS X und Windows per VNC fernsteuern, c't 10/05, S. 106

[4] Postfix Address Rewriting: www.postfix.org/ADDRESS_REWRITING_README.html

[5] RFC 1939: Post Office Protocol – Version 3, www.ietf.org/rfc/rfc1939.txt

[6] RFC 3501: Internet Message Access Protocol Version 4 rev. 1, www.ietf.org/rfc/rfc3501.txt

[7] RFC 2821: Simple Mail Transfer Protocol, www.ietf.org/rfc/rfc2821.txt

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

[9] Homepage des Cyrus IMAP Server an der Carnegie Mellon University: http://asg.web.cmu.edu/cyrus/imapd/

[10] RFC 2222, Simple Authentication and Security Layer (SASL), www.ietf.org/rfc/rfc2222.txt

[11] Jo Bager, Holger Bleich, Urs Mansmann, Fliegende Boten, E-Mail-Clients für Windows, Mac OS und Linux, c't 2/05, S. 156

[12] ftp://ftp.heise.de/pub/ct/spezial/susemail.tgz

[13] Razor, http://razor.sourceforge.net

[14] Sören Gerlach, Saubere E-Mail, Mail-Gateway gegen Viren und Spam, c't 1/04, S. 176

MDA: Ein Mail Delivery Agent nimmt via LMTP oder SMTP Mails von einem MTA oder MUA an, um sie lokalen Benutzern zuzustellen.

MTA: Als Mail Transfer Agent bezeichnet man alle Server, die für den Weitertransport von Mails zuständig sind. MTAs sprechen SMTP.

MUA: Mail User Agent ist der Oberbegriff für Mail-Clients wie Outlook,Thunderbird, Pine und so weiter.

IMAP4: Ähnlich POP3 handelt es sich beim Internet Message Access Protocol [6] um ein Protokoll, über das ein Client E-Mails von einem Server abruft. Im Unterschied zu POP3 bleiben die Mails auf dem Server liegen. Die E-Mails werden also zentral auf dem Server gespeichert und in Ordner einsortiert und nicht dezentral in den Clients.

POP3: Post Office Protocol, Version 3 [5]. Neben IMAP das wichtigste Protokoll, über das ein Client mit einem Mail-Server spricht, um E-Mails abzuholen. Typischerweise werden die Mails nach dem Abholen auf dem Server gelöscht. Der Verwaltung der E- Mails findet demnach dezentral auf den Mail-Clients statt.

LMTP: Mit Hilfe des mit SMTP verwandten Local Mail Transfer Protocol lassen sich Mails auch an MDS zustellen, die über keine Abarbeitungsschlange (Queue) verfügen [8].

SMTP: Simple Mail Transfer Protocol. Dieses Protokoll sprechen MUAs mit MTAs und die MTAs untereinander [7]. (akl)