Anleitung zur Installation und Betrieb von CRM114 mit Debian

Einleitende Worte

Ich bin durch ein Posting von Felix von Leitner auf die Software aufmerksam geworden und beschloss, diese etwas genauer unter die Lupe zu nehmen. In der Tat stellte ich nach kurzer Nutzung fest, dass das Programm eine hohe Erkennungsrate hat. Einzig die Installation bzw. Konfiguration ist manchmal etwas hakelig. Daher will ich im folgenden eine kurze Anleitung für Debian hierzu geben.

CRM114

CRM114 ist primär nicht nur als Spamerkennungssoftware geschaffen worden. CRM114 kann sich jegliche Datenströme anschauen und diese Daten dann sortieren, filtern oder ändern. In unserem Falle soll es bestmöglich Spam aus E-Mails erkennen.

Falls ihr Spamassassin, Bogofilter oder anderes installiert habt, keine Sorge, CRM114 ist dazu kompatibel. Es kann vor oder nach den einzelnen Spamerkennern ausgeführt werden. Die Software läuft unter Linux, BSD, MacOS-X und angeblich auch unter Cygwin in Windows.

Installation

Die Installation unter Debian ist relativ simpel. Als Nutzer root gebt ihr einfach

apt-get install crm114

ein. Das wars schon.

Konfiguration

Anlegen der CSS-Dateien

Zunächst solltet ihr in eurem $HOME-Verzeichnis ein Unterverzeichnis anlegen. Ich empfehle hier, das Verzeichnis .crm114 zu nennen:
jens@qbiathome:~/ > mkdir .crm114

Nun müssen die css-Dateien angelegt werden. Diese Dateien sind das "Gedächtnis" der Software. Hier werden die Wörter und Phrasen statistisch beschrieben.

Es gibt verschiedene Möglichkeiten, diese Dateien anzulegen. Der beste Weg sollte sein, einfach leere css-Dateien anzulegen und diese dann sukzessive anzulernen. Diesen werde ich auch im weiteren beschreiben. Weiterhin könnt ihr vorgefertigte Dateien auf der CRM114-Homepage herunterladen.

Zum Anlegen der Dateien wird im CRM114-Paket das Programm cssutil mitgeliefert. Um loslegen zu können, müssen nun leere css-Dateien angelegt werden:
jens@qbiathome:~/ > cd .crm114/
jens@qbiathome:~/ > cssutil -b -r spam.css
Sparse spectra file spam.css statistics:

Total available buckets : 1048576
Total buckets in use : 506987
Total hashed datums in file : 1605968
Average datums per bucket : 3.17
Maximum length of overflow chain : 39
Average length of overflow chain : 1.84
Average packing density : 0.48

jens@qbiathome:~/ > cssutil -b -r nonspam.css
jens@qbiathome:~/ > ls -l *.css

-rw-r--r--  1 jens users 12582924 2004-09-21 22:05 .crm114/nonspam.css
-rw-r--r--  1 jens users 12582924 2004-09-21 22:05 .crm114/spam.css

Wundert euch nicht, dass die obigen beiden Dateien ca. 12 MB groß sind. Am Anfang sind diese mit lauter Nullen gefüllt. Nun geht es ans Lernen.

Viele von euch wollen nun vielleicht gleich den gesamten alten Spamordner nehmen und diesen zum Lernen hinzuziehen. Ich kann euch nur raten, diesem Wunsch vorerst zu widerstehen. CRM114 funktioniert nach der Methode TOE (Train On Errors), d.h. es sollte nur trainiert werden, wenn wirklich ein Fehler aufgetreten ist.

Kopieren von Konfigurationsdateien und Konfiguration der mailfilter.cf

Nun müssen einige Konfigurationsdateien in das neu angelegte Verzeichnis kopiert werden. Diese sind:

/usr/share/doc/crm114/examples/blacklist.mfp
/usr/share/doc/crm114/examples/priolist.mfp
/usr/share/doc/crm114/examples/rewrites.mfp
/usr/share/doc/crm114/examples/test_rewrites.mfp
/usr/share/doc/crm114/examples/whitelist.mfp
/usr/share/doc/crm114/examples/whitelist.mfp.example
/usr/share/crm114/mailfilter.cf

Diese werden in das Verzeichnis .crm114/ kopiert. Für den weiteren Betrieb können die Dateien blacklist.mfp, whitelist.mfp, rewrites.mfp sowie mailfilter.cf wichtig werden. Die letztgenannte Datei, mailfilter.crm, muss nun noch konfiguriert werden. Unten findet ihr einige wichtige Einstellungen:

