sa-learn per Email füttern

Mir ist gerade aufgefallen, dass ich nach diesen Umstellungen zwar weiterhin SA mit neuen E-Mails füttern kann ohne Fehlermeldungen und die Bayes Dateien werden auch erneuert, aber mit --dumo magic bekomme ich keine höhere ANzahl an gelernten Spam. Muss ich sa-learn noch irgendwas zusätzlich sagen nachdem der bayes_path geändert wurde?

Killerloop
 
Ja, hatte aber noch kein "yes", immer nur "no" und manchmal "failed".
Es gibt nur "spam", "ham" und "no". Ein "failed" ist doch ein extremes Zeichen dafür, daß hier grundsätzlich noch etwas im Busch ist, oder???

Mein Problem existiert aber auch, wenn ich diese Datei lösche.
Dann laß sie gelöscht.

Wie hast Du eigentlich Deinen SA eingebunden?

-rwxrwxrwx 1 root root 90112 2007-07-11 09:18 bayes_seen*
-rwxrwxrwx 1 root root 1294336 2007-07-11 09:18 bayes_toks*
Da steht nicht wirklich ein Stern hinter den Dateinamen, oder?

/var/lib/nobody/.spamassassin/auto-whitelist.lock
Auch dieser Pfad sollte stutzig machen. Es werden ja immer noch User-Profiles angelegt. Und dann noch für nobody?

Gibt es die Möglichkeit SA noch mehr loggen zu lassen
Nicht das ich wüßte.

huschi.
 
Wie so oft weiss ich nicht genau wieso, aber nun (nach einem reboot) geht es plötzlich.

Mögliche Ursachen könnten aus meiner Sicht gewesen sein:
- Die Verlagerung der bayes Dateien nach /var/qmail/.spamassassin/
(obwohl der Pfad doch frei wählbar sein soll)
- Löschen einer weiteren user_prefs Datei und zwar der von drweb, wenn ich mich recht erinnere
(obwohl durch den Aufruf von spamd mit -x diese ohnehin keine Rolle spielen dürfte)

Naja, leider alles nicht so einfach. Ich finde, was Mailserver anbelangt, könnten die Entwickler mal mehr auf Einfachheit Wert legen... ;-)

Gruß und Dank an Huschi!
Killerloop

PS.: Die * hinter den bays Dateinamen waren schon in der Ausgabe, weil l dort ls -F ist, sind aber kein Bestandteil des Dateinamens, sondern ein Zeichen für die Ausführbarkeit der Dateien.
PPS.: Die Anzahl der Tokens wurde auch nicht erhöht, weshalb ich einfach mal einen reboot gemacht habe. Und danach wurden die Spams gelernt und Bayes funktionierte plötzlich.
 
Last edited by a moderator:
sa-learn sucht im falschen Verzeichnis nach bayes-db

Hallo,

ich habe alles nach der Anleitung eingericht und die Weiterleitung der Spammails an sa-learn funktioniert auch. In der sa-learn.log gibt aber eine reihe von fehlermeldung:
Code:
debug: Score set 0 chosen.
debug: running in taint mode? yes
debug: Running in taint mode, removing unsafe env vars, and resetting PATH
debug: PATH included '/XnirvanaX/bin', which doesn't exist, dropping.
debug: PATH included '/bin', keeping.
debug: PATH included '/usr/bin', keeping.
debug: PATH included '/sbin', keeping.
debug: PATH included '/usr/sbin', keeping.
debug: PATH included '/usr/local/bin', keeping.
debug: PATH included '/usr/local/sbin', keeping.
debug: PATH included '/usr/bin/X11', which doesn't exist, dropping.
debug: Final PATH set to: /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
debug: using "/usr/share/spamassassin" for default rules dir
debug: using "/etc/mail/spamassassin" for site rules dir
debug: mkdir /XnirvanaX/.spamassassin failed: mkdir /XnirvanaX: Keine Berechtigung at /usr/lib/perl5/vendor_perl/5.8.1/Mail/SpamAssassin.pm line 1279
 

debug: using "/XnirvanaX/.spamassassin/user_prefs" for user prefs file
debug: mkdir /XnirvanaX/.spamassassin failed: mkdir /XnirvanaX: Keine Berechtigung at /usr/lib/perl5/vendor_perl/5.8.1/Mail/SpamAssassin.pm line 1279
 Datei oder Verzeichnis nicht gefunden

