Wie bearbeite ich einen Filter für fehlerhafte Wörter in SpamAssassin?

11

Wie kann ich SpamAssassin mehrere benutzerdefinierte "schlechte" Wörter hinzufügen, sodass E-Mails, die diese Wörter enthalten, als Spam markiert werden?

AKTUALISIEREN

Einer der Schlüssel ist das Bearbeiten der Datei / etc / mail / spamassassin und das Hinzufügen eines Badword-Filters wie unter beschrieben

http://linuxguruz.wordpress.com/2008/09/16/spamassassin-example/

ABER in diesem Fall wird Mail nur als Spam markiert, sie geht immer noch in meinen Posteingang ...

Was muss ich tun, um keine E-Mails zu erhalten, die überhaupt schlechte Wörter enthalten?

UPDATE 2

Mein SpamAssassin ändert den Betreff, wenn E-Mails als Spam eingestuft werden, und es funktioniert jetzt einwandfrei. Die Datei /etc/mail/spamassassin/local.cf sieht folgendermaßen aus:

ok_locales all
skip_rbl_checks 0

required_score 5
report_safe 1
rewrite_header Subject ***SPAM***

use_pyzor 1
use_razor2 1

use_auto_whitelist 0


use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
blacklist_from *@kupiizaradi.cjb.net
blacklist_from *@hallmark.com
whitelist_from *@*hrgworldwide.com
whitelist_from *@bluehost.com
#blacklist_from *@greekajob.com

header CONTAINS_VIG Subject =~ /viagra, Cialix Pills, sex, xxx, penis, pussy, greekajob, greekajobs, pera
zdera/
body CONTAINS_PEN /viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/
score CONTAINS_VIG 1.5
score CONTAINS_PEN 1.5
describe CONTAINS_VIG Bad Word
describe CONTAINS_PEN Bad Word

Jetzt brauche ich Hilfe, um:

  1. Verschieben Sie diese E-Mails in den Spam-Ordner
  2. Erstellen Sie automatisch einen Spam-Ordner für jedes neue E-Mail-Konto, das auf dem Server hinzugefügt wird

Die Datei / etc / mail / mailfilter sieht folgendermaßen aus:

SHELL="/bin/sh"
import EXT
import HOST
VHOME=`pwd`
TIMESTAMP=`date "+%b %d %H:%M:%S"`
#VERBOSE=9

logfile "/var/log/maildrop/maildrop.log"
log "$TIMESTAMP - BEGIN maildrop processing for $EXT@$HOST ==="

`test -r $VHOME/.mailfilter`
if($RETURNCODE == 0)
{
    log "including $VHOME/.mailfilter"
    exception {
        include $VHOME/.mailfilter
    }
}


# does maildirsize exist?
`test -e $VHOME/Maildir/maildirsize`

# if maildirsize doesn't exist
if($RETURNCODE == 1)
{ 

    # does vuserinfo exist?
    `test -x /home/vpopmail/bin/vuserinfo` 

    # if vuserinfo exists
    if($RETURNCODE == 0)
    { 
        # does the user exist?
        `/home/vpopmail/bin/vuserinfo $EXT@$HOST`
        if($RETURNCODE == 0)
        {

            # find out what the user's quota is
            $QUOTA=`/home/vpopmail/bin/vuserinfo -Q $EXT@$HOST`
            log "QUOTA = $QUOTA"

            # does maildirmake exists?
            `test -x /usr/bin/maildirmake`

            # if maildirmake exists
            if($RETURNCODE == 0)
            {

                # does Maildir exist?
                `test -d $VHOME/Maildir`

                # if Maildir exists
                if($RETURNCODE == 0)
                {

                    # make the maildirsize file
                    `/usr/bin/maildirmake -q $QUOTA $VHOME/Maildir`
                    `test -s "$VHOME/Maildir/maildirsize"`

                    # if maildirsize exists
                    if($RETURNCODE == 0)
                    {
                        `/bin/chown vpopmail:vchkpw $VHOME/Maildir/maildirsize`
                        `/bin/chmod 640 $VHOME/Maildir/maildirsize`

                    # else 
                    }
                    else
                    {
                        log "Problem making 'maildirsize' for $VHOME"
                    }

                    # end if maildirsize exists
                }
                else
                {
                    log "Maildir does not exist for $VHOME"
                }

                # end if Maildir exists
            }
            else
            {
                log "maildirmake does not exist"

            # end if maildirmake exists
            }
        }
        else
        {
            log "user $EXT@HOST does not exist"

        # end if user exists
        }
    }
    else
    {
        log "vuserinfo does not exist"

    # end if vuserinfo exists
    }
}
# does maildirsize exist?
`test -e $VHOME/Maildir/maildirsize`
if($RETURNCODE == 0)
{
    MAILDIRQUOTA=`/usr/bin/head -n1 $VHOME/Maildir/maildirsize`
    log "MAILDIRQUOTA = $MAILDIRQUOTA"
}


