bogofilter - Spam-Filter mit Algorithmus nach Bayes

6 Schritte zum 'selbstlernenden' Spam-Filter

1. Directory für bogofilter:

mkdir ~/.bogofilter

2. Erstelle ein Maildir-Directory ~/Mail/spam/ , in dem wir später die Spams speichern

mkdir ~/Mail
/var/qmail/bin/maildirmake ~/Mail/spam

3. username-spam@ping.de soll nach ~/Mail/spam gespeichert werden

echo './Mail/spam/' > ~/.qmail-spam

4. username-bad@ping.de zur Registrierung von Spam:

echo '|preline bogofilter -Ns' > ~/.qmail-bad

5. username-good@ping.de , um versehentlich als Spam aussortierte Mails als 'gute' Mails zu kennzeichnen, damit diese zukünftig nicht mehr weggeworfen werden:

echo '|preline bogofilter -Sn' > ~/.qmail-good

Wer die Mail dann gleichzeitig noch wieder in die 'richtige' Mailbox befördern möchte, hängt die entsprechende email-Adresse daran an:

echo 'MyUsername@ping.de' >> ~/.qmail-good

Obacht: MyUsername ersetzen durch z.B. klaus, aber ihr wisst schon wie ihr heißt.

6. bogofilter wird über das entsprechende .qmail-File aufgerufen. Will also z.B. MyUsername@ping.de seine email filtern, so editiert er in seinem Homedir /home/MyUsername/ die Datei .qmail:

# z.B. MyUsername@irgendwoanders.de
# z.B. ./Mail/maildirungefiltert/
#
# ALLE ueber dieser Zeile erhalten ungefilterte Mail
#
|condredirect MyUsername-spam bogofilter -l -u -v
#
# UNTERHALB dieser Zeile bekommen alle nur von bogofilter gepruefte
# Mails
#
# z.B. MyUsername@site.ping.de
# z.B. ./Mail/maildirohnespam/
./Maildir/

Funktionsweise

Die dot-qmail-Datei wird Zeile für Zeile abgearbeitet, d.h. stehen in den ersten Zeilen Mail-Adressen oder Maildirs, wird ganz normal dorthin durch qmail ausgeliefert.

Die Zeile '|condredirect MyUsername-spam bogofilter -l -u -v' ist dann der eigentliche Aufruf des Filters.

bogofilter -l -u -v testet die Mail und versucht sie anhand der bisherigen, in ~/.bogofilter/wordlist.db gespeicherten Wörter als Spam oder non-Spam zu klassifizieren. Wird die Mail als Spam erkannt, gibt das Programm den Return-Wert 0 und die wordlist.db wird entsprechend aktualisiert, wird die Mail als non-Spam eingeordnet, so gibt bogofilter den Return-Wert 1 zurück und auch hier wird in wordlist.db gespeichert, daß es sich um eine 'gute' Mail gehandelt hat.

|condredirect (conditional redirect) wertet den Return-Wert von bogofilter aus. Bei 0 (=Mail ist spam) wird die Mail an die Mailadresse MyUsername-spam weitergeleitet und die weitere Verarbeitung der .qmail an dieser Stelle beendet. Bei einem Return-Wert >0 (= Mail ist kein Spam), wird der Rest der .qmail-Datei abgearbeitet. Man sollte daher nach der Zeile mit |condredirect eine Adresse/Maildir angeben, an die die (spamfreien) emails geleitet werden sollen.

In dem obigen Beispiel haben wir über .qmail-spam angegeben, daß die Mails an MyUsername-spam@ping.de in ein Maildir namens ~/Mail/spam/ gespeichert werden soll (siehe Schritt 2). Hier kann man also später überprüfen, ob auch korrekt sortiert wurde.

Sollten in der Spam-Box ausversehen neben Spam ausversehen auch 'wichtige' Mails gelandet sein, so sollte man sie an MyUsername-good@ping.de bouncen (!). Die Datei .qmail-good bewirkt nämlich, daß bogofilter die falsche Klassifizierung nochmals überdenkt und speichert dies auch für zukünftige Entscheidungen in ~/.bogofilter/wordlist.db ab.

Sollten umgekehrt ausversehen ein paar Spammails durchgekommen sein, so bounced (!) man diese an MyUsername-bad@ping.de, damit diese und ähnliche Mails zukünftig als Spam erkannt werden.

EDIT: (Michael)

Es empfiehlt sich folgender Alias in der .bashrc: alias myspam='mutt -f ~/Mail/spam/'

EDIT: (Michael)

Rossi empfielt den Alias "smutt" zu nennen oder so. dict.leo.org spricht:

smut: Dreck, Schmutz, Schmutzliteratur

Tips und Tricks

Macros für mutt

Wenn sich die Wortliste von bogofilter auf der gleichen Maschine befindet, kann man diese auch direkt aus mutt aktualisieren. Die folgenden Macros ermöglichen folgende Funktionen in der Index-Ansicht:

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Macros for bogofilter
macro index \en "<enter-command>unset wait_key\n\
<pipe-entry>bogofilter -n\n\
<enter-command>set wait_key\n" "mark message as non-spam"

macro index \eN "<enter-command>unset wait_key\n\
<pipe-entry>bogofilter -d /mnt/central/bogofilter/ -Sn\n\
<enter-command>set wait_key\n" "mark message CORRECT as non-spam"

macro index \es "<enter-command>unset wait_key\n\
<pipe-entry>bogofilter -d /mnt/central/bogofilter/ -s\n\
<enter-command>set wait_key\n" "mark message as spam"

macro index \eS "<enter-command>unset wait_key\n\
<pipe-entry>bogofilter -d /mnt/central/bogofilter/ -Ns\n\
<enter-command>set wait_key\n" "mark message CORRECT as spam"

macro index \ed "<enter-command>unset wait_key\n\
<pipe-entry>bogofilter -d /mnt/central/bogofilter/ -s\n\
<enter-command>set wait_key\n\
<delete-message>" "delete message as spam"

macro index B "|bogofilter -vvF|less -c\n"      "bogofilter analysis"
macro pager B "|bogofilter -vvF|less -c\n"      "bogofilter analysis"
macro index \cB "|bogofilter -vvvF|less -c\n"   "bogofilter extended analysis"
macro pager \cB "|bogofilter -vvvF|less -c\n"   "bogofilter extended analysis"

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#

Erfahrungen

Soweit zur Kurzanleitung. Ich hoffe, daß es ein paar von Euch etwas hilft. Das System ist natürlich davon abhängig, daß man es nach und nach sinnvoll trainiert. Das setzt auch voraus, daß man regelmäßig mal in die Spam-Box schaut und dort die falsch sortierten Mails entsprechend das System über die -good/-bad-Adressen nochmal lernen läßt.

Die Trefferquote danach ist aber relativ gut: Ich habe vorhin eine Untermenge meiner Hotline-Mails (ca 600 Stück) von bogofilter sortieren lassen, es wurden 178 korrekt als Spam erkannt, 2 Spammails wurden versehentlich als 'gute' Mail klassifiziert, der Rest wurde korrekt als non-spam erkannt. Keine 'wichtige' Mail wurde versehentlich als Spam klassifiziert. Die dazugehörige Datenbasis bestand aus ca. 1500 Mails mit einem Spam-Anteil >60%. Wer nicht unbedingt bei Null anfangen möchte, kann überlegen, ob er die wordlist aus /home/vorstand/.bogofilter als Ausgangsbasis verwenden möchte.

Schwierigkeiten hat das System auf der admin-Mailingliste bei den zahlreichen 'Delivery Failed'-Meldungen von Spam-Mails. Diese werden oft als Spam-erkannt, obwohl es sich dabei unter Umständen um Systemmeldungen handelt, die man noch verwerten möchte. Ein weiteres Problem sind die derzeit immer öfter auftretenden sehr kurzen Spam-Mails, die nur ein Bild und einen Link enthalten, diese sind auch für bogofilter äußerst schwierig als Spam zu erkennen.

Ansonsten arbeite ich mit dem System schon seit etwa 6 Monaten sehr erfolgreich, es kommen zwar immer wieder ein paar Spammails durch, jedoch ist es wieder deutlich erträglicher geworden, Mails zu lesen.

Bei Fragen oder Problemen stehe ich gerne zur Verfügung. Über weitere Erfahrungsberichte würde ich mich freuen. Weitere Infos könntIhr auch der Website von bogofilter entnehmen.

Viel Spaß und viele Grüße,

P.S.: Bitte seid vorsichtig beim Testen, für verlorene Mails etc. übernehme ich natürlich keine Garantie ;-)

Bogofilter Spamfilter (zuletzt geändert am 2013-12-17 19:56:53 durch Bodo)