debug: bayes: no dbs present, cannot scan: /XnirvanaX/.spamassassin/bayes_toks
debug: Score set 0 chosen.
debug: Initialising learner
debug: Initialising learner
debug: Syncing Bayes journal and expiring old tokens...
debug: mkdir /XnirvanaX/.spamassassin failed: mkdir /XnirvanaX: Keine Berechtigung at /usr/lib/perl5/vendor_perl/5.8.1/Mail/SpamAssassin.pm line 1279
 Datei oder Verzeichnis nicht gefunden

debug: mkdir /XnirvanaX/.spamassassin failed: mkdir /XnirvanaX: Keine Berechtigung at /usr/lib/perl5/vendor_perl/5.8.1/Mail/SpamAssassin.pm line 1279
 Datei oder Verzeichnis nicht gefunden

bayes expire_old_tokens: lock: 19837 cannot create tmp lockfile /XnirvanaX/.spamassassin/bayes.lock.h47200.serverkompetenz.net.19837 for /XnirvanaX/.spamassassin/bayes.lock: Datei oder Verzeichnis nicht gefunden

debug: Syncing complete.
debug: Removing Markup
debug: Learning Spam
debug: uri tests: Done uriRE
debug: mkdir /XnirvanaX/.spamassassin failed: mkdir /XnirvanaX: Keine Berechtigung at /usr/lib/perl5/vendor_perl/5.8.1/Mail/SpamAssassin.pm line 1279
 Datei oder Verzeichnis nicht gefunden

debug: bayes: 19837 untie-ing
debug: bayes: 19837 untie-ing
lock: 19837 cannot create tmp lockfile /XnirvanaX/.spamassassin/bayes.lock.h47200.serverkompetenz.net.19837 for /XnirvanaX/.spamassassin/bayes.lock: Datei oder Verzeichnis nicht gefunden
Learned from 0 message(s) (1 message(s) examined).

Anscheinend sucht sa-leran im falschen Verzeichnis nach den bayes-db. Meine db liegen in /root/.spamassassin.

In der procmail.log findet sich auch noch eine Fehlermeldung.
Code:
procmail: [19731] Sat Jul 21 15:50:05 2007
procmail: Assigning "SHELL=/bin/sh"
procmail: Assigning "LANGUAGE=de"
procmail: Assigning "LANG=de_DE"
procmail: Match on "spam@domain.de"
procmail: Executing "/usr/local/bin/sa-wrap.pl,--spam"
Using an array as a reference is deprecated at /usr/lib/perl5/site_perl/5.8.1/Date/Format.pm line 88.
Using an array as a reference is deprecated at /usr/lib/perl5/site_perl/5.8.1/Date/Format.pm line 217.
procmail: [19731] Sat Jul 21 15:50:08 2007
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
  Folder: /dev/null                                  0
procmail: Notified comsat: "web3p3@0:/dev/null"
Kann mir da jemand eine Tipp geben?
 
Last edited by a moderator:
Anscheinend sucht sa-leran im falschen Verzeichnis nach den bayes-db.
Richtig! Schlussfolgerung: User-Prefs abschalten. (siehe -x)
Meine db liegen in /root/.spamassassin.
Schlechter Ort!
Niemand außer root sollte im root-Verzeichnis was zu suchen haben.
Für sowas ist das /var/-Verzeichnis da.

Executing "/usr/local/bin/sa-wrap.pl,--spam"
Falsche Version! Nutze die neue sa-wrapper.pl.
Am besten in der bearbeiteten Version von hier:
SpamAssassin: sa-learn per Email füttern

huschi.
 
Richtig! Schlussfolgerung: User-Prefs abschalten. (siehe -x)

hier meine etc/sysconfig/spamd
Code:
## Path:           Network/Mail/Spamassassin
## Description:    Arguments for the spam dæmon
## Type:           string
## Default:        "-d -c -a -L"
## ServiceRestart: spamd
#
# The arguments passed to spamd.
# See spamd(1) man page and README.spamd
# Please take care of security considerations!
# Default is "-d -c -a -L"
SPAMD_ARGS="-d -x -q -L"
# OPTIONS="--sql-config --nouser-config --local --daemonize --max-children=5"

Damit sollten doch die user-prefs abgeschaltet sein, oder?

Da Verzeichnis für die bayes-db's habe ich zwischenzeitlich schon nach /var/spool/spamassassin verlegt. Seitdem funktioniert autolearn problemlos.

Am besten in der bearbeiteten Version von hier:
SpamAssassin: sa-learn per Email füttern

Jedes Mal wenn ich das Archiv sa-wrapper.pl.gz downloade und dann entpacken möchte, bekomme ich die Fehlermeldung, dass das Archiv beschädigt ist. Kannst du den Code der sa-wrapper.pl bitte posten.
 
Also bei mir funktioniert das Archiv einwandfrei:

