[Postfixbuch-users] postfix - amavis trainieren

ronald zestermann r.zett at gmx.de
Do Mär 3 09:54:46 CET 2005


> 
> Message: 5
> Date: Sat, 26 Feb 2005 02:44:21 +0100
> From: David Nawrot <nawrot at flyfishing.homelinux.com>
> Subject: [Postfixbuch-users] postfix - amavis trainieren
> To: PostfixbuchMailingliste <postfixbuch-users at listi.jpberlin.de>
> Message-ID: <1432790259.20050226024421 at flyfishing.homelinux.com>
> Content-Type: text/plain; charset=ISO-8859-15
> 
> Hallo
> Ich habe mich erstmalig mit der Kombination amavisd-new, 
> spamassassin unf postfix auseinander gesetzt. Beim 
> durchstöbern der spamassassin Seiten bin ich auf die 
> "Lernfähigkeit" von Spamassassin gestoßen. Da nicht alle Spam 
> erkannt wird, kam mir fogende Frage. Kann man eine einzelne 
> Zieladresse nehmen und alle Mail an diese Adresse wird gleich 
> zum Lernen verbarbeitet. Wenn der Ansatz Grund falsch ist, 
> dann bitte in die richtige Richtung schubsen. Ziel soll eine 
> sehr einfache Lösung für das trainieren von Spamassassin 
> sein. Ort der Tätigkeit ist ja meistens an den verschiedenen 
> Mailclients und nicht irgendwann später am Server.
> 
> --
> Mit freundlichen Grüßen
> David Nawrot
> 
> 
> 
> ------------------------------
> 
> Message: 6
> Date: Sat, 26 Feb 2005 02:42:45 +0100
> From: Julian Golderer <glua at 4-ever-server.net>
> Subject: [Postfixbuch-users] amavis - spam problem
> To: "Eine Diskussionsliste rund um das Postfix-Buch."
> 	<postfixbuch-users at listi.jpberlin.de>
> Message-ID: <421FD415.2040401 at 4-ever-server.net>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> guten abend, liebe liste ;)
> 
> wie kann ich in amavisd-new einstellen, dass es für den bayes-filter 
> mehr punkte verteilen soll? ich finde die verteilung sehr 
> gering, denn 
> die meisten spams, welche bei mir sa überwinden, wurden schon mit 
> sa-learn --spam eingelesen, jedoch bekamen sie für den 
> bayes_99 zu wenig 
> punkte um als spam erkannt zu werden.
> 
> gruß,
> julian golderer
> 
> 
> ------------------------------
> 
> Message: 7
> Date: Sat, 26 Feb 2005 02:47:02 +0100
> From: Julian Golderer <glua at 4-ever-server.net>
> Subject: Re: [Postfixbuch-users] postfix - amavis trainieren
> To: "Eine Diskussionsliste rund um das Postfix-Buch."
> 	<postfixbuch-users at listi.jpberlin.de>
> Message-ID: <421FD516.5080807 at 4-ever-server.net>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> David Nawrot wrote:
> 
> > Hallo
> > Ich habe mich erstmalig mit der Kombination amavisd-new, 
> spamassassin
> > unf postfix auseinander gesetzt. Beim durchstöbern der spamassassin
> > Seiten bin ich auf die "Lernfähigkeit" von Spamassassin gestoßen. Da
> > nicht alle Spam erkannt wird, kam mir fogende Frage. Kann man eine
> > einzelne Zieladresse nehmen und alle Mail an diese Adresse 
> wird gleich
> > zum Lernen verbarbeitet. Wenn der Ansatz Grund falsch ist, 
> dann bitte
> > in die richtige Richtung schubsen. Ziel soll eine sehr 
> einfache Lösung
> > für das trainieren von Spamassassin sein. Ort der Tätigkeit ist ja
> > meistens an den verschiedenen Mailclients und nicht 
> irgendwann später am Server.
> > 
> 
> hi,
> 
> ich finde diesen ansatz etwas riskant, denn er könnte von böswilligen 
> benutzern ausgenutzt werden um deinen filter zu manipulieren. 
> außerdem 
> musst du zuerst die orginale spam-nachricht aus der weitergeleiteten 
> mail extrahieren und diese dann an sa-learn weiterleiten. 
> sinnvoll wäre 
> es evtl., wenn du die sender-adresse nutzt, um benutzer-spezifische 
> filter zu aktualisieren.
> 
> gruß,
> julian
> 
> 
Hallo David,

es ist zwar nicht grad zeitnah aber ich habe evtl. eine Lösung für Dich. Es
ist möglich E-Mails per Mail unverfälscht an sa-learn zu übergeben.
Alexander Jousset hat unter 
http://jousset.org/pub/sa-postfix.en.html ein Perlscript veröffentlicht was
dies ermöglicht. Leider ist die Webseite nicht erreichbar. Daher will
ich Dir eine kleine Anleitung anbieten. Dies ist natürlich nur als Beispiel
zu verstehen.
Erstelle ein Perlscript mit dem Namen "sa-wrapper.pl" und dem folgenden
Inhalt:

cut+++++++

#!/usr/bin/perl -w
# Time-stamp: <26 March 2004, 13:00 home>
#
# sa-wrapper.pl
#
# SpamAssassin sa-learn wrapper
# (c) Alexandre Jousset, 2004
# This script is GPL'd
#
# 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;

#Wenn DEBUG = 1 , dann Logfileausgabe unter /tmp/spam_err.log
my $DEBUG = 0;
#Pfad zum tem. Auspacken der Mails
my $UNPACK_DIR = '/var/spool/amavis/mime';
#Pfad zu Binary sa-learn
my $SA_LEARN = '/usr/bin/sa-learn';
#Definieren der Maildomains
my @DOMAINS = qw/gtmp.org winnink.org/;

my ($spamham, $sender) = @ARGV;

sub recurs
{
    my $ent = shift;

    if ($ent->head->mime_type eq 'message/rfc822') {
	if ($DEBUG) {
	    open(OUT, "|$SA_LEARN -D --$spamham --single >/tmp/spam.log.$$
2>&1") or die "Cannot pipe $SA_LEARN: $!";
	} else {
	    open(OUT, "|$SA_LEARN --$spamham --single") or die "Cannot pipe
$SA_LEARN: $!";
	}
    
	$ent->bodyhandle->print(\*OUT);

	close(OUT);
	return;
    }

    my @parts = $ent->parts;

    if (@parts) {
	map { recurs($_) } @parts;
    }
}

my ($domain) = $sender =~ /\@(.*)$/;
unless (grep { $_ eq $domain } @DOMAINS) {
    die "I don't recognize your domain !";
}

if ($DEBUG) {
    MIME::Tools->debugging(1);
    open(STDERR, ">/tmp/spam_err.log");
}
my $parser = new MIME::Parser;
$parser->extract_nested_messages(0);
$parser->output_under($UNPACK_DIR);

my $entity;
eval {
    $entity = $parser->parse(\*STDIN);
};

if ($@) {
    die $@;
} else {
    recurs($entity);
}

$parser->filer->purge;
rmdir $parser->output_dir;

cut+++++++

speichere es am bessten unter /usr/local/bin und installiere folgende
Perlmodule: MIME::Tools, MIME::Parser
Lege für Postfix eine Transport-Map mit folgenden Einträgen an:
spam.spam	sa-spam:
ham.ham	sa-ham:

Folgende Einträge in der master.cf hinzufügen:
sa-spam  unix	-   n   n   -   -   pipe user=vscan:vscan
argv=/usr/local/bin/sa-wrapper.pl spam ${sender}
sa-ham  unix	-   n   n   -   -   pipe user=vscan:vscan
argv=/usr/local/bin/sa-wrapper.pl ham ${sender}

User:Group und Pfade natürlich für Deine Config anpassen.
So...das sollte alles sein was am Mailserver zu tun ist.
Damit die User spam trainieren können müssen sie nur eine mail an
spam at spam.spam senden die die zu trainierende unerkannte Spammail
rfc822-konform als Anhang enthält(muß vom Mailclient unterstützt werden).
Gleiches gilt für Mails die gut sind aber von Spamassassin als Spam
eingestuft wurden. Die Mailadresse lautet dann ham at ham.ham.
Alles in allem eine recht gute Lösung. Allerdings muß ich Julian recht
geben. Der User muß nicht einmal kriminelle Energie besitzen um den
Bayes-Filter aus dem Tritt zu bringen. Unwissen reicht aus. Ein User könnte
zum Beispiel ein Mailarchiv besitzen in dem er Spam gesammelt hat.
Dummerweise sind diese Mails alle aus 2004. Wenn es recht viele sind wird
Spamassassin schnell begreifen das Spam das Datum 2004 trägt. Gleiches gilt
für Weiterleitungen nach dem Motto: Schau dir mal diese Spammail an! Wichtig
für das Training ist der Unverfälschte Inhalt der Mail. Mit einem
Automatismus kannst Du das aber nicht sicherstellen. Du solltest Dir auf
alle Fälle "man sa-learn" ansehen. 

Hoffe das hilft
Ronald Zestermann





Mehr Informationen über die Mailingliste Postfixbuch-users