Como editar um filtro de palavras ruins no SpamAssassin?


10

Como posso adicionar várias palavras "ruins" personalizadas ao SpamAssassin, para que os emails que contenham essas palavras sejam marcados como spam?

ATUALIZAR

uma das chaves é editar o arquivo / etc / mail / spamassassin e adicionar o filtro de palavrões, conforme descrito em

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

MAS, nesse caso, o e-mail é marcado apenas como spam, ele ainda vai para a minha Caixa de entrada ...

O que devo fazer para não receber e-mails que contenham palavrões?

ATUALIZAÇÃO 2

Meu SpamAssassin muda de assunto se o email for classificado como spam, e funciona bem agora. O arquivo /etc/mail/spamassassin/local.cf aparece assim:

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

Então, agora preciso de ajuda para:

  1. mova esses e-mails para a pasta Spam
  2. crie automaticamente a pasta Spam para cada nova conta de email adicionada no servidor

O arquivo / etc / mail / mailfilter se parece com o seguinte:

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

E o .qmail-default fica assim:

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

Você pode me ajudar, como corrigir isso e mover as mensagens de spam para a pasta de spam?


/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/um OR lógico não é uma vírgula. É um cachimbo. = "|". As vírgulas são geralmente tomadas como vírgulas literais e os espaços são iguais. Você está procurando por uma linha exatamente como esta no corpo: "viagra, sexo, xxx, pênis, puss, greekajob, greekajobs, perazdera". Tente em /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/ivez disso?
Bshea 14/0518

Respostas:


1

No SpamAssassin, você pode criar regras que anexam a pontuação N ao cabeçalho de classificação de spam depois que ele é acionado.

Cabe a você definir o limite para quando deve ser classificado como spam e o que fazer com ele (excluir, mover para pasta, avançar ?, etc).

Se você deseja mover e-mails suspeitos de spam para uma pasta específica, suspeito que você o conecte ao servidor POP3 / IMAP (por exemplo: dovecot) ou uso do cliente POP3 / IMAP (por exemplo: fetchmail + procmail).

Exemplo pombal usando scripts de peneira:

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

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

Regra do Procmail para filtrar spam na pasta SPAM (~ / .procmailrc)

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

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

Espero que isso seja útil.


0

Com o SpamAssassin, você pode reescrever um e-mail detectado como spam, mas não pode excluí-lo. O Postfix ou o cpanel usam o SpamAssassin para detectar spams e não para lidar com isso. Mas você pode criar regras no cpanel (por exemplo) para excluir email com uma reescrita de título pelo SpamAssassin. Na minha opinião, é uma má idéia, você pode perder falso positivo. Basta colocá-lo em uma pasta específica com uma regra básica.


Você está certo, porque consegui reescrever o assunto (e o corpo) e marcar os e-mails adequados como spam. Você pode me indicar como gerenciar para mover automaticamente essas mensagens para a pasta spam (para cada conta de email)? Não tenho Cpanel, o servidor está sob minha manutenção.
precisa saber é o seguinte

Desde que eu tenho algumas atualizações em relação a este problema, eu modifiquei um pouco a minha pergunta ...
user48058

Parece que o email não "alcança" o script / etc / mail / mailfilter no caso de ser spam ... Parece que algo o exclui antes de alcançá-lo. Caso o e-mail não seja spam, tudo funciona bem ...
user48058

Se você estiver usando doveco como servidor POP / IMAP você pode usar peneira para mover o spam marcado mails para uma pasta de spam separado, ignorando caixa de entrada
Tutul

0

A movimentação de mensagens não tem nada a ver com o Spamassassin e depende inteiramente do seu LDA ou MUA (Agente de Entrega Local ou Agente de Usuário de Correio). Seu e-mail está sendo entregue a uma conta POP3, uma conta IMAP? seu servidor está usando Dovecot ou Cyrus ou algo mais?

Muitas perguntas e variáveis, e este não é o lugar para essas perguntas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.