Code:
#!/usr/bin/perl -w
# Time-stamp: <05 April 2004, 13:37 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;

my $DEBUG = 0;
my $LOGFILE = '/var/log/sa-learn.log';
my $UNPACK_DIR = '/var/spool/unpack';
my $SA_LEARN = '/usr/bin/sa-learn';
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) {
			#unlink "/tmp/spam.log.$$" if -e "/tmp/spam.log.$$";
			open(OUT, "|$SA_LEARN -D $spamham --single >>$LOGFILE 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;
 
sa-wrapper

hi,

danke für das Script. Zu meinem eigentlichen Problem, dass sa-learn in /XnirvanaX/.spamassassin/ nach den bayes-db sucht. Ich weiß immer noch nicht genau warum er dies tut. Userprefs sind meiner Meinung nach abgeschaltet (siehe oben).

Ich habe jetzt in sa-wrapper mal die letzten beiden Zeilen auskommiert, so daß die entpacken Mails nicht gelöscht werden. Und sa-learn die Mails manuell vorgeworfen:
Code:
 sa-learn --spam -D --file /var/spool/unpack/msg1/*.eml

Wie man an der Ausgabe sieht, sucht er jetzt im richtigen Verzeichnis. Weiß jemand warum sa-learn anders reagiert (sucht bayes-db in anderen Verzeichnis) wenn es durch den sa-wrapper aufgerufen wird.

Code:
debug: Score set 0 chosen.
debug: running in taint mode? yes
debug: Running in taint mode, removing unsafe env vars, and resetting PATH
debug: PATH included '/sbin', keeping.
debug: PATH included '/usr/sbin', keeping.
debug: PATH included '/usr/local/sbin', keeping.
debug: PATH included '/root/bin', keeping.
debug: PATH included '/usr/local/bin', keeping.
debug: PATH included '/usr/bin', keeping.
debug: PATH included '/usr/X11R6/bin', keeping.
debug: PATH included '/bin', keeping.
debug: PATH included '/usr/games', keeping.
debug: PATH included '/opt/gnome/bin', keeping.
debug: Final PATH set to: /sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin
debug: using "/usr/share/spamassassin" for default rules dir
debug: using "/etc/mail/spamassassin" for site rules dir
debug: using "/root/.spamassassin/user_prefs" for user prefs file
debug: bayes: 20016 tie-ing to DB file R/O /var/spool/spamassassin/bayes_toks
debug: bayes: 20016 tie-ing to DB file R/O /var/spool/spamassassin/bayes_seen
debug: bayes: found bayes db version 2
debug: Score set 2 chosen.
.....

debug: bayes: Learned '000301c7ce31$8c111e80$316cec57@gdwog.dsiz'
Learned from 2 message(s) (2 message(s) examined).

Im Gegensatz zum manuellen Aufruf von sa-learn steht beim Aufruf durch sa-wrapper zusätzlich folgende Zeile im log:

Code:
debug: PATH included '/XnirvanaX/bin', which doesn't exist, dropping.

Wo kommt die her?
Ich bitte um Hilfe. Danke
 
dass sa-learn in /XnirvanaX/.spamassassin/ nach den bayes-db sucht.
Er sucht, aber was findet er, bzw. welche Bayes-DB nimmt er dann?

Im Gegensatz zum manuellen Aufruf von sa-learn steht beim Aufruf durch sa-wrapper zusätzlich folgende Zeile im log:
Ja, weil Du manuell als root aufrufst und der sa-wrapper als User '...'.
Std.mässig wird für den User der PATH mit '$HOME/bin/' erweitert. Aber der PATH ist irrelevant.

huschi.
 
Morgen Leute,

ich muss mich mal mit ranhängen. Ich hab Deine Anleitung, huschi, mal nachgearbeitet, und habe dass problem, dass das sa-wrapper script mit folgender Meldung stehen bleibt:

Code:
 # perl /usr/local/bin/sa-wrapper.pl --spam
Argument "2.00_02" isn't numeric in subroutine entry at /usr/lib/perl5/vendor_perl/5.8.8/MIME/Head.pm line 119.
Argument "2.00_02" isn't numeric in subroutine entry at /usr/lib/perl5/vendor_perl/5.8.8/MIME/Head.pm line 120.
Argument "2.00_02" isn't numeric in subroutine entry at /usr/lib/perl5/vendor_perl/5.8.8/MIME/Head.pm line 143.
Argument "2.00_02" isn't numeric in subroutine entry at /usr/lib/perl5/vendor_perl/5.8.8/MIME/Entity.pm line 230.
Argument "2.00_02" isn't numeric in subroutine entry at /usr/lib/perl5/vendor_perl/5.8.8/MIME/Entity.pm line 231.


Dazu gibt google allerdings nicht sehr viel verwertbares raus. Hier eine entsprechnde Zeile aus dem Head.pm Script:

Code:
use Mail::Header 1.09 ();
use Mail::Field  1.05 ();

Ich bin geiwss kein perl spezialist, genaugenommen habe ich mit perl eigentlich gar nix am hut, aber wäre es denkbar, dass die Funktion Mail::Header ein Problem hat, wenn es denn eine ist?

Ich habe die Pakete zuerst von CPAN von Hand installiert, alle abhängikeiten mit eingeschlossen. Da habe ich das Problem schon gehabt.

Der zweite versuch war, alle Pakete über yast zu installieren:

perl 5.8.8
perl-FileHandle-Unget
perl-HTML-parser
perl-IO-stringy
perl-MIME-tools
perl-Mailtools

ohne weitere Fehler.

Server ist ein suse 10.1 mit plesk 8.2.0

Bin da echt ratlos :(
 
Du hast einen Versions-Konflikt.
Der Fehler war die Pakete über CPAN zu installieren.
Da CPAN kein deinstall kennt, hast Du nun ein Problem. :)

huschi.
 
Ähm... na gut, wie wärs alle Ordner in /usr/lib/perl/..../vendor..../5.8.8/ umzubennenen, die ich von CPAA installiert habe? danach die Paktete von yast nochmal runter und neu rauf....?

Gute idee oder nicht?:o
 
Was machst Du falls z.B. Yast oder irgendein Installations-Script Perl braucht und dies nicht ausführen kann, weil die ganzen Bibliotheken nicht vorhanden sind?

Ziehe die entsprechenden RPM-Pakete per Hand und installier sie mit "rpm --force".

huschi.
 
Hallo Zusammen,

nachdem das ganze jetzt bei mir läuft, bekomme ich folgende Fehlermeldung:
Code:
Hi. This is the qmail-send program at h870054.serverkompetenz.net.
I'm afraid I wasn't able to deliver your message to the following addresses.
This is a permanent error; I've given up. Sorry it didn't work out.

<spam@h870054.serverkompetenz.net>:
Sorry. Although I'm listed as a best-preference MX or A for that host,
it isn't in my control/locals file, so I don't treat it as local. (#5.4.6)

--- Below this line is a copy of the message.

Kann mir jemand sagen wie ich dieses Abstellen kann ???

Vielen Dank schon mal im voraus

P.S. Ich habe hier schon im Board und bei google gesucht, aber bisher habe nix brauchbares gefunden.

gruß
tkohberg
 
Verrätst Du uns noch wie Du den sa-wrapper eingebunden hast?
Wahrscheinlich in der .qmail, oder? Was steht da konkret drin?

huschi.
 
In meiner .qmail steht dieses
Code:
&spam
| /var/qmail/bin/preline /usr/local/bin/sa-wrapper.pl --spam
#./Maildir/

Ich schreibe gleich dazu , ich habe einen vserver A von Strato mit suse 10.1 und Plesk 8.2
 
Na, ich geb mal meinen Senf dazu:

Erst mal danke an Huschi für seine Arbeit und für das veröffentlichen der Doku.

Das meiste im Thread habe ich durchgelesen, es kam irgendwo mal auf, dass ein Server geblockt wird, wenn er mehr als 100 Mails abzuarbeiten hat.

Nachdem ich das eingerichtet habe, habe ich folgenden test gemacht. Vorneweg: Ein 64x2 3800+ mit 1GB ram macht ca 5 Mails/sek...

Ich habe dem Server mehrere mails geschickt mit Spammails im Anhang, das kleinste beinhaltete 50 Mails, die grösste Mail beinhaltete 2400 Mails und wog etwas mehr als 40MB, aber auch das ist kein Problem. Man muss das Ding nur arbeiten lassen.

Sowas macht man auch nicht jeden Tag, ich weiss, aber ein gutes Gefühl ist es trotzdem zu wissen, dass die Kiste arbeitet und nicht nur so vor sich hindümpelt:


Code:
load average: 1.39, 1.24, 0.84

Also, danke nochmal :)

Gruß Manfred
 
Ok, nachdem ich nun auch das greylisting installiert habe, dachte ich erst, ich habe mir die Mühe hier umsonst gemacht. Allerdings bekam ich heute eine Mail rein, die das greylisting überwunden hat. Da ich meinen sa mit tausenden von mails angelernt habe, gehe ich wegen dem eintrag:
Code:
3.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%
Davon aus, dass es ein Treffer aufgrund von sa-learn ist. Ist das korrekt?
 
Back
Top