Autor Thema: [Admin, Spam-Schutz] kSpam — Spamfilter für Domino-Server  (Gelesen 21651 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Autor(en):Daniel (DaWutz)
Stand:07.08.2005
Version:1.0
Domino-Versionen:5.x, 6.x, 7.x
@Notes-Thread(s):[Themenvorschlag] kSpam

Inhalt

1. Was ist kSpam
2. Installation kSpam
3. Konfiguration kSpam
4. Filterregeln
   4.1 Über Filterregeln
   4.2 Einfache Filterregeln
   4.3 Komplexe Filterregeln unter Verwendung regulärer Ausdrücke
5. Quellen


1. Was ist kSpam

kSpam ist ein Open-Source Spamfilter der auf dem Domino-Server installiert wird (und auch nur dort!).
Er unterzieht eingehende Mails einer Prüfung und handelt dann gemäß seinen Einstellungen (Markieren, Blocken und Kopieren, Blocken,...).
Ausgehende Mails werden nicht berücksichtigt.


2. Installation kSpam

kSpam kann kostenlos bei www.openntf.org bezogen werden. Lediglich eine Registrierung ist erforderlich. Die Installation von kSpam ist dann in wenigen Minuten erledigt. Nach dem Entpacken der herunter geladenen zip-Datei genügen 6 Schritte um kSpam in den Domino-Server zu integrieren.
 
1.   Signieren der Datenbank-Vorlagen kSpamCon.ntf, mailgood.ntf und mailspam.ntf mit der Server-ID (im Domino Administrator). Diese Datenbanken-Vorlagen werden benötigt um die Konfigurationsdatenbank, die Datenbank für die „guten“ Mails und die Datenbank für die gefilterten Mails zu erstellen.

2.   Kopieren der Dateien nspam.dll und nbload.exe in das Domino Verzeichnis.

3.   Erstellen der Konfigurationsdatenbank KSpamCon.nsf aus der Vorlagen-Datenbank. Wichtig ist hier, dass der Name nicht verändert wird, da die dll-Datei nach dieser Datenbank sucht. (Auch die Groß- und Kleinschreibung beachten!)

4.   Erstellen der mailspam.nsf und der mailgood.nsf aus den entsprechenden Vorlagen im Data-Verzeichnis des Domino Servers. Die mailgood.nsf wird nur benötigt, wenn zum Filtern der Bayesische Filter zum Einsatz kommt. Werden nur Filterregeln benutzt, wird nur die mailspam.nsf benötigt.

5.   Eintragen des Parameters „Extmgr_addins=spam“ in die notes.ini. Wenn der Parameter „Extmgr_addins“ schon vorhanden ist, dann wird der Wert „spam“ einfach durch ein Komma getrennt hinter dem letzten Wert angehangen.

6.   Da wir den Bayesischen Filter nutzen wollen, benötigen wir noch einen weiteren Parameter in der notes.ini: „Servertasks=bload“. Dieser Task ruft nun in Intervallen die nbload.exe auf, die dann aus den Mails in der mailgood.nsf und der mailspam.nsf die Wort-Wahrscheinlichkeiten für Spam kalkuliert. Beim ersten Starten erfolgt nun eine Fehlermeldung, das „bload“ eine Datei (comblist.txt) nicht finden kann. Das ist normal, denn diese Datei wird erst angelegt, wenn eMails in der mailspam.nsf als Spam markiert worden sind.

Nun ist kSpam fertig installiert. Die weitere Konfiguration erfolgt in der Konfigurationsdatenbank kSpamCon.nsf.


3. Konfiguration kSpam

Der nächste Schritt ist die Konfiguration von kSpam. Bis zur Version 1.39b2 musste sämtliche Konfiguration über Parameter in der notes.ini erfolgen. Das war nicht wirklich komfortabel und bedeutete, dass Änderungen immer einen Neustart erforderten, damit sie wirksam wurden.
Seit der Version 1.4b kann die Konfiguration über ein Konfigurationsdokument in der Datenbank kSpamCon.nsf erfolgen. Dies ist wesentlich komfortabler und das Konfigurationsdokument kann einfach in eine andere Datenbank kopiert werden, wenn kSpam noch auf anderen Server eingesetzt werden soll.

Das Konfigurationsdokument ist in 2 Teile gegliedert. Den Allgemeinen Teil und den Bayesisch-Spezifischen. Der Allgemeine Teil umfasst 13 Punkte, die recht gut in der Maske erklärt sind. Des Weiteren steht bei jedem Punkt, wie der Name des entsprechenden Parameters in der notes.ini lautet. Im Folgenden werden die einzelnen Parameter des Konfigurationsdokumentes erklärt.

1.   „Instance ID“: Die ID sollte für jeden Server in einem Netzwerk gleich sein, da darüber ausgelesen wird, ob eine Mail schon innerhalb dieses Netzes geprüft wurde.

2.   „Default action“: Beschreibt die Aktion, die ausgeführt wird, wenn eine der Filterregeln auf die Mail zutrifft.

3.   „Default probability increase“: Gibt an, um wie viel Prozent die Spam-Wahrscheinlichkeit hochgesetzt wird. Dieser Parameter wirkt nur, wenn als „Default action“ „Increase Probability“ eingestellt wurde.

4.   “Mark messages with a reason field?“: Gibt an, ob in Mails Felder eingefügt werden, die Auskunft über den Grund geben, warum diese Mail gefiltert wurde.

5.   „Reload configuration every hour?“: Dieser Parameter erlaubt das Ändern der Konfiguration, ohne das der Server neu gestartet werden muss. Die Konfiguration wird jede Stunde ausgelesen.

6.   „Show statistics“: Gibt an, ob kSpam Logs schreiben soll. Eine Auswertung kann z.B. in der Server-Konsole mit „show stat smtp.kspam.*“ gelesen werden.

7.   „Minimum "From:" header length?“: Gibt die minimale Anzahl der Zeichen an, die das Feld „From“, also der Absender, haben muss.

8.   „Maximum numbers in sender's username?“: Gibt an, wie viele Ziffern in einer Absenderadresse vorkommen dürfen.

9.   „First character in "From:" header must not be a number?”: Gibt an, ob das erste Zeichen der Absender-Adresse eine Ziffer sein darf.

10.   „Other forms to scan?“: Wenn noch andere Masken-Arten durchsucht werden sollen, dann kann man dies hier spezifizieren. Die Masken „Memo“ und „Reply“ werden standardmäßig durchsucht.

11.   „Add recipients list to copied and denied messages?”: Gibt an, ob die Empfängerliste mit in ein Leser-Feld in der Mail-Maske geschrieben werden soll.

12.   „Copied mail database“: Hier wird die Datenbank angegeben, in die die gefilterten Mails kopiert werden sollen.

13.   „Turn on debugging?“: Hier können Debug-Informationen in eine Textdatei (ks_debug.txt) ausgegeben werden. Wird nur dann benötigt, wenn wirklich ein Problem auftritt und man diese Informationen an openntf.org weiterleiten möchte.


Der zweite Reiter “Bayesian” bietet nun die Einstellungen die nur den Bayesischen Filter betreffen. Teilweise hebeln diese Einstellungen die Einstellung unter „General“ aus.

1.   „Bayesian filter enabled“: Der wichtigste Parameter für den Bayesischen Filter – ist er an oder aus? Ist der Filter nicht eingeschaltet, dann gelten alle weiteren Parameter auf dieser Seite nicht!

2.   „Token reload period“: Gibt an, in welchen Zeitintervallen die Token neu aus den Datenbanken mailgood.nsf und mailspam.nsf ausgewertet werden.

3.   „Probability boundary“: Gibt an, ab welcher Wahrscheinlichkeit eine Mail in die mailspam.nsf umgeleitet wird.

4.   „Mark messages with token list and probability?”: Gibt an, ob die Spam-Wahrscheinlichkeit und die in der Mail gefundenen Token noch einmal extra in einem Feld in der Mail abgelegt werden.

5.   „Good message ratio“: Gibt an, bis zu welcher Wahrscheinlichkeit eine Mail in die mailgood.nsf umgeleitet wird.

6.   „Bayesian action“: Dieser Parameter gibt an, was mit der Mail geschehen soll, wenn sie dem Filter „zum Opfer“ gefallen ist.
 
7.   „Mark with“: Gibt an, wie eine Mail gekennzeichnet wird, wenn sie als Spam erkannt wurde. Wirkt nur, wenn als „Bayesian action“ der Wert 1 (Mark) gesetzt wurde.

8.   „Tokens to ignore“: Hier können Token definiert werden, die bei der Berechnung der Spamwahrscheinlichkeit ignoriert werden sollen.

9.   „Dump token lists to file“: Hier kann definiert werden, ob die Token und ihre Wahrscheinlichkeit in einer Datei ausgegeben werden soll. Dies kann genutzt werden, um sich selber ein Bild zu machen, wie die Wahrscheinlichkeit berechnet wird und welche Token in die Liste des vorherigen Parameters aufgenommen werden sollten. Die Token werden in die Dateien goodlist.txt und spamlist.txt geschrieben.
 
Die nun folgenden „Preparation settings“ dienen der Lernphase des Spamfilters. Sie werden nacheinander eingeschaltet und können nie parallel laufen.

10.   „Preparation setting 1“: Dieser Parameter dient dazu, die mailgood.nsf zu füllen. Jede Mail die nicht von den Regeln erfasst wird, wird in die mailgood.nsf kopiert.

11.   „Preparation setting 2“: Diese Einstellung wird eingeschaltet, nachdem die erste Phase eine Weile gelaufen ist. Mit diesem Parameter werden Mails mit einer kalkulierten Wahrscheinlichkeit von unter 10% in die mailgood.nsf und mit über 90% in die mailspam.nsf gesendet.

12.    „Turn on debugging?“: Hier können Debug-Informationen in eine Textdatei (bload.txt) ausgegeben werden. Wird nur dann benötigt, wenn wirklich ein Problem auftritt und man diese Informationen an openntf.org weiterleiten möchte.

Die erste Lernphase sollte so lange laufen, bis ca. 1000 Mails in jeder Datenbank sind. In dieser Phase muss eine stetige Kontrolle des Filters erfolgen, da falsche Mails in den Datenbanken die Erkennung von Spam beeinträchtigen. Die zweite Phase kann dann schon länger mitlaufen, die Mitarbeiter sollten dann schon eine Entlastung von Spam bemerken.
Die Anzahl der Mails in der mailspam.nsf und mailgood.nsf sollte nicht zu hoch sein, da dies eine kräftige CPU-Last beim einlesen der Wort-Wahrscheinlichkeiten zur Folge hat. Daher sollte die „Token reload period“ auch nicht zu klein angesetzt werden, da dies eine hohe Last auf dem Server erzeugen kann.

Ein Parameter der nicht oder nur sehr spärlich im Zusammenhang mit kSpam dokumentiert ist lautet: CONVERTER_LOG_LEVEL=10
Mit diesem Parameter in der notes.ini vermeidet man das zuspammen das Logs mit den "CD to MIME Conversion"-Einträgen.


4. Filterregeln

4.1 Über Filterregeln

kSpam bietet die Möglichkeit sowohl mit einfachen Regeln, als auch mit komplexen Regeln unter Einbezug von "Regular Expressions" zu filtern. Die Unterschiede und Vorgehensweisen werden in den nächsten beiden Unterpunkten erklärt.

Weiterhin ist zu den Filterregeln zu sagen, dass die Länge der Regeln begrenzt ist auf 1024 Zeichen pro Feld.
Auszug aus dem Source:
   #define TOMV_MAX_RULE_FROM   1024 // max from rule length
   #define TOMV_MAX_RULE_TO   1024 // max to rule length
   #define TOMV_MAX_RULE_SUBJECT   1024 // max subject rule length
   #define TOMV_MAX_RULE_BODY   1024 // max body rule length
   #define TOMV_MAX_RULE_ATTACH   1024 // max attachment rule length

Wird die Aktion "Mark" ausgewählt, dann darf das Feld "Mark with:" ebenfalls nicht länger als 1024 Zeichen sein.
   #define TOMV_MAX_RULE_MARK   1024 // max mark text rule length
   

4.2 Einfache Filterregeln

In der Konfigurationsdatenbank KSpamCon.nsf können neue Regeln erstellt werden. Diese gliedern sich in den Bereich „allow“ (erlauben) und „deny“ (verbieten).

Anhand eines Beispiels wird nun das Erstellen einer solchen Regel erläutert. Der erste Punkt der ausgefüllt werden muss, ist der Punkt „Priority“. Durch diese Vergabe von Prioritäten ist es möglich, auf die Abarbeitungsreihenfolge der Filterregeln Einfluss zu nehmen. Regeln mit der Priorität 10 werden vor Regeln mit der Priorität 15 ausgeführt.
Die nächsten Punkte „From contains:“, „To contains:“, „Subject contains:“ und „Body contains:“ werden nun mit den Begriffen gefüllt, die es zu Filtern gilt.
In unserem Beispiel wird jede Mail mit dem Wort „Test“ im Betreff gefiltert Der nächste Punkt „Action“ gibt an, was mit der Mail passieren soll, wenn die Regel zugegriffen hat. In unserem Beispiel „Mark“. Die Mail wird also markiert und zwar mit dem Text oder der Zeichenfolge die im nächsten Feld („Mark with:“) angegeben ist.
Der letzte Punkt „Probability Increase:“ wird nur dann benötigt, wenn unter „Action“ „Increase Probability“ ausgewählt wurde. Zu beachten ist, dass wenn sowohl Erlaubnis-Regeln als auch Verbots-Regeln erstellt wurden, die Erlaubnis-Regeln zuerst angewendet werden.


4.3 Komplexe Filterregeln unter Verwendung regulärer Ausdrücke

Wenn komplexere Muster, oder verschiedene Schreibweisen gefiltert werden sollen, dann ist das Arbeiten mit normalen Regeln nicht mehr sinnvoll, da der Aufwand bei der Einrichtung und Pflege der Regeln viel zu hoch wäre.
Zur Verdeutlichung – Penis kann auf verschiedenste Arten geschrieben werden (Penis, Penls (kleines „L“ anstelle einem i) oder Pen1s (mit der 1 als „i“)).
Das würde schon bedeuten, dass 3 verschiedene Regeln gebraucht würden, um dieses eine Wort in seinen Spielarten abzufangen.
Deshalb bietet kSpam noch die Möglichkeit Regeln mit so genannten „Regulären Ausdrücken“ anzuwenden. Die Verwendung von regulären Ausdrücken lässt sich am Besten anhand eines Beispiels erklären.

Grundsätzlich werden alle Regeln die reguläre Ausdrücke verwenden mit dem Schlüsselwort „#REGEX#:“ eingeleitet. „#REGEX#:(?i)penis“ würde also alle Arten von Groß- und Kleinschreibung ausfiltern (z.b. peNIs, PeNiS usw.).
 
Um nun die verschiedenen Arten abzubilden, das „i“ darzustellen wird vor dem „i“ ein RegEx-Tag geöffnet „[“. Dies bedeutet, wir wollen nun prüfen ob an dieser Stelle ein „i“ vorkommt, dargestellt durch eins der folgenden Zeichen. Die folgenden Zeichen werden einfach fortlaufend geschrieben. Danach wird der RegEx-Tag wieder geschlossen, mit „]“. Unser Beispiel würde dann wie folgt aussehen: „#REGEX#:(?i)pen[i1|l]s“. Das "(?i)" vornedran bedeuted, das alle Groß- und Kleinschreibung ignoriert wird.
 
Da dies aber noch nicht alle Variationen sind, um ein Wort erscheinen zu lassen, das Aussieht wie „Penis“, sieht der reguläre Ausdruck den wir verwenden entsprechend komplexer aus. |=>  „#REGEX#:(?i)p\W{0,2}(?i)[e3]\W{0,2}(?i)n\W{0,2}(?i)[il1|]\W{0,2}(?i)[$s5]“

Wie man sieht, werden reguläre Ausdrücke schnell unübersichtlich. Daher gibt es Programme, mit denen man reguläre Ausdrücke testen kann. Ein geeignetes Programm ist zu finden unter: http://weitz.de/regex-coach/ .

Was es noch nicht gibt, sind Programme, denen ein Wort präsentiert wird und die dann einen regulären Ausdruck daraus bauen, der alle Möglichkeiten der „Schreibweise“ abfängt.

ParameterBedeutung


?iGroß- und Kleinschreibung ignorieren
\W{1,3}Anzahl von Zeichen dazwischen (1x bis 3x)
[abc]an dieser Stelle kann ein "a" oder ein "b" oder ein "c" stehen
[a]{1,3}"a", bis zu 3x hintereinander (a, aa, aaa)

Hier nun noch eine Liste von 'RegEx'en:
zu Filternregulärer Ausdruck


Casino#REGEX#:(?i)(c\W{0,2}[a@]{1,3}\W{0,2}[s5$]{1,3}\W{0,2}[i1l|]{1,3}\W{0,2}[n]{1,3}\W{0,2}(([0o])|(\(\))))
Beispiel:
[/b]
ca$ino, CASlN0, C@s1n0
Cialis#REGEX#:(?i)(c\W{0,2}[i1l|]{1,3}\W{0,2}[a@]{1,3}\W{0,2}[i1l|]{1,3}\W{0,2}[i1l|]{1,3}\W{0,2}[s5$])
Beispiel:
[/b]
Cialis, C1@l|$, CiaIis
Fick oder Fuck#REGEX#:(?i)(f\W{0,2}[|1ivul]\W{0,2}c\W{0,2}k)
Beispiel:
[/b]
Fvck, f1ck
Penis#REGEX#:(?i)(p\W{0,2}[e3]\W{0,2}n\W{0,2}[il1|]\W{0,2}[$s5])
Beispiel:
[/b]
peni$, p3ni$
Pharmacy#REGEX#:(?i)(Ph[a@]rm[a@][cz][yil|])
Beispiel:
[/b]
Pha@rmacy, Pharmazi
Pussy#REGEX#:(?i)(p\W{0,2}[vu]\W{0,2}[s5$]{1,3}\W{0,2}[1iIyl])
Beispiel:
[/b]
Pv$$i, pUs$y
Valium#REGEX#:(?i)([vw\\/]\W{0,2}[a@]\W{0,2}[lI|1]{0,2}\W{0,2}[1il|]{0,2}\W{0,2}[uv]\W{0,2}m|(/\\/\\))
Beispiel:
[/b]
V@l1um, \/al1um
Viagra#REGEX#:(?i)(([vw]|(\\/))\W{0,2}[i1|l]\W{0,2}[a@]\W{0,2}[g6q]{1,2}\W{0,2}r\W{0,2}[a@])
Beispiel:
[/b]
Vi@gra, V1aqra
Xanax#REGEX#:(?i)(x\W{0,2}[a@]{1,3}\W{0,2}n{1,3}\W{0,2}[a@]{1,3}\W{0,2}x)
Beispiel:
[/b]
XannaX, X@nax


5. Quellen



Mein Dank gilt an dieser Stelle auch Ulrich "eknori" Krause, der mir immer wieder hilfreich mit dem ein oder anderen Tipp zur Verfügung stand.
« Letzte Änderung: 07.08.05 - 16:15:25 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz