Spamassassin per E-Mail sensiblisieren

Spam ist lästig und kostet viel Zeit und Geld, Spamassassin ist ein beliebtes Werkzeug dem Einhalt zu gebieten. Doch ist Spam sehr wandlungsfähig, was gestern noch einwandfrei gefiltert wurde, bleibt schon heute unmarkiert. Was tun? Spamassassin bringt mit sa-learn ein tolles Werkzeug mit. Sa-learn ermöglicht das Sensiblisieren auf Spam (schlechte E-Mails) und Ham (gute E-Mails), man kann sozusagen Spamassassin darauf trainieren Spam zu erkennen.

Folgende Vorgehensweise beschreibt die Konfiguration von Spamassassin, um sa-learn per E-Mail (Spam oder Ham per Anhang) zu trainieren.

Voraussetzung

Voraussetzung ist eine intakte Installation von Spamassassin und procmail. Lassen Sie sich nicht abschrecken von der Länge des How-Tos, der Mehrwert zur Bekämpfung von Spam ist nicht zu vernachlässigen.

Schritt 1: Procmail durch procmailrc konfigurieren

Procmail ermöglicht vor Auslieferung von E-Mails diese vorzubearbeiten, bsp. als Spam zu markieren, ins Nirvana zu schicken (/dev/null) oder Tools wie sa-learn damit zu konfrontieren. Die Datei die die nötigen Anweisungen enthält befindet sich unter /etc/procmailrc. Procmail ist sehr mächtig und ermöglicht allerhand Einsatzzwecke, es lohnt sich ein Blick auf http://www.procmail.org/ zu werfen.
An folgende Beispiel-Konfiguration verdeutliche ich die Vorgehensweise von procmail (s. Kommentare)

DROPPRIVS=yes
#Logfile für debugging
LOGFILE=/var/log/procmail
#Für debugging [ON|OFF]
VERBOSE=ON
#Welche Shell soll benutzt werden
#SHELL=/bin/sh

#Mails die kleiner als 256000 Bytes sind, sollen mit spamc -f geprüft werden
:0fw
* < 256000
| /usr/bin/spamc -f

#Wenn die Mail an spam@domain.de ausgeliefert werden soll, dann soll das Script sa-wrap.pl mit der Option - -spam ausgeführt werden. Die sa-wrap.pl ermöglicht das Anlernen von Spam (schlechte E-Mails) und Ham (gute E-Mails) als Attachment, in Schritt 3 wird dieses Script behandelt.
:0
* spam@domain.de
{
:0fw
| /usr/local/bin/sa-wrap.pl - -spam
:0
/dev/null
}

#Wenn die Mail an ham@domain.de ausgeliefert werden soll, dann soll das Script sa-wrap.pl mit der Option - -ham ausgeführt werden.
:0
* ham@domain.de
{
:0fw
| /usr/local/bin/sa-wrap.pl - -ham
:0
/dev/null
}

#Alle E-Mails, die das SPAM-Level von mehr als 7 (Sterne) erreicht haben und an domain1.de etc. ausgeliefert werden sollte, wird zu /dev/null weitergeleitet, also gelöscht. Augenmerk ist auf TO.*undisclosed-recipients zu richten, hier werden auch die Mails behandelt die keinen eindeutigen Empfänger führen, manche Spam-Mails wollten hiermit gewisse Mechanismen austricksen
:0 w
* ^TO.*@domain1.com|TO.*@domain2.com|TO.*@domain3.de|
TO.*@domain4.de|TO.*@domain5.com|TO.*@domain6.de|TO.*@domain7.de|
TO.*undisclosed-recipients
* ^X-Spam-Level:.*\*\*\*\*\*\*
/dev/null

#Ab hier kommt ein Work-Around, um ein Problem mit procmail in gewissen Konstellationen zu beheben
# Work around procmail bug: any output on stderr will cause the “F”
#in “From”
# to be dropped. This will re-add it.
:0 H
* ! ^From[ ]
* ^rom[ ]
{
LOG=”*** Dropped F off From_ header! Fixing up. “

:0 fhw
| sed -e ’s/^rom /From /’
}

Die Syntax von procmail ist gewöhnungsbedürftig, aber wenn man das Schema verstanden hat, kann man das Script prima anpassen. Es gibt einige Quellen, wenn man procmail intensiver verstehen möchte. Damit das Logging und das spätere Zwischenspeichern und Entpacken der angehangenen Spam und Ham E-Mails in Zusammenhang mit procmail funktioniert, müssen wir /var/log/procmail, /var/log/sa-lear.log und /var/spool/unpack erstellen und die nötigen Rechte und Gruppen setzen:

$ touch /var/log/procmail.log
$ chown root:mail /var/log/procmail.log
$ chmod 666 /var/log/procmail.log
$ touch /var/log/sa-learn.log
$ chown root:mail /var/log/sa-learn.log
$ chmod 666 /var/log/sa-learn.log
$ mkdir /var/spool/unpack
$ chown root:mail /var/spool/unpack
$ chmod 777 /var/spool/unpack

DOWNLOAD der Beispiel procmailrc

procmailrc

Schritt 2: Einrichten der beiden E-Mail Adressen

