Comment modifier le filtre des mauvais mots dans SpamAssassin?

10

Comment puis-je ajouter plusieurs «mauvais» mots personnalisés dans SpamAssassin, afin que les e-mails contenant ces mots soient marqués comme spam?

MISE À JOUR

l’une des clés consiste à modifier le fichier / etc / mail / spamassassin et à ajouter un filtre de mots

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

MAIS, dans ce cas, le courrier n'est marqué que comme spam, il va toujours dans ma boîte de réception ...

Que dois-je faire pour ne pas recevoir du tout d'e-mails contenant de mauvais mots?

MISE À JOUR 2

Mon SpamAssassin change de sujet si le courrier électronique est classé comme spam, et cela fonctionne bien maintenant. Le fichier /etc/mail/spamassassin/local.cf ressemble à ceci:

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

Donc, maintenant j'ai besoin d'aide pour:

  1. déplacer ces e-mails dans le dossier Spam
  2. créer automatiquement un dossier de spam pour chaque nouveau compte de messagerie ajouté sur le serveur

Le fichier / etc / mail / mailfilter ressemble à ceci:

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

Et .qmail-default ressemble à ceci:

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

Pouvez-vous m'aider à résoudre ce problème et à déplacer les messages de spam dans le dossier spam?

user48058
la source
/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/un OU logique n'est pas une virgule. C'est une pipe. = "|". Les virgules sont généralement considérées comme des virgules littérales et les espaces identiques. Vous recherchez une ligne exactement comme celle-ci dans le corps: "viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera". Essayez /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/iplutôt?
bshea

Réponses:

1

Dans SpamAssassin, vous pouvez créer des règles qui ajoutent le score N à l'en-tête de classification du spam après son déclenchement.

C'est à vous de définir le seuil à partir duquel il doit être classé comme spam, et ce que vous devez en faire (supprimer, déplacer vers un dossier, transférer?, Etc.).

Si vous souhaitez déplacer des spams suspects vers un dossier spécifique, je vous soupçonne de le connecter à votre serveur POP3 / IMAP (ex: dovecot), ou à l'utilisation du client POP3 / IMAP (ex: fetchmail + procmail).

Exemple de pigeonnier utilisant des scripts sieve:

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

Réf: https://wiki2.dovecot.org/Pigeonhole/Sieve/Examples#Direct_filtering_using_message_header

Règle Procmail pour filtrer le spam dans le dossier SPAM (~ / .procmailrc)

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

Réf: https://www.cs.rutgers.edu/~watrous/procmail-spam.html

J'espère que cela s'avère utile.

William Sandin
la source
0

Avec SpamAssassin, vous pouvez simplement réécrire un courrier détecté comme spam, mais vous ne pouvez pas le supprimer. Postfix ou cpanel utilisent SpamAssassin pour détecter les spams et non pour les gérer. Mais vous pouvez créer des règles dans cpanel (par exemple) pour supprimer les e-mails avec une réécriture du titre par SpamAssassin. À mon avis, c'est une mauvaise idée, vous pouvez manquer des faux positifs. Il suffit de le placer dans un dossier spécifique avec une règle de base.

Jérémy Munoz
la source
Vous avez raison, car j'ai réussi à réécrire le sujet (et le corps) et à marquer les e-mails appropriés comme spam. Pouvez-vous m'indiquer comment gérer pour déplacer automatiquement ces messages dans le dossier spam (pour chaque compte de messagerie)? Je n'ai pas Cpanel, le serveur est sous ma maintenance.
user48058
Depuis que j'ai quelques mises à jour concernant ce problème, j'ai modifié un peu ma question ...
user48058
Il semble que le courrier électronique n'atteigne pas le script / etc / mail / mailfilter en cas de spam ... Il semble que quelque chose le supprime avant qu'il ne l'atteigne. Dans le cas où le courrier n'est pas du spam, tout fonctionne bien ...
user48058
Si vous utilisez doveco comme serveur pop / imap, vous pouvez utiliser le tamis pour déplacer les courriers marqués de spam vers un dossier de spam séparé, en contournant la boîte de réception
Tutul
0

Le déplacement de messages n'a rien à voir avec Spamassassin et dépend entièrement de votre LDA ou MUA (Local Delivery Agent ou Mail user Agent). Votre courrier est-il remis à un compte POP3, un compte IMAP? votre serveur utilise-t-il Dovecot ou Cyrus ou autre chose?

Trop de questions et de variables, et ce n'est pas l'endroit pour ces questions.

lbutlr
la source