#--------------------------------------------------------
# Filter spam - scores >= SPAMLIMIT is not delivered
#
# If you DO NOT want to send mail that is over the spam limit
# to spamassassin autolearn, comment: 'cc "|sa-learn -spam"'
#--------------------------------------------------------

##########################################################################
# Below is where I found some of the main problem, i.e apparently the
# regex logic changed, do a diff against this one and the old one,
# the old one was delimited with the '!' (bang) and grouped as a whole.
# it failed the match always.  By using standard regex grouping, I was able
# to get the filter working. By grouping the score accordingly, it
# breaks it into a number and precision, e.g. MATCH1 and MATCH2
##########################################################################

if(/^X-Spam-Status: Yes, score=([0-9]+)\.([0-9]+)/:h)
{
    if($MATCH1 >= 5)
    {
        cc "|sa-learn --spam"
    }

    # if the user doesnt' have a Spam folder
    `test -d $VHOME/Maildir/.Spam`
    if($RETURNCODE == 1)
    {
        `test -x /usr/bin/maildirmake`
        if($RETURNCODE == 0)
        {
            `/usr/bin/maildirmake -f Spam $VHOME/Maildir`
            `test -x /usr/bin/subscribeIMAP.sh`
            if($RETURNCODE == 0)
            {
                `/usr/bin/subscribeIMAP.sh Spam $VHOME`
            }
        }
    }

    # make sure the deliverquota binary exists and is executable
    `test -x /usr/bin/deliverquota`
    if($RETURNCODE == 1)
    {
        exception {
            to "$VHOME/Maildir/.Spam"
        }
    }
    else
    {
        cc "|/usr/bin/deliverquota -w 90 $VHOME/Maildir/.Spam"
        if($RETURNCODE == 0)
        {
            log "=== END ===  $EXT@$HOST  success (quota)"
            EXITCODE=0
            exit
        }
        else
        {
            if($RETURNCODE == 77)
            {
                log "$TIMESTAMP - $EXT@$HOST  bounced (quota)"
                to "|/var/qmail/bin/bouncesaying '$EXT@$HOST is over quota'"
            }
            else
            {
                log \
                 "$TIMESTAMP - $EXT@$HOST failure (unknown deliverquota error)"
                to "$VHOME/Maildir/.Spam"
            }
        }
    }
}

##########################################################################
# Same as above
##########################################################################
if(/^X-Spam-Status: No, score=([\-]*[0-9]+)\.([0-9]+) /:h)
{
    log "   message is clean ($MATCH1.$MATCH2)"
}


#--------------------------------------------------------
# Include any user rules 
#--------------------------------------------------------

`test -r $VHOME/Maildir/.mailfilter`
if($RETURNCODE == 0)
{
    log "   including $VHOME/Maildir/.mailfilter"
    exception {
        include $VHOME/Maildir/.mailfilter
    }
}

`test -x /usr/bin/deliverquota`
if ($RETURNCODE == 1)
{
    log "$TIMESTAMP - $EXT@$HOST WARNING: no deliverquota!"
    log "=== END ===  $EXT@$HOST success"
    exception {
        to "$VHOME/Maildir"
    }
}
else
{
    exception {
        log "RETCODE = $RETURNCODE   delivering to $VHOME/Maildir"
        xfilter "/usr/bin/deliverquota -w 90 $VHOME/Maildir"
    }
    #--------------------------------------------------------
    # check to make sure the message was delivered
    # returncode 77 means that out maildir was overquota - bounce mail
    #--------------------------------------------------------
    if($RETURNCODE == 77)
    {
        log "$TIMESTAMP - BOUNCED: bouncesaying '$EXT@$HOST is over quota'"
        log "$TIMESTAMP - $EXT@$HOST  bounced"
        to "|/var/qmail/bin/bouncesaying '$EXT@$HOST is over quota'"
    }
    else
    {
        log "=== END ===  $EXT@$HOST  success (quota)"
        EXITCODE=0
        exit
    }
}

