• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

spamassassin trainieren (global?)

Status
Für weitere Antworten geschlossen.
Hallo zusammen,

derzeit scanne ich mit SA sehr viele SpamMails von vielen Usern. Arbeitet SA global, so dass es reicht oder müsste ich theoretisch mit jedem User scannen? Oder reicht es, die SA-Files aus dem root-Ordner in jeden anderen home-Ordner der Benutzer zu kopieren?
Irgendwie wird der SPAM vieler User nicht rausgefiltert, obwohl ich fleissig trainiere. (sowohl spam als auch ham)
 
Wenn die Mails beim Postfix ankommen und dann über amavisd an den SA weitergereicht wird, wird jede Mail unabhängig von user geprüft. Da du uns aber nichts über deine Konfiguration sagst wird eine weitere Antwort schwer.
 
Mailconfig:

OpenXchange
Cyrus IMAP
Postfix
Fechtmail
amavisd
SA

Habe nur irgendwo gelesen, dass SA global oder userabhängig filtern kann. Das hat mich verwundert. Acuh trainiere ich wie ein Blöder jeden Tag 30-40 Mails aber es nimmt nicht ab. Mitlerweile steht mein Telefon kaum noch still.
 
Hallo, dass würde mich auch mal interessieren, da ich mir selber auch nicht sicher bin, ob er wirklich trainiert wird.

Ich habe eine ähnliche Konfiguration, nur ohne OpenXchange und Fetchmail.
Ich trainire meinen SA immer mit der Option -u und gebe dort als Benutzer vscan ein, da draunter auch amavisd läuft. Wenn ich sa-learn danach nochmal als root ohne -u vscan laufen lasse zeigt er mir auch keine neuen Nachrichten an von denen er lernen konnte. Er filtert auch recht gut, aber so ganz sicher bin ich mir eben auch nicht.
 
Bei mir läuft das so:
Alle Mails laufen am Anfang immer durch den SA. Wenn noch Spam bei den Benutzern ankommt, schieben die alles in den Ordner SPAM den jeder Benutzer hat. Dann läuft Nachts SA durch alle Ordner der Benutzer und lernt anhand der Spammails in den Ordnern.
Meine Konfiguration:
Postfix, amavisd-new Spamassassin und clamav.
Hier das Skript:
Code:
SA=/usr/bin/sa-learn
for i in `ls -d /var/spool/imap/user/*`
do
$SA --no-sync --dbpath /var/spool/amavis/.spamassassin/ --spam $i/SPAM/
done
$SA --no-sync --dbpath /var/spool/amavis/.spamassassin/ --spam /var/spool/amavis/virusmails/s*
 
Hallo, danke für den Tipp, jetzt weis ich wo das Problem lag. Mit dem Pfad zur Datenbank behält SA seine Lernfortschritte nun auch. :)
 
Ich muss einen Datenbankpfad angeben? Na super, gut, dass sowas in irgendeiner Doku auch drin steht.
Gut, dass ich die letzte Woche erstmal Spam gesammelt habe und nun nicht direkt alles lösche.
Durchforste von manchen Benutzern, bei denen es ganz schlimm ist, die Postfächer schon manuell und packs in den Spamordner, weil sie sonst alles via POP3 abrufen und löschen.
Werde es Montag direkt testen.
 
Leider ist mein Problem immer noch nicht gelöst.

Ich habe mitlerweile über 300 Mails weiter anlernen lassen und trotzdem habe ich bisher keine einzige als Spam gekennzeichnete.
Merkwürdigerweise gibt es 2 verschiedenen Konfigurationen. Einmal die local.cf von Spamassassin, in der ich die Punktzahl mitlerweile auf 3.2 gestellt habe. Dann gibt es noch die amavisd.conf. Dort habe ich auch Veränderungen vorgenommen, jedoch immer noch kein Erfolg.
Hab die confs mal drangehangen.

Ich hab die Subjects so merkwürdig genannt, damit ich nachher unterscheiden kann, ob die Mail von amavis, spamassassin oder 1und1 Spamfilter erkannt worden sind, damit ich weiß, was überhaupt funktioniert.

amavisd.conf
Code:
use strict;
$MYHOME = '/var/spool/amavis';
$mydomain = 'schmidt-mg.de';
$daemon_user = 'vscan';
$daemon_group = 'vscan';
$TEMPBASE = $MYHOME;            # (must be set if other config vars use is)
$ENV{TMPDIR} = $TEMPBASE;       # wise to set TMPDIR, but not obligatory
$max_servers  =  2;   # number of pre-forked children          (default 2)
$max_requests = 10;   # retire a child after that many accepts (default 10)
$child_timeout=5*60;  # abort child if it does not complete each task in n sec
@local_domains_acl = ( ".$mydomain" );  # $mydomain and its subdomains
$unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket
$inet_socket_port = 10024;        # accept SMTP on this local TCP port
@inet_acl = qw( 127.0.0.1 );      # allow SMTP access only from localhost IP
$DO_SYSLOG = 1;                   # (defaults to false)
$LOGFILE = "$MYHOME/amavis.log";  # (defaults to empty, no log)
$log_level = 2;           # (defaults to 0)
$log_templ = '[? %#V |[? %#F |[?%#D|Not-Delivered|Passed]|BANNED name/type (%F)]|INFECTED (%V)], #
<%o> -> [<%R>|,][? %i ||, quarantine %i], Message-ID: %m, Hits: %c';

$final_virus_destiny      = D_BOUNCE;  # (defaults to D_BOUNCE)
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested

# Notify virus sender?
#$warnvirussender = 0;  # (defaults to false (undef))
# Notify spam sender?
#$warnspamsender = 0;   # (defaults to false (undef))
# Notify sender of banned files?
#$warnbannedsender = 1; # (defaults to false (undef))
# Notify sender of syntactically invalid header containing non-ASCII characters?
#$warnbadhsender = 1;   # (defaults to false (undef))
# Notify virus (or banned files) RECIPIENT?
#  (not very useful, but some policies demand it)
#$warnvirusrecip = 1;   # (defaults to false (undef))
#$warnbannedrecip = 1;  # (defaults to false (undef))
# Notify also non-local virus/banned recipients if $warn*recip is true?
#  (including those not matching local_domains*)
$warn_offsite = 1;      # (defaults to false (undef), i.e. only notify locals)

$viruses_that_fake_sender_re = new_RE(
  qr'nimda|hybris|klez|bugbear|yaha|braid|sobig|fizzer|palyh|peido|holar'i,
  qr'tanatos|lentin|bridex|mimail|trojan\.dropper|dumaru|parite|spaces'i,
  qr'dloader|galil|gibe|swen|netwatch|bics|sbrowse|sober|rox|val(hal)?la'i,
  qr'frethem|sircam|be?agle|tanx|mydoom|novarg|shimg|netsky|somefool|moodown'i,
  qr'@mm|@MM',    # mass mailing viruses as labeled by f-prot and uvscan
  qr'Worm'i,      # worms as labeled by ClamAV, Kaspersky, etc
  [qr'^(EICAR|Joke\.|Junk\.)'i         => 0],
  [qr'^(WM97|OF97|W95/CIH-|JS/Fort)'i  => 0],
  [qr/.*/ => 1],  # true by default  (remove or comment-out if undesired)
);

$virus_admin = "virusalert\@$mydomain";
# $virus_admin = undef;   # do not send virus admin notifications (default)
# $virus_admin = {'not.example.com' => '', '.' => 'virusalert@example.com'};
# $virus_admin = 'virus-admin@example.com';

# equivalent to $virus_admin, but for spam admin notifications:
# $spam_admin = "spamalert\@$mydomain";
# $spam_admin = undef;    # do not send spam admin notifications (default)
# $spam_admin = {'not.example.com' => '', '.' => 'spamalert@example.com'};

#advanced example, using a hash lookup table:
#$virus_admin = {
# 'baduser@sub1.example.com' => 'HisBoss@sub1.example.com',
# '.sub1.example.com'  => 'virusalert@sub1.example.com',
# '.sub2.example.com'  => '',                  # don't send admin notifications
# 'a.sub3.example.com' => 'abuse@sub3.example.com',
# '.sub3.example.com'  => 'virusalert@sub3.example.com',
# '.example.com'       => 'noc@example.com',   # catchall for our virus senders
# '.'                  => 'virusalert@hq.example.com',  # catchall for the rest
#};

$mailfrom_notify_admin     = "virusalert\@$mydomain";
$mailfrom_notify_recip     = "virusalert\@$mydomain";
$mailfrom_notify_spamadmin = "spam.police\@$mydomain";

$mailfrom_to_quarantine = '';   # override sender address with null return path

$QUARANTINEDIR = '/var/spool/amavis/virusmails';

#$virus_quarantine_method = "local:virus-%i-%n";    # default
#$spam_quarantine_method  = "local:spam-%b-%i-%n";  # default
#
#use the new 'bsmtp:' method as an alternative to the default 'local:'
#$virus_quarantine_method = "bsmtp:$QUARANTINEDIR/virus-%i-%n.bsmtp";
#$spam_quarantine_method  = "bsmtp:$QUARANTINEDIR/spam-%b-%i-%n.bsmtp";


#$virus_quarantine_to  = 'virus-quarantine';    # traditional local quarantine
#$virus_quarantine_to = 'infected@';           # forward to MTA for delivery
#$virus_quarantine_to = "virus-quarantine\@$mydomain";   # similar
$virus_quarantine_to = 'virusmail@schmidt-mg.de';  # similar
#$virus_quarantine_to = undef;                 # no quarantine
#
#$virus_quarantine_to = new_RE(                # per-recip multiple quarantines
#  [qr'^user@example\.com$'i => 'infected@'],
#  [qr'^(.*)@example\.com$'i => 'virus-${1}@example.com'],
#  [qr'^(.*)(@[^@])?$'i      => 'virus-${1}${2}'],
#  [qr/.*/                   => 'virus-quarantine'] );

# similar for spam
# (the default value is undef, meaning no quarantine)
#
$spam_quarantine_to = virusmail@schmidt-mg.de;
#$spam_quarantine_to = "spam-quarantine\@$mydomain";
#$spam_quarantine_to = new_RE(                 # per-recip multiple quarantines
#  [qr'^(.*)@example\.com$'i => 'spam-${1}@example.com'],
#  [qr/.*/                   => 'spam-quarantine'] );

# Add X-Virus-Scanned header field to mail?
$X_HEADER_TAG = 'X-Virus-Scanned';      # (default: undef)
# Leave empty to add no header field    # (default: undef)
$X_HEADER_LINE = "by amavisd-new at $mydomain";

$undecipherable_subject_tag = '***UNCHECKED*** ';  # undef disables it
$remove_existing_x_scanned_headers = 0; # leave existing X-Virus-Scanned alone
#$remove_existing_x_scanned_headers= 1; # remove existing headers
                                        # (defaults to false)
#$remove_existing_spam_headers = 0;     # leave existing X-Spam* headers alone
$remove_existing_spam_headers  = 0;     # remove existing spam headers if
                                        # spam scanning is enabled (default)

#$bypass_decode_parts = 1;              # (defaults to false)

$keep_decoded_original_re = new_RE(
# qr'^MAIL$',   # retain full original message for virus checking (can be slow)
  qr'^MAIL-UNDECIPHERABLE$',  # retain full mail if it contains undecipherables
  qr'^(ASCII(?! cpio)|text|uuencoded|xxencoded|binhex)'i,
# qr'^Zip archive data',
);

