Як відредагувати фільтр поганих слів у SpamAssassin?


10

Як я можу додати кілька спеціальних "поганих" слів у SpamAssassin, щоб електронні листи, які містять ці слова, позначалися як спам?

ОНОВЛЕННЯ

одним з ключів є редагування файлу / etc / mail / spamassassin та додавання фільтра поганих слів, як описано далі

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

Але в цьому випадку пошта позначається лише як спам, вона все одно переходить у мій Вхідний ...

Що мені робити, щоб взагалі не отримувати електронні листи, які містять погані слова?

ОНОВЛЕННЯ 2

Мій SpamAssassin змінює тему, якщо електронну пошту класифікують як спам, і вона працює нормально. Файл /etc/mail/spamassassin/local.cf виглядає так:

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

Отже, зараз мені потрібна допомога, як:

  1. перемістити ці повідомлення в папку "Спам"
  2. автоматично створити папку "Спам" для кожного нового облікового запису пошти, доданого на сервері

Файл / etc / mail / mailfilter виглядає так:

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

І .qmail-default виглядає так:

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

Чи можете ви мені допомогти, як це виправити та перемістити спам-повідомлення в папку зі спамом?


/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/логічний АБО не є комою. Це труба. = "|". Коми зазвичай приймаються як буквальні коми, а пробіли однакові. Ви шукаєте саме такий рядок у тілі: "viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera". Спробувати /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/iзамість цього?
bshea

Відповіді:


1

У SpamAssassin ви можете створити правила, які додають N балів до заголовка класифікації спаму після його запуску.

Ви самі вирішите встановити поріг, коли його слід класифікувати як спам, і що з ним робити (видалити, перейти до папки, переслати? Тощо).

Якщо ви хочете перенести підозрювані спам-листи в певну папку, я підозрюю, що ви підключите її до свого POP3 / IMAP-сервера (наприклад: dovecot) або використання клієнта POP3 / IMAP (наприклад: fetchmail + procmail).

Приклад голубця за допомогою ситових сценаріїв:

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

Посилання: https://wiki2.dovecot.org/Pigeonhole/Sieve/Examples#Direct_filtering_using_message_header

Правило Procmail для фільтрації спаму в папці SPAM (~ / .procmailrc)

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

Посилання: https://www.cs.rutgers.edu/~watrous/procmail-spam.html

Я сподіваюся, що це виявляється корисним.


0

За допомогою SpamAssassin ви просто можете переписати пошту, виявлену як спам, але ви не можете її видалити. Postfix або cpanel використовують SpamAssassin для виявлення спамів, а не для обробки. Але ви можете створити в cpanel правила (наприклад) для видалення електронної пошти із перезаписом заголовка від SpamAssassin. На мою думку, це погана ідея, ви можете пропустити помилковий позитив. Просто помістіть його у певну папку з основним правилом.


Ви маєте рацію, бо мені вдалося переписати тему (та тіло) та позначити належні електронні листи як спам. Чи можете ви вказати мені, як керувати автоматичним переміщенням цих повідомлень у папку зі спамом (для кожного облікового запису електронної пошти)? У мене немає Cpanel, сервер знаходиться під моїм обслуговуванням.
user48058

Оскільки у мене є деякі оновлення щодо цієї проблеми, я трохи змінив своє запитання ...
user48058

Схоже, що електронна пошта не "доходить" / etc / mail / mailfilter script, якщо вона є спамом ... Схоже, щось видаляє, перш ніж вона дістанеться до неї. Якщо пошта не є спамом, все працює добре ...
user48058

Якщо ви використовуєте doveco , як POP / IMAP сервера ви можете використовувати сито , щоб перемістити спам позначено листи в окрему папку для спаму, минаючи поштовий ящик
Тутуль

0

Переміщення повідомлень не має нічого спільного з Spamassassin і повністю залежить від вашого LDA або MUA (локального агента доставки або агента поштового користувача). Чи доставляється ваша пошта на рахунок POP3, рахунок IMAP? ваш сервер використовує Dovecot або Cyrus чи щось інше?

Забагато запитань та змінних, і це не місце для цих питань.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.