spamassassin - Kein Autolearn - Wieso?

EPMS

Registered User
Hallo Zusammen,
ich habe hier einen Suse 10.3 Server mit postfix, amavis, maildrop und spamassassin. Das läuft soweit super. Jetzt wollte ich mich mal mit autolearn, white- und blacklist beschäftigen.

In der local.cf von Spamassassin steht folgendes:
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0

Im Header einer Spam-Mail steht folgendes:
X-Spam-Flag: YES
X-Spam-Score: 33.932
X-Spam-Level: *********************************
X-Spam-Status: Yes, score=33.932 tagged_above=-1000 required=4
tests=[DCC_CHECK=1.37, HELO_DYNAMIC_IPADDR2=4.395,
HELO_DYNAMIC_SPLIT_IP=4.199, HELO_EQ_IP_ADDR=1.119,
HELO_MISMATCH_NET=0.611, RCVD_IN_BL_SPAMCOP_NET=2.188,
RCVD_IN_PBL=0.509, RCVD_IN_XBL=2.896, RCVD_NUMERIC_HELO=2.599,
RDNS_NONE=0.1, STOX_REPLY_TYPE=0.001, TVD_FINGER_02=2.72,
URIBL_AB_SURBL=1.613, URIBL_JP_SURBL=2.857, URIBL_OB_SURBL=2.132,
URIBL_SC_SURBL=2.523, URIBL_WS_SURBL=2.1]

Ich finde da nichts von autolearn? Muss ich das sonst noch wo einschalten?

Danke im voraus für Hilfe
 
Hi, Spamassassin lernt erst wenn er mindestens(!) 200 spam und ham Nachrichten per sa-learn bekommen hat!
Ein "bayes_auto_learn 1" schadet auch nicht in der Config, obwohl ich denke dass dies automatisch aktiviert ist, falls nicht deaktiviert.

poste bitte mal die Ausgabe von:

Code:
sa-learn --dump magic -p /pfad/zur/spamassassin-config


lg Basti
 
Last edited by a moderator:
Da kommt folgendes
0.000 0 3 0 non-token data: bayes db version
0.000 0 0 0 non-token data: nspam
0.000 0 0 0 non-token data: nham
0.000 0 0 0 non-token data: ntokens
0.000 0 0 0 non-token data: oldest atime
0.000 0 0 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 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

Sieht nicht so aus, als wenn da was aktiviert ist.
 
Nein, sieht wirklich nicht so aus :-)
Also brauchst Du erstmal Spam und Ham!

Schick mir doch bitte mal Deine eMail Adresse per PM zu, dann bekommst Du von mir eine Bayes DB, die schon ca 1500 Ham und 1600 Spam enthält, das ist eine gute Grundlage.

lg Basti
 
So, habe jetzt ein bischen was mit sa-learn rumgespielt. Nun sieht es folgendermaßen aus
0.000 0 3 0 non-token data: bayes db version
0.000 0 244 0 non-token data: nspam
0.000 0 0 0 non-token data: nham
0.000 0 15708 0 non-token data: ntokens
0.000 0 1211549833 0 non-token data: oldest atime
0.000 0 1212146032 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 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

Meine E-Mail schicke ich dir per PM
 
Spamassassin lernt erst wenn er mindestens(!) 200 spam und ham Nachrichten per sa-learn bekommen hat!
Sorry, aber diese Aussage ist falsch!
Auto-Learn arbeitet bereits von 0 ab.
Der Bayes-Filter arbeitet erst mit den jeweils 200 angelernten Spam- und Ham-Nachrichten.

Da war bestimmt noch ein anderer Haken wie z.B. user.prefs o.ä.

huschi.
 
Hallo Huschi,
was genau meinst du mit user.prefs? Momentan habe ich für alle User nur eine Config.
 
Momentan habe ich für alle User nur eine Config.
Ach ja?
Was macht Dich da so sicher? ;)
Und woher soll ich das wissen? Es steht nirgends und Dein Ausschnitt aus der local.cf belegt dies auch nicht.

Ganze einfache Gegenfrage:
Wo liegt bei Dir die Bayes-Datenbank?

huschi.
 
In dem Du nach Dateien mit "bayes*" suchst.
Und nicht schon beim ersten Fundort aufhören. :)

huschi.
 
Und alle Mailuser dürfen auf die Datei im root-Verzeichnis zugreifen? ;)

PS: Überhaupt schon mal gegoogled wo und wie man diese Dateien wirklich ablegt?
Evtl. zumindest auf huschi.net nachgeschaut?

huschi.
 
So, habe mich mal auf huschi.net umgeschaut. Also, wenn ich das jetzt richtig verstanden habe, sollte ich eine globale bayes-DB nutzen. Habe ich ja auch.
Allerdings sollte die nicht in /root stehen. Das sollte ich dann mal ändern.

Sehe ich das richtig, dass die DB noch sehr klein ist, weil er noch keine Mails gelernt hat?