$banned_filename_re = new_RE(
#  qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components
   qr'\.[^.]*\.(exe|vbs|pif|scr|bat|cmd|com|dll)$'i, # double extension
#  qr'.\.(exe|vbs|pif|scr|bat|cmd|com)$'i,           # banned extension - basic
#  qr'.\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|inf|ins|isp|js|
#         jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|shb|vb|
#         vbe|vbs|wsc|wsf|wsh)$'ix,                  # banned extension - long
#  qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i, # banned extension - WinZip vulnerab.
#  qr'^\.(zip|lha|tnef|cab)$'i,                      # banned file(1) types
   qr'^\.exe$'i,                                     # banned file(1) types
   qr'^application/x-msdownload$'i,                  # banned MIME types
   qr'^application/x-msdos-program$'i,
#  qr'^message/partial$'i, qr'^message/external-body$'i, # block rfc2046
);
# See http://support.microsoft.com/default.aspx?scid=kb;EN-US;q262631
# and http://www.cknow.com/vtutor/vtextensions.htm



# $virus_lovers{lc("postmaster\@$mydomain")} = 1;
 $virus_lovers{lc('amuenten@web.de')} = 1;
# $virus_lovers{lc('abuse@example.com')} = 1;
# $virus_lovers{lc('andreas.muenten@')} = 1;  # this recipient, regardless of domain
# $virus_lovers{lc('boss@example.com')} = 0; # never, even if domain matches
# $virus_lovers{lc('example.com')} = 1; # this domain, but not its subdomains
# $virus_lovers{lc('.example.com')}= 1; # this domain, including its subdomains
#or:
# @virus_lovers_acl = qw( me@lab.xxx.com !lab.xxx.com .xxx.com yyy.org );
#
# $bypass_virus_checks{lc('some.user2@butnot.example.com')} = 1;
# @bypass_virus_checks_acl = qw( some.ddd !butnot.example.com .example.com );

# @virus_lovers_acl = qw( postmaster@example.com );
# $virus_lovers_re = new_RE( qr'^(helpdesk|postmaster)@example\.com$'i );

# $spam_lovers{lc("postmaster\@$mydomain")} = 1;
# $spam_lovers{lc('postmaster@example.com')} = 1;
# $spam_lovers{lc('abuse@example.com')} = 1;
# @spam_lovers_acl = qw( !.example.com );
# $spam_lovers_re = new_RE( qr'^user@example\.com$'i );


$sql_select_white_black_list = undef;  # undef disables SQL white/blacklisting
$recipient_delimiter = '+';             # (default is '+')

# true: replace extension;  false: append extension
# $replace_existing_extension = 1;      # (default is false)

# Affects matching of localpart of e-mail addresses (left of '@')
# in lookups: true = case sensitive, false = case insensitive
$localpart_is_case_sensitive = 0;       # (default is false)


$blacklist_sender_re = new_RE(
    qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou|greatcasino)@'i,
    qr'^(investments|lose_weight_today|market.alert|money2you|MyGreenCard)@'i,
    qr'^(new\.tld\.registry|opt-out|opt-in|optin|saveonlsmoking2002k)@'i,
    qr'^(specialoffer|specialoffers|stockalert|stopsnoring|wantsome)@'i,
    qr'^(workathome|yesitsfree|your_friend|greatoffers)@'i,
    qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i,
);

map { $whitelist_sender{lc($_)}=1 } (qw(
  nobody@cert.org
  owner-alert@iss.net
  slashdot@slashdot.org
  bugtraq@securityfocus.com
  NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM
  security-alerts@linuxsecurity.com
  amavis-user-admin@lists.sourceforge.net
  notification-return@lists.sophos.com
  mailman-announce-admin@python.org
  owner-postfix-users@postfix.org
  owner-postfix-announce@postfix.org
  owner-sendmail-announce@Lists.Sendmail.ORG
  owner-technews@postel.ACM.ORG
  lvs-users-admin@LinuxVirtualServer.org
  ietf-123-owner@loki.ietf.org
  cvs-commits-list-admin@gnome.org
  rt-users-admin@lists.fsck.com
  clp-request@comp.nus.edu.sg
  surveys-errors@lists.nua.ie
  emailNews@genomeweb.com
  owner-textbreakingnews@CNNIMAIL12.CNN.COM
  yahoo-dev-null@yahoo-inc.com
  returns.groups.yahoo.com
));