Die im Huckepack gesandten Spam oder Ham E-Mails werden an zwei Adressen gesandt. Hier in der Beispiel procmailrc sind es spam@domain.de und ham@domain.de. Diese beiden Adressen müssen existieren. Wie diese erzeugt werden ist egal.

Schritt 3: Einrichten der sa-wrap.pl

Die sa-wrap.pl ist das Script welche die weitere Verarbeitung der Anhänge übernimmt und sa-learn zuführt. Im Beispiel Script von procmail liegt das Script unter /usr/local/bin/sa-wrap.pl.

DOWNLOAD sa-wrap.pl

sa-wrap.pl

Wenn man das Script anschaut, gibt es nur ein paar Möglichkeiten Einstellungen vorzunehmen

#
# Thanks to: Chung-Kie Tung for the removal of the dir
# Adam Gent for bug report
#
# v1.2

use strict;
use MIME::Tools;
use MIME::Parser;

#Debugging aus- oder einschalten [0|1]
my $DEBUG = 0;
#Entpackverzeichnis
my $UNPACK_DIR = ‘/var/spool/unpack’;
#Pfad zu sa-learn
my $SA_LEARN = ‘/usr/bin/sa-learn’;
#kann vernachlässigt werden
my @DOMAINS = qw/gtmp.org winnink.org/;
.
.
.

Die Pfade sollten natürlich angepasst werden, sofern man andere gewählt hat. Um die Fehlersuche zu unterstützen ist das Debugging wertvoll. Die Logs werden pro versandte E-Mail erzeugt und stadardmäßig unter /tmp abgelegt (spam.log.16377 etc.). Des weiteren werden zusätzliche Informationen in der /var/log/procmail abgelegt.

HINWEIS

Es gibt eine neuere sa-wrap.pl namens sa-wrapper.pl auf die ich nicht weiter eingehe, da ich zufriedener mit der alten Version bin. Mit einer Suche in Google oder einer anderen Suchmaschine nach sa-wrapper.pl wird man fündig werden.

Schritt 4: Der Test

Nach einem Neustart des Spamassassin Daemons kann man einen Test durchführen. Man nehme eine leere E-Mail und setze Spam oder Ham E-Mails als Attachement ein (wieviele Anhänge ist egal, es wird iterativ abgearbeitet) und schickt diese entwerder an spam@domain.de oder ham@domain.de, wobei natürlich hier die erstellten E-Mail Adressen genutz werden sollen und keine fiktiver Domainname. Wie überprüft man nun den Erfolg?
Ganz einfach auf der Kommandozeile

$ sa-learn –dump magic

wobei magic eine Kurzübersicht bietet. Es sollte so etwas hierbei herauskommen

$ /tmp # sa-learn –dump magic
0.000 0 3 0 non-token data: bayes db version
0.000 0 13938 0 non-token data: nspam
0.000 0 12353 0 non-token data: nham
0.000 0 169414 0 non-token data: ntokens
0.000 0 1170422819 0 non-token data: oldest atime
0.000 0 1205088456 0 non-token data: newest atime
0.000 0 1205058100 0 non-token data: last journal sync atime
0.000 0 1205040158 0 non-token data: last expiry atime
0.000 0 0 0 non-token data: last expire atime delta
0.000 0 0 0 non-token data: last expire reduction count

Wenn das Lernen erfolgreich war wird der Count von nspam oder nham erhöht worden sein. Man kann natürlich auch mit Hilfe der Logs den entsprechenden Erfolg einsehen.

Voila!

HINWEIS

Nicht jeder Spam wird nach dem Anlernen erkannt werden, manchmal muss man ähnlichen Spam mehrmals senden. Auch das Versorgen mit guten E-Mails (Ham) darf nicht vernachlässigt werden, da hierüber Vergleiche gemacht werden.

Nachtrag: Bug in neueren Spamassassin Versionen

Vor kurzem stiess ich auf einen Bug in einer neuen Spamassassin Version. Die Logs führten folgendes auf

archive-iterator: invalid (undef) format in target list, 2
at /usr/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/
ArchiveIterator.pm line 727, line 1.

, wenn das Auftreten sollte muss die sa-learn unter /usr/bin/ angepasst werden. Die Hinweismeldung kommt durch ein nicht gesetztes Target auf. Was ist zu tun?

Lösung: /usr/bin/sa-learn anpassen

Index: sa-learn.raw
================================================================
— sa-learn.raw (revision 507745)
+++ sa-learn.raw (working copy)
@@ -402,7 +402,10 @@

# make sure the target list is in the normal AI format
if ($targets[$elem] !~ /^[^:]*:[a-z]+:/) {
- $targets[$elem] = target($targets[$elem]);
+ my $item = splice @targets, $elem, 1;
+ $elem–; # go back to this element again
+ target($item); # add back to the list
+ next;
}
}

- Zeile entfernen
+ Zeile einfügen

Die entpsrechende Zeilen könnt ihr an # make sure the target list is in the normal AI format erkennen.

Voila!

Hinweis

Diese Anleitung ist ein praktischer Leitfaden ohne Gewähr.

Weiterführende Literatur

empfehlenswert sind folgende Bücher:

Druckansicht


Autor: admin
Datum: Sonntag, 9. März 2008 13:32
Trackback: Trackback-URL Themengebiet: Linux und mehr

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

Kommentar abgeben