Edit:
Jetzt habe ich noch bayes_token und bayes_seen gefunden. Die gehören ja auch zu sa-learn. Über google habe ich jetzt einen Beitrag gefunden, dass man sa-learn manuell mit dem user aufrufen soll, mit dem spamassassin auch gestartet wird.
Ich habe jetzt die besagten bayes_token und _seen in /root/.spamassassin aber auch in /var/amavis/.spamassassin stehen. Die Dateien in /var wurden heute schon aktualisiert. Die in /root nicht. Die wurden das letzte mal aktualisiert, als ich sa-learn als root aufgerufen hat.

Allerdings verstehe ich dann jetzt nicht, wieso die bayes-db nur in root steht und nicht in /var.
 
Last edited by a moderator:
Ja, die Datenbank ist noch klein weil keine bis wenige Informationen enthalten sind. => keine Mails gelernt.

Man dar sich nicht so auf dieses autoleran versteifen. Das kommt irgendwann!

Ich kann mich zusätlich noch daran erinnern, dass bei dem Anlernen der Datenbank der Benutzer von Bedeutung war.

Bei mir läuft Spamassassin (Deamon) unter spamd. Ich habe die Datenbank wie folgt angelernt.

Ein IMAP Konto eingerichtet.
Einen Ordner Spam angelegt, falls das nicht schon automatisch geschehen ist.
Dann habe ich angefangen zu selektieren. Von allen E-Mail Adressen die "guten" mindestens 200 in den Posteingang von dem neuen IMAP konto gelegt.
Das ganze habe ich auch mit den "schlechten" gemacht, die ich den Spam Ordner gelegt habe.

Nach dieser ganzen Aktion habe ich Spamassassin mit diesen Daten angelernt:

Code:
sa-learn --spam --progress -u spamd /var/spool/mail/deinedomain.tld/learn/Maildir/.spam/cur
sa-learn --ham --progress -u spamd /var/spool/mail/deinedomain.tld/learn/Maildir/cur

Ich möchte nochmal anmerken, dass es vielleicht wichtig ist, den User (Bei mir "spamd") mit anzugeben.

Seitdem funktioniert alle wunderbar.

Noch ein kleiner Grundsatz:

Es bringt mehr, wenn die Datenbank mit eigenen Spam und Ham Mails gefüttert wird. Wenn möglich sollten die Mails so aktuelle wie möglich sein.
=> So kann sich Bayes auf deinen Mailverkehr "persönlich" einstellen

Eine Bayes-DB für jeden User ist vorzuziehen. Da sie so für jeden "persönlich" arbeitet.
=> Unterschiedliche User bekommen unterschiedliche Mails (Spammails).

Ich persönlich verwende auch "nur" eine globale DB. Es funktioniert wunderbar. Für jeden User eine eigene DB zu pflegen wäre mir zu viel Aufwand.
Zusätzlich setze ich Greylisting ein => Spamassassin hat eigentlich nichts mehr zu tun. Und wenn doch landen Sie dank Bayes und RBL Tests bis jetzt (toi toi toi) richtig im Spamordner!

Gruß,

Gammla
 
@gammla

Danke für deine Ausführung. Das ist schonmal sehr Interessant. Momentan beschäftigen mich aber noch einige Fragen. Da wären...

- ich suche auch eine Möglichkeit, dass meine User bestimmt E-Mailadresse auf eine Whitelist setzen können. Also E-Mailadressen oder Mails von einer bestimmten Domain, die auf alle Fälle nicht als Spam markiert werden.
Kann ich sowas erreichen, in dem ich solche E-Mails über sa-learn anlerne? Werden dieses Absender dann imer durch gelassen?

- Deiner Ausführung bzgl. einer eigenen DB für jeden User stimme ich eigentlich zu. Wie kann ich das realisieren? Meine User sind ja in einer MySQL-DB angelegt. Die haben kein eigenes Home-Verzeichniss.

- Wäre eine eigene User DB mittels MySQL realisierbar? Ich habe dazu folgendes gefunden Bayes-DB in MySQL-Datenbank. Würde sowas Sinn machen? Auch bzgl. Geschwindigkeit?

Vielleicht kannst du oder jemand anders mir da ja weiterhelfen.,
 
So, ich habe jetzt noch ein bischen die DB angelernt. Wenn ich jetzt eine Spam Mail bekomme steht im Header überhaupt nichts von autolearn. Ein Header sieht z.B. so aus
X-Spam-Flag: YES
X-Spam-Score: 19.485
X-Spam-Level: *******************
X-Spam-Status: Yes, score=19.485 tagged_above=-1000 required=4
tests=[DCC_CHECK=1.37, DIGEST_MULTIPLE=0.001, HELO_EQ_BR=0.955,
HELO_MISMATCH_BR=2.4, HTML_MESSAGE=0.001, RAZOR2_CF_RANGE_51_100=0.5,
RAZOR2_CF_RANGE_E8_51_100=1.5, RAZOR2_CHECK=0.5,
RCVD_IN_BL_SPAMCOP_NET=2.188, RCVD_IN_PBL=0.509, RDNS_NONE=0.1,
URIBL_AB_SURBL=1.613, URIBL_JP_SURBL=2.857, URIBL_SBL=2.468,
URIBL_SC_SURBL=2.523]

