Jak edytować filtr złych słów w SpamAssassin?


10

Jak mogę dodać kilka niestandardowych „złych” słów do SpamAssassin, aby wiadomości e-mail zawierające te słowa były oznaczone jako spam?

AKTUALIZACJA

jednym z kluczy jest edycja pliku / etc / mail / spamassassin i dodanie filtra słów kluczowych zgodnie z opisem na

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

ALE w tym przypadku poczta jest oznaczona tylko jako spam, nadal trafia do mojej skrzynki odbiorczej ...

Co muszę zrobić, aby w ogóle nie otrzymywać e-maili zawierających złe słowa?

AKTUALIZACJA 2

Mój SpamAssassin zmienia temat, jeśli e-mail jest klasyfikowany jako spam, i działa teraz dobrze. Plik /etc/mail/spamassassin/local.cf wygląda następująco:

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

Teraz potrzebuję pomocy, jak:

  1. przenieś te e-maile do folderu Spam
  2. automatycznie twórz folder Spam dla każdego nowego konta pocztowego dodanego na serwerze

Plik / etc / mail / mailfilter wygląda następująco:

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]#

I .qmail-default wygląda następująco:

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

Czy możesz mi pomóc, jak to naprawić i przenieść wiadomości spamowe do folderu ze spamem?


/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/logiczne OR nie jest przecinkiem. To fajka. = „|”. Przecinki są zwykle traktowane jako dosłowne przecinki i spacje takie same. Szukasz jednej linii dokładnie takiej w ciele: „viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera”. Spróbuj /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/izamiast tego?
bshea

Odpowiedzi:


1

W SpamAssassin możesz tworzyć reguły, które dołączą wynik N do nagłówka klasyfikacji spamu po jego uruchomieniu.

To Ty decydujesz o tym, kiedy ma zostać zaklasyfikowany jako spam i co z nim zrobić (usunąć, przenieść do folderu, przesłać dalej, itp.).

Jeśli chcesz przenieść podejrzane wiadomości spamowe do określonego folderu, podejrzewam, że podłączysz go do serwera POP3 / IMAP (np. Dovecot) lub użycia klienta POP3 / IMAP (np. Fetchmail + procmail).

Przykład gołębnika przy użyciu skryptów sitowych:

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

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

Reguła Procmail do filtrowania spamu do folderu SPAM (~ / .procmailrc)

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

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

Mam nadzieję, że okaże się to pomocne.


0

Dzięki SpamAssassin możesz po prostu przepisać pocztę wykrytą jako spam, ale nie możesz jej usunąć. Postfiks lub cpanel używają SpamAssassin do wykrywania spamu, a nie do obsługi. Ale możesz utworzyć reguły w panelu (na przykład) do usuwania wiadomości e-mail z przepisaniem tytułu przez SpamAssassin. Moim zdaniem jest to zły pomysł, można przeoczyć fałszywie pozytywne. Po prostu umieść go w określonym folderze z podstawową regułą.


Masz rację, ponieważ udało mi się przepisać temat (i treść) i oznaczyć odpowiednie wiadomości e-mail jako spam. Czy możesz mi wskazać, jak zarządzać automatycznym przenoszeniem tych wiadomości do folderu ze spamem (dla każdego konta e-mail)? Nie mam Cpanela, serwer jest pod moją opieką.
user48058,

Ponieważ mam kilka aktualizacji dotyczących tego problemu, nieco zmodyfikowałem swoje pytanie ...
user48058

Wygląda na to, że e-mail nie „dociera” / etc / mail / mailfilter filtr w przypadku spamu… Wygląda na to, że coś go usuwa, zanim do niego dotrze. W przypadku, gdy poczta nie jest spamem, wszystko działa dobrze ...
user48058

Jeśli używasz doveco jako serwera pop / imap, możesz użyć sita, aby przenieść spamowane wiadomości e-mail do osobnego folderu ze spamem, omijając skrzynkę odbiorczą
Tutul

0

Przenoszenie wiadomości nie ma nic wspólnego ze Spamassassin i jest całkowicie zależne od Twojego LDA lub MUA (Local Delivery Agent lub Mail user Agent). Czy Twoja poczta jest dostarczana na konto POP3, konto IMAP? czy twój serwer używa Dovecot lub Cyrus czy czegoś innego?

Zbyt wiele pytań i zmiennych, a to nie jest miejsce na te pytania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.