¿Cómo editar el filtro de palabras malas en SpamAssassin?

10

¿Cómo puedo agregar varias palabras "malas" personalizadas en SpamAssassin para que los correos electrónicos que contienen esas palabras se marquen como spam?

ACTUALIZAR

Una de las claves es editar el archivo / etc / mail / spamassassin y agregar un filtro de palabras malas como se describe en

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

PERO, en este caso, el correo solo se marca como spam, todavía va a mi Bandeja de entrada ...

¿Qué debo hacer para no recibir correos electrónicos que contengan malas palabras?

ACTUALIZACIÓN 2

Mi SpamAssassin cambia de tema si el correo electrónico se clasifica como Spam, y ahora funciona bien. El archivo /etc/mail/spamassassin/local.cf tiene este aspecto:

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

Entonces, ahora necesito ayuda para:

  1. mover esos correos electrónicos a la carpeta Spam
  2. crear automáticamente una carpeta de correo no deseado para cada nueva cuenta de correo agregada en el servidor

El archivo / etc / mail / mailfilter se ve así:

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

Y .qmail-default se ve así:

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

¿Me pueden ayudar por favor cómo solucionar esto y mover los mensajes de spam a la carpeta de spam?

usuario48058
fuente
/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/un OR lógico no es una coma. Es una pipa. = "|". Las comas generalmente se toman como comas literales y espacios iguales. Está buscando una línea exactamente como esta en el cuerpo: "viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera". ¿Probar en su /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/ilugar?
bshea

Respuestas:

1

En SpamAssassin puede crear reglas que agreguen un puntaje N al encabezado de clasificación de spam después de que se active.

Depende de usted establecer el umbral para cuándo se clasificará como spam y qué hacer con él (¿eliminar, mover a carpeta, reenviar ?, etc.).

Si desea mover correos sospechosos de correo no deseado a una carpeta específica, sospecho que lo conectará a su servidor POP3 / IMAP (por ejemplo, dovecot), o al uso del cliente POP3 / IMAP (por ejemplo: fetchmail + procmail).

Ejemplo de Dovecot usando scripts de tamiz:

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

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

Regla de Procmail para filtrar el correo no deseado a la carpeta SPAM (~ / .procmailrc)

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

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

Espero que esto sea útil.

William Sandin
fuente
0

Con SpamAssassin solo puede reescribir un correo detectado como spam pero no puede eliminarlo. Postfix o cpanel usan SpamAssassin para detectar spam no para manejarlo. Pero puede crear reglas en cpanel (por ejemplo) para eliminar correos electrónicos con una reescritura de títulos por parte de SpamAssassin. En mi opinión, es una mala idea, puedes perderte un falso positivo. Simplemente colóquelo en una carpeta específica con una regla básica.

Jérémy Muñoz
fuente
Tienes razón, porque logré reescribir el asunto (y el cuerpo), y marcar los correos electrónicos correctos como spam. ¿Me puede indicar cómo manejar mover automáticamente esos mensajes a la carpeta de spam (para cada cuenta de correo electrónico)? No tengo Cpanel, el servidor está bajo mi mantenimiento.
user48058
Como tengo algunas actualizaciones sobre este problema, modifiqué un poco mi pregunta ...
user48058
Parece que el correo electrónico no "alcanza" el script / etc / mail / mailfilter en caso de que sea spam ... Parece que algo lo borra antes de que llegue. En caso de que el correo no sea spam, todo funciona bien ...
user48058
Si está usando doveco como servidor pop / imap, puede usar el tamiz para mover correos etiquetados como spam a una carpeta de correo no deseado, sin pasar por la bandeja de entrada
Tutul
0

Mover mensajes no tiene nada que ver con Spamassassin y depende completamente de su LDA o MUA (Agente de entrega local o Agente de usuario de correo). ¿Su correo se envía a una cuenta POP3, una cuenta IMAP? ¿Está su servidor usando Dovecot o Cyrus o alguna otra cosa?

Demasiadas preguntas y variables, y este no es el lugar para esas preguntas.

lbutlr
fuente