:spw: /geheimesPasswort/
Dieses Passwort wird für das Remote Control Interface von CRM114 benötigt. Hierdurch kann man CRM114 Kommandos in einer E-Mail geben. So wäre es denkbar, dass man (Nicht-)Spammails mit entsprechenden Kommandos und dem Passwort wieder an sich selbst schickt.
:add_headers: /yes/
Mit dieser Einstellung werden neue Headereinträge gemacht. Dort steht dann die aktuelle Version (X-CRM114-Version) und der Spamstatus, den CRM114 ermittelt hat (X-CRM114-Status).
:add_verbose_stats: /no/
Falls diese Option gesetzt ist, wird in jede E-Mail ein kurzer Block mit statistischen Informationen eingefügt:
** ACCEPT: CRM114 PASS Markovian Matcher **
CLASSIFY succeeds; success probability: 1.0000  pR: 92.0269
Best match to file #0 (nonspam.css) prob: 1.0000  pR: 92.0269
Total features in input file: 14496
#0 (nonspam.css): features: 197728, hits: 5130048, prob: 1.00e+00, pR:  92.03
#1 (spam.css): features: 239952, hits: 4700137, prob: 9.40e-93, pR: -92.03
:add_extra_stuff: /no/
Mit den Konfigurationsvariablen text bzw. attachment werden sehr detaillierte Erklärungen zu der jeweiligen Statistik abgeliefert.
:spam_flag_subject_string: //
Dies ermöglicht es, jede Spammail mit einem entsprechenden Betreff zu kennzeichnen. Man kann z.B. "ADV:" verwenden.
:rewrites_enabled: /no/
Hiermit könnte man eventuell Adressen umschreiben. Dies muss in der Datei rewrites.mfp festgelegt werden. Allerdings ist dies sehr langsam und braucht eine Menge CPU. Daher sollte man es i.d.R. auf "no" stehen lassen.
:log_to_allmail.txt: /yes/
Alle einkommende E-Mail wird in die Datei .crm114/allmail.txt geschrieben. Gerade am Anfang in der Testphase sollte man das aktivieren, um nicht zufällig Mails zu verlieren.
:general_fails_to: //
Hier kann man eine E-Mail-Adresse eintragen, an die fehlgeschlagene Mailzustellungen geschickt werden. Seit vorsichtig mit der Einstellung, da man sich so leicht einen Mailloop bauen kann!

Alle weiteren Einstellungen kann man unverändert lassen.

Funktionstest

Nun sollte alles soweit korrekt eingestellt sein und man kann einen ersten Test machen. Hierzu reicht es auf der Kommandozeile folgendes einzugeben:

jens@qbiathome:~/ > /usr/share/crm114/mailfilter.crm -u .crm114

Nun kann beliebiger Text eingegeben werden. Die Eingabe müsst ihr mit Strg+D abschliessen. Dies ist das Dateiendezeichen in Linux.

Ein Test von CRM114.

Ausgegeben wird, vorausgesetzt es ist alles korrekt eingestellt, etwas in der Art:

From foo@bar  Wed Sep 22 16:21:03 2004
X-CRM114-Version: 20040816.BlameClockworkOrange-auto.3 (regex: TRE 0.6.8) MF-A10FFB4C
X-CRM114-Status: SPAM  ( pR: -0.0821 )
Subject: (none)

Ein Test von CRM114.

Sollte dies der Fall sein, dann funktioniert CRM114 bei euch und ihr könnt euch den Einstellungen für Procmail widmen.

Procmail konfigurieren

Jetzt muss noch eine entsprechende Regel für Procmail eingerichtet werden und dann seid ihr schon (fast) fertig:

:0fw: crm114.lock
| /usr/bin/crm -u /home/jens/.crm114 /usr/share/crm114/mailfilter.crm

:0:
* ^X-CRM114-Status: SPAM.*
Spam

Was bewirkt die obige Regel? Zunächst wird eine Lockdatei namens crm114.lock angelegt und wird die E-Mail an CRM114 weiter gegeben. Die Option -u bewirkt, dass die Konfigurationen in diesem Verzeichnis genutzt werden. Danach wird dann alle Mail, die den entsprechenden Header trägt in einem Ordner Spam abgelegt.

Spam filtern

Nachdem nun alles gut eingestellt ist, versucht mal neue E-Mails abzurufen. Ihr werdet sehen, dass einige in der Inbox und einige im Spamordner liegen. Nun müsst ihr alle E-Mails, falsch sortiert wurden, an CRM114 zum Lernen übergeben. Die folgenden Befehle kann man direkt in mutt eingeben (per Pipe weiterleiten):

grep -a -v ^X-CRM114 | /usr/share/crm114/mailfilter.crm -u .crm114 --learnspam > /dev/null

für E-Mails, die fälschlicherweise nicht als Spam erkannt wurden und mit

grep -a -v ^X-CRM114 | /usr/share/crm114/mailfilter.crm -u .crm114 --learnnonspam > /dev/null

für E-Mails, die fälschlicherweise als Spam erkannt wurden.

Wichtig ist zum einen, dass nur falsch sortierte E-Mails zum Lernen weitergegeben werden und zum anderen sollte man versuchen, ungefähr dieselbe Zahl an Spam- und Nichtspammails zum Training zu geben. Wenn ihr diese Ratschläge berücksichtigt, werdet ihr wahrscheinlich große Freude mit dem Programm haben.