# Maximum recursion level for extraction/decoding (0 or undef disables limit)
$MAXLEVELS = 14;                # (default is undef, no limit)

# Maximum number of extracted files (0 or undef disables the limit)
$MAXFILES = 1500;               # (default is undef, no limit)

$MIN_EXPANSION_QUOTA =      100*1024;  # bytes  (default undef, not enforced)
$MAX_EXPANSION_QUOTA = 300*1024*1024;  # bytes  (default undef, not enforced)
$MIN_EXPANSION_FACTOR =   5;  # times original mail size  (must be specified)
$MAX_EXPANSION_FACTOR = 500;  # times original mail size  (must be specified)


$path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';

$file   = 'file';   # file(1) utility; use 3.41 or later to avoid vulnerability

$gzip   = 'gzip';
$bzip2  = 'bzip2';
$lzop   = 'lzop';
$uncompress = ['uncompress', 'gzip -d', 'zcat'];
$unfreeze   = ['unfreeze', 'freeze -d', 'melt', 'fcat'];
$arc        = ['nomarch', 'arc'];
$unarj      = ['arj', 'unarj'];  # both can extract, arj is recommended
$unrar      = ['rar', 'unrar'];  # both can extract, same options
$zoo    = 'zoo';
$lha    = 'lha';
$cpio   = ['gcpio','cpio']; # gcpio is a GNU cpio on OpenBSD, which supports
                            # the options needed; the rest of us use cpio

$sa_local_tests_only = 1;   # (default: false)
#$sa_auto_whitelist = 1;    # turn on AWL (default: false)

$sa_timeout = 30;           # timeout in seconds for a call to SpamAssassin
                            # (default is 30 seconds, undef disables it)
$sa_mail_body_size_limit = 150*1024; # don't waste time on SA if mail is larger
                            # (less than 1% of spam is > 64k)
                            # default: undef, no limitations

# default values, can be overridden by more specific lookups, e.g. SQL
$sa_tag_level_deflt  = -999; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 3.2;
$sa_kill_level_deflt = 7.5;
$sa_dsn_cutoff_level = 10;
$sa_spam_subject_tag = 'SPAMdconf ';
$sa_spam_modifies_subj = 1;

#$sa_spam_modifies_subj = [qw( !user@example.com . )];

local.cf
Code:
required_hits                                   3.2
rewrite_subject                                         1
subject_tag                                     [SPAMass]
auto_whitelist_factor                           0.03
report_safe                                     1
use_terse_report                                        1

Hab den bayes-Rest mal rausgenommen
 
Nachdem ich jetzt gesagt habe, dass Spam auch an eine QuarantäneEmail geschickt werden soll, wird sehr viel Spam ausgefiltert aber das Subject wird immer noch nicht umgeschrieben. Aber einen kleinen Teilerfolg hab ich schon mal erreicht. Allein in dieser Nacht 50 Mails rausgeholt.
 
Hallo, ich habe in meiner amavisd.conf folgende Einträge:

Code:
$sa_tag_level_deflt  = 2.0;
$sa_tag2_level_deflt = 5.5;
$sa_kill_level_deflt = 8.0;
$sa_dsn_cutoff_level = 10;

$sa_spam_subject_tag = '***SPAM*** ';
 
Meine sieht ja ähnlich aus. Trotzdem werden die Subjects nicht umgeschrieben.

Eine Kollegin sammel immer ihren Spam und leitet den in einer Mail an mich weiter. Diese Mails werden im Header gekennzeichnet. Aber alles was von ausserhalb kommt, behält das Subject.

Hier ein Beispiel:


X-Spam-Status: Yes, hits=12.3 tag1=-999.0 tag2=3.2 kill=7.5 tests=BAYES_60, DATE_IN_FUTURE_12_24, EXTRA_MPART_TYPE, HTML_IMAGE_ONLY_12, HTML_MESSAGE, HTML_SHORT_LINK_IMG_1, MIME_QP_LONG_LINE, TVD_FW_GRAPHIC_ID1

Aber Subject bleibt gleich :?:
 
Status
Für weitere Antworten geschlossen.
Oben