Vielen von Euch ist es sicher schon aufgefallen: der SPAM, die unerwünschten Werbe-Emails, nehmen täglich zu - zur Zeit (9/04) bekomme ich allein etwa 100 SPAM Mails pro Tag, dazu kommen noch die Virenwarnungen...
Das kann man alles per Hand lesen - muß man aber nicht! Ein sehr mächtiges Tool zum Filtern von Mail sind das Gespann procmail / spamassassin, damit läßt sich das SPAM-Aufkommen drastisch (bis nahezu Null) reduzieren. Im folgenden wird die Verwendung dieser Tools beschrieben, aus rechtlichen Gründen muß dies jedoch leider jeder User selber für sich einrichten oder mich explizit um die Einrichtung bitten (§206, Abs. 2, Nr. 2 StGB, Freiheitsstrafe bis zu 5 Jahre, und die tatsächliche Wertung durch die Gerichte ist noch völlig offen).
Zuallererst gilt es, eine gültige Konfigurationsdatei für den Spamassassin anzulegen. Das kann man per Hand machen (indem man in einem Editor die Datei ~/.spamassassin/user_prefs erzeugt) - muß man aber nicht. Unter anderem unter http://www.pipegrep.net/webuserprefs/demo.php und http://www.yrex.com/spam/spamconfig.php finden sich zwei Dienste, die es erlauben, über eine einfach zu bedienende Oberfläche die Datei user_prefs zu erzeugen. Wichtig sind hier vor allem:
Sobald das Verzeichnis ~/.spamassassin/ angelegt ist und die Datei ~/.spamassassin/user_prefs dort existiert geht es daran, Spamassassin zu trainieren. Je sorgfältiger dies erfolgt, umso besser funktioniert Spamassassin, und umso weniger Mail wird versehentlich als SPAM klassifiziert. Ich gehe im folgenden davon aus, daß alle Mails in einzelnen Dateien im sogenannten mbox-Format im Verzeichnis ~/Mail/ liegen. Eventuell gesammelte SPAM-Mails (die man jetzt sehr gut zum trainieren verwenden kann) liegen gegebenenfalls in einer Datei ~/Mail/spam. Dies ist z.B. das typische Setup, wenn Standard Unix-Programme wie elm, pine oder mutt als Mailer verwendet werden. Man kann dann wie folgt trainieren:
# SpamAssassin ist ein Perl-Programm
kogs1>/home/utcke%
module add perl
# wechsle ins Home-Verzeichnis
kogs1>/home/utcke%
cd
# Lege das Verzeichnis an...
kogs1>/home/utcke%
mkdir ~/.spamassassin
# ...und erzeuge die Datei user_prefs
kogs1>/home/utcke%
cp ~utcke/.spamassassin/user_prefs ~/.spamassassin/user_prefs
# trainiere erwünschte Mails (HAM)
kogs1>/home/utcke%
foreach file (`ls ~/Mail/* | grep -v spam`)
foreach?
sa-learn --showdots --ham --mbox $file
foreach?
end
# trainiere unerwünschte Mails (SPAM)
kogs1>/home/utcke%
foreach file (~/Mail/*spam*)
foreach?
sa-learn --showdots --spam --mbox $file
foreach?
end
Wer Mozilla als Mailer verwendet, findet seine Mails entsprechend statt in ~/Mail in .mozilla/$USER/*/Mail/, Netscape-User finden ihre Mails in ~/nsmail. Wer nicht weiß, wo sein Mailer die Mails ablegt (oder in welchem Format) kann mir gerne mailen, wir gehen dann gemeinsam auf Entdeckungsreise...
Bei Razor handelt es sich um einen sogenannten Network Checksum Tests, d.h. hier wird eine (fuzzy) Prüfsumme der empfangenen Mail mit einer Datenbasis von Mails verglichen, von denen bekannt ist, das es sich um Spam handelt - zur Zeit eine sehr zuverlässige Methode, Spam zu erkennen. Um Razor verwenden zu können, muß man es jedoch erst einmal initialisieren:
# Razor ist ein Perl-Programm
kogs1>/home/utcke%
module add perl
# create a default config file ~/.razor
kogs1>/home/utcke%
razor-admin -create
# Razor basiert auf einem Netzt des Vertrauens
# deshalb sollte man sich dort registrieren
kogs1>/home/utcke%
razor-admin -register -user=$USER@kogs.informatik.uni-hamburg.de
Die Registrierung ist notwendig, da Razor auf einem Netzwerk des Vertrauens aufbaut - um sich aber Vertrauen erwerben zu können, ist eben auch eine eindeutige Identifikation nötig.
Bei procmail handelt es sich um das Programm, welches die Mail letztendlich zustellt. Per default landet die Mail in /var/mail/$USER, man kann jedoch die Zustellung durch diverse Regeln beeinflussen. Alle diese Regeln werden in der Datei ~/.procmailrc gesammelt. Ein nahezu minimales ~/.procmailrc könnte wie folgt aussehen:
# Das Verzeichnis, in dem Mail aufbewart wird - der Pfad unten ist der
# default für alle traditionellen Unix-Programme. Dort werden die
# verdächtigen Mails gesammelt, und ebenso die Log-Datei.
MAILDIR = $HOME/Mail
# Die Log-Datei - wichtig, um zu überprüfen, wohin vermisste Mail
# verschwunden ist...
LOGFILE = $MAILDIR/.procmail.log
# Zum automatischen Löschen von Virenwarnungen unseres Virenscanners die
# Kommentar- und Leerzeichen am Anfang der folgenden Zeilen entfernen
#
# :0
# * ^From postmaster@rzdspc1.informatik.uni-hamburg.de
# * ^Subject: VIRUS IN MAIL FOR YOU
# /dev/null
# SpamAssassin sample procmailrc
#
# Pipe the mail through spamassassin.
# The condition line ensures that only messages smaller than 250 kB
# (250 * 1024 = 256000 bytes) are processed by SpamAssassin. Most spam
# isn't bigger than a few k and working with big messages can bring
# SpamAssassin to its knees.
# Lokale Anpassung: Nur Mails, die über eines unserer Mail-Gateways
# (rzdspc1.informatik.uni-hamburg.de or rzaixsrv2.rrz.uni-hamburg.de)
# gelaufen sind, werden geprüft, nicht aber lokal zugestellte Mails
# f: Consider the pipe as a filter
# w: Wait for the filter/program to finish and check its exitcode
:0fw: spamassassin.lock
* ^Received: from (rzdspc1.informatik.uni-hamburg.de|rzaixsrv2.rrz.uni-hamburg.de)
* ≤ 256000
| /software/perl-5.6.1/SunOS-5.6/bin/spamassassin
# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "spamassassin.new".
:0:
* ^X-Spam-Status: Yes
$MAILDIR/spamassassin.new
Eine online-Version findet sich hier.
Einige User verwenden ein .forward-File, um zum Beispiel Ihre Mail auf einen anderen Account umzulenken oder aber automatisch eine Abwesenheitsbenachrichtigung versenden zu lassen. Sobald ein .procmailrc-File existiert, wird jedoch das .forward-File ignoriert. Es ist deshalb notwendig, das .procmailrc entsprechend anzupassen. Wie das geht, ist hier für die beiden häufigsten Fälle beschrieben:
# Leite alle Mails in Kopie an eine andere Adresse weiter (d.h. eine
# Kopie verbleibt hier). Sollen Lokal keine Mails aufbewahrt werden,
# ist das "c" in der nächsten Zeile zu löschen:
:0 c
! user@andere.adresse.de
# Benutze das Programm vacation, um maximal einmal pro Woche und
# Absender eine Urlaubsbenachrichtigung (in .vacation.msg) zu
# versenden (siehe auch "man vacation").
:0 h c
* !^FROM_DAEMON
* !^X-Loop:.*$LOGNAME
| vacation utcke
Zu guter letzt brauchen wir noch einige cron-jobs, daß sind Prozesse, die regelmäßig zu einer festgelegten Zeit laufen und uns darüber auf dem laufenden halten, welche Mails als Spam klassifiziert wurden und die in den log-Dateien aufräumen. Dazu ruft man auf der kogs1 das Programm crontab -e auf, um die sogenannte cron-Datei zu ändern. ACHTUNG: crontab verwendet als Editor das Programm, welches in der Variablen $EDITOR oder $VISUAL steht - oder vi, wenn nichts gesetzt wurde. Aus vi entkommt man mit der etwas kryptischen Tastenkombination ESC : q ! RETURN, aber besser setzt man die beiden Variablen $EDITOR und $VISUAL, z.B. so:
# Um emacsclient zu
verwenden, muß man in emacs "M-x server-start" ausführen
# man kann aber natürlich auch jeden anderen Editor hier eintragen
kogs1>/home/utcke%
setenv EDITOR emacsclient
# für X11
kogs1>/home/utcke%
setenv VISUAL emacsclient
# editiere das crontab-file
kogs1>/home/utcke%
crontab -e
In die crontab trägt man folgendes ein:
# m h d m weekday command
#
# Jeden Morgen um 9:00 versendet das Script spam_update eine
# Zusammenfassung der in spamassassin.new gespeicherten Mails an den
# User und leert dann die Datei ~/Mail/spamassassin.new in die Datei
# ~/Mail/spamassassin aus.
0 9 * * * /home/utcke/bin/spam_update spamassassin > /dev/null 2>&1
#
# logfile-rotation
#
# Jeden Sonntag um 4:00 wird die Datei procmail.log in procmail.log.0
# umbenannt, eine eventuell vorhandene procmail.log.0 in
# procmail.log.1.gz und so weiter bis zur procmail.log.5.gz, die in
# procmail.log.6.gz umbenannt wird. Eine eventuell schon vorhandene
# procmail.log.6.gz wird gelöscht.
# Das gleiche geschieht auch für razor-agent.log.
0 4 * * 0 /home/utcke/bin/savelog $HOME/Mail/procmail.log
0 4 * * 0 /home/utcke/bin/savelog $HOME/.razor/razor-agent.log
Eine online-Version findet sich hier.
Sven Utcke last modified: 10-Nov-2006