sa-learn --dump magic -p /etc/spamassassin zeigt folgendes
0.000 0 3 0 non-token data: bayes db version
0.000 0 792 0 non-token data: nspam
0.000 0 272 0 non-token data: nham
0.000 0 58244 0 non-token data: ntokens
0.000 0 1118945005 0 non-token data: oldest atime
0.000 0 1212672555 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 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
In der local.cf steht folgendes
##########################
# bayes konfiguration #
##########################
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0

Müsste autolearn dann im Header nicht auftauchen?
 
Müsste autolearn dann im Header nicht auftauchen?
Es müßte unter den Tests auch BAYES_* erscheinen.

Ergo, nutzt Dein SA kein Bayes. Da er dieses nicht nutzt sieht er auch überhaupt nicht ein autolearn auszuführen.

Wo liegt Deine local.cf?
Wie hast Du SA überhaupt eingebunden?

huschi.
 
Also, die local.cf steht in /etc/spamassassin

local.cf
rewrite_header Subject ****SPAM(_SCORE_)****
required_score 4.8
report_safe 1
ifplugin Mail::SpamAssassin::Plugin::URIDNSBL
uridnsbl_skip_domain suse.de opensuse.org suse.com suse.org
uridnsbl_skip_domain novell.com novell.org novell.ru novell.de novell.hu novell.co.uk
endif # Mail::SpamAssassin::Plugin::URIDNSBL
auto_whitelist_factor 0.03
##########################
# bayes konfiguration #
##########################
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
bayes_auto_learn_threshold_nonspam 0.1
bayes_auto_learn_threshold_spam 12.0

############################
# dcc konfiguration #
############################
use_dcc 1
dcc_path /usr/local/bin/dccproc

############################
#pyzor konfiguration #
############################
#pyzor_path /usr/local/bin/pyzor
#pyzor_add_header 1
#pyzor_max 3

############################
#razor konfiguration #
############################
use_razor2 1
razor_config /var/spool/amavisd/razor-agent.conf

############################
# Andere Module benutzen #
############################
skip_rbl_checks 0

############################
# Allgemeines #
############################
rbl_timeout 4
ok_locales all
dns_available yes

############################
# Reports #
############################
clear_report_template
report Diese Mail wurde von der Installation des SpamAssassin Spam-Filters als
report Spam erkannt. Sollte diese Nachricht zu Unrecht als Spam markiert worden sein,
report dann bitte diese Mail an michael.linke@epms.de weiterleiten (wenn moeglich
report als Anlage!). Vielen Dank!
report Die Originalnachricht ist dieser E-Mail als Anhang beigefuegt.
report
report Content analysis details: (_HITS_ points, _REQD_ required)
report
report
report " Pkt Regel Name Beschreibung"
report ---- ---------------------- --------------------------------------------------
report _SUMMARY_

clear_unsafe_report_template
unsafe_report Diese Nachricht ist nicht komplett in plain text gewesen, so dass es
unsafe_report evtl. gefaehrlich ist, sie zu oeffnen, da die Mail moeglicherweise
unsafe_report einen Virus enthalten koe¶nnte. Wer sie dennoch anschauen moechte, sollte
unsafe_report dafuer besser einen Editor verwenden!

Wie ich SA eingebunden habe, ist eigentlich eine gute Frage. Mir fällte gerade auf, dass ich in der maildrop SA nicht starte.
Es wird doch über amavis gestartet. Oder sehe ich das falsch? Spam Mails werden ja auch markiert.
Hier nochmal meine maildrop config
logfile "/var/log/maildrop"
USER=$3
DOMAIN=$4
#import SENDER
DEFAULT=/srv/email/$DOMAIN/$USER/
DOMAINDIR=/srv/email/$DOMAIN/
SPAMDIR = $DEFAULT.Spam/
TRASHDIR = $DEFAULT.Trash/
MAILDIR = $DEFAULT

`test -d $DOMAINDIR` # check if dir exist
if ($RETURNCODE == 1)
{

`mkdir -p $DOMAINDIR` # create dirs with parents
}
`test -d $MAILDIR` # check if dir exist
if ($RETURNCODE == 1)
{

`maildirmake $MAILDIR` # create maildir
`maildirmake $SPAMDIR`
`maildirmake $TRASHDIR`
`cp /srv/email/template/courierimapsubscribed $MAILDIR`
`cp /srv/email/template/mailfilter.conf $MAILDIR`
}

if (/^X-Spam-Status: Yes/)
to $SPAMDIR
 
Back
Top