log "$TIMESTAMP - $EXT@$HOST - WARNING: This message should never be printed!"
[root@um-1027 /etc/mail]#

Und .qmail-default sieht folgendermaßen aus:

|/var/qmail/bin/preline /usr/bin/maildrop /etc/mail/mailfilter

Können Sie mir bitte helfen, wie ich das beheben und Spam-Nachrichten in den Spam-Ordner verschieben kann?

user48058
quelle
/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/Ein logisches ODER ist kein Komma. Es ist eine Pfeife. = "|". Kommas werden normalerweise als wörtliche Kommas und Leerzeichen verwendet. Sie suchen nach einer Zeile genau so im Körper: "Viagra, Sex, XXX, Penis, Kater, Greekajob, Greekajobs, Perazdera". Versuchen Sie es /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/istattdessen?
bshea

Antworten:

1

In SpamAssassin können Sie Regeln erstellen, die N-Punkte an den Spam-Klassifizierungsheader anhängen, nachdem dieser ausgelöst wurde.

Es liegt an Ihnen, den Schwellenwert festzulegen, wann er als Spam eingestuft werden soll und was damit zu tun ist (Löschen, In Ordner verschieben, Weiterleiten usw.).

Wenn Sie verdächtige Spam-Mails in einen bestimmten Ordner verschieben möchten, müssen Sie ihn vermutlich an Ihren POP3 / IMAP-Server (z. B. dovecot) oder an die Verwendung des POP3 / IMAP-Clients (z. B. fetchmail + procmail) anschließen.

Dovecot-Beispiel mit Siebskripten:

if header :contains "X-Spam-Level" "**********" { discard; stop; }

Ref: https://wiki2.dovecot.org/Pigeonhole/Sieve/Examples#Direct_filtering_using_message_header

Procmail-Regel zum Filtern von Spam in den SPAM-Ordner (~ / .procmailrc)

:0: * ^X-Spam-Status: Yes SPAM

Ref: https://www.cs.rutgers.edu/~watrous/procmail-spam.html

Ich hoffe das erweist sich als hilfreich.

William Sandin
quelle
0

Mit SpamAssassin können Sie eine als Spam erkannte E-Mail nur umschreiben, aber nicht löschen. Postfix oder cpanel verwenden SpamAssassin, um Spam zu erkennen, die nicht behandelt werden sollen. Sie können jedoch in cpanel (zum Beispiel) Regeln zum Löschen von E-Mails mit einem von SpamAssassin neu geschriebenen Titel erstellen. Meiner Meinung nach ist es eine schlechte Idee, man kann falsch positive übersehen. Legen Sie es einfach mit einer Grundregel in einen bestimmten Ordner.

Jérémy Munoz
quelle
Sie haben Recht, denn ich habe es geschafft, Betreff (und Text) neu zu schreiben und richtige E-Mails als Spam zu markieren. Können Sie mir zeigen, wie ich es schaffe, diese Nachrichten automatisch in den Spam-Ordner zu verschieben (für jedes E-Mail-Konto)? Ich habe kein Cpanel, der Server wird von mir gewartet.
user48058
Da ich einige Updates bezüglich dieses Problems habe, habe ich meine Frage ein wenig geändert ...
user48058
Es sieht so aus, als würde E-Mail das Skript / etc / mail / mailfilter nicht "erreichen", falls es sich um Spam handelt ... Es sieht so aus, als würde es von etwas gelöscht, bevor es erreicht wird. Falls Mail kein Spam ist, funktioniert alles
einwandfrei
Wenn Sie doveco als Pop / Imap-Server verwenden, können Sie mit sieve Spam-markierte Mails in einen separaten Spam-Ordner verschieben und den Posteingang umgehen
Tutul
0

Das Verschieben von Nachrichten hat nichts mit Spamassassin zu tun und ist vollständig von Ihrem LDA oder MUA (Local Delivery Agent oder Mail User Agent) abhängig. Wird Ihre E-Mail an ein POP3-Konto, ein IMAP-Konto, gesendet? Verwendet Ihr Server Dovecot oder Cyrus oder etwas anderes?

Zu viele Fragen und Variablen, und dies ist nicht der richtige Ort für diese Fragen.

lbutlr
quelle