HowTo: Bogofilter

bibabu

Registered User
Bogofilter ist ein Filterprogramm, das zur Aussortierung unerwünschter E-Mails verwendet werden kann. Bogofilter wurde zuerst von Eric S. Raymond entwickelt, wird aber seit 2002 von einer größeren Entwicklergruppe weiterentwickelt und ist Freie Software.

Das Programm ist in der Programmiersprache C geschrieben und läuft sehr schnell. Es stützt sich bei der Analyse von Mails, anders als etwa SpamAssassin, nur auf statistische Algorithmen (Bayesscher Filter), unter anderem jene aus dem Artikel "A Plan For Spam" von Paul Graham.

Bogofilter kann auf unterschiedliche Weise in ein Mailsystem eingebunden werden, benötigt aber die Interaktion mit dem Benutzer, der Mails als Spam/Ham klassifizieren muss. Wurde das Programm ausreichend trainiert, sind damit, wie bei vergleichbaren Programmen, sehr gute Erkennungsquoten möglich.

Quelle: Bogofilter ? Wikipedia

Ich nutze Bogofilter seit ungefähr zwei Monaten und bin sehr zufrieden damit. Die Integration erfolgt bei mir per Procmail. Alle Benutzer nutzten die gleiche Bayes Datenbank.

1) Installation

Debian:
Code:
aptitude install bogofilter
Gentoo:
Code:
emerge bogofilter

2) Konfiguration

In dem Verzeichniss /var/spool/bogofilter liegt die globale Bayes Datenbank die alle Benutzer lesen können.
Code:
mkdir /var/spool/bogofilter
chown -R root:root /var/spool/bogofilter
chmod -R u=rwx,g=rx,o=rx /var/spool/bogofilter/

3) Integration

procmailrc:
Code:
MAILDIR=$HOME/mail
DROPPRIVS=yes

VERBOSE=yes
LOGFILE=$HOME/log/procmail.log

:0 fw
| /usr/bin/bogofilter -e -p -l -d /var/spool/bogofilter

:0
* ^X-Bogosity: Spam
$MAILDIR/.Spam/

:0
$MAILDIR/

4) Datenbank anlernen

Ich lasse regelmäßig alle Spamordner als Spam lernen. Vorraussetzung dafür ist natürlich, dass eure Benutzer die Spammails nicht löschen sondern in den Ordner Spam verschieben. Die normale Inbox dient als Quelle für Hammails.

Code:
#!/bin/sh

# settings
list=`ls /var/mail | grep mail`
path=/var/spool/bogofilter

# learn ham + spam
for user in $list; do
        /usr/bin/bogofilter $1 -s -l -B /var/mail/$user/mail/.Spam -d $path
        /usr/bin/bogofilter $1 -n -l -B /var/mail/$user/mail -d $path
done

# set permissions
chmod -R u=rwx,g=rx,o=rx /var/spool/bogofilter

Dieses Script habe ich unter /etc/cron.daily abgelegt, damit es einmal am Tag ausgeführt wird. Wer das Script mit dem Parameter "-v" aufruft bekommt eine erweiterte Ausgabe wie viele Emails gelernt wurden. /etc/cron.daily/bogofilter -v

Das Script muss an euer System angepasst werden. Bei mir liegen die Maildirs unter /var/mail und beginnen alle mit "mail" daher gibt mir list=`ls /var/mail | grep mail` eine Liste alle Maildirs zurück.

Update (13.01.09 22:40): Ich habe den Hinweiß von Huschi weiter verfolgt und mir die Dokumentation von Bogofilter genauer angeschaut. Die Bogofilter Dokumentation besagt das jeder Fehler berichtigt werden sollte.
As bogofilter sometimes misclassifies a message, monitoring is necessary to correct any mistakes

Ich habe also das "-u" aus der procmailrc entfernt. Weiterhin habe ich den Cron editiert und die Funktion zum rotieren der Bayes Datenbank entfernt. An dieser Stelle nochmal ein Dankeschön an Huschi!
 
Last edited by a moderator:
Sehr schönes Howto.
Nur eins verstehe ich nicht.
Du nutzt den Switch -u (=Autoupdate <=> autolearn von SA).
Dennoch lernst Du alle bereits erkannten Emails jede Nacht neu an.
Damit machst Du die ganze Arbeit doch doppelt.
Dazu kommt noch, dass vorher die Wordlist-DB vollständig gelöscht wird. Daher gelten viele der ermittelten statistischen Werte nur maximal 24 Stunden. Aus meiner Sicht ist dies eine Bremse für eine sichere Erkennung.

huschi.
 
Hallo Huschi,

danke für dein Feedback. Ich überlege im Moment ob es sinnvoll ist "-u" zu Entfernen und die Datenbank nicht zu löschen oder ob "-u" alleine ausreicht. Was meinst du dazu?
 
Meine Meinung hatte ich schon geschrieben:
a) "-u" lernt alle als Spam erkannten Email an.
Da Du alle als Spam erkannten Emails in $MAILDIR/Spam ablegst macht ein nochmaliges Anlernen per Cronjob keinen Sinn.
Sinn würde es nur machen, wenn die User manuell nicht erkannte Emails in diesen Ordner schieben. Denn diese würden dann wirklich "gelernt".

b) Das Löschen der Datenbank ist kontraproduktiv da es statistische Daten (z.B. Häufigkeit der Spam-Wörter über die Zeit) vernichtet.

huschi.
 
Back
Top