SpamAssassin'de kötü kelime filtresi nasıl düzenlenir?


10

SpamAssassin'e birkaç özel "kötü" kelimeyi nasıl ekleyebilirim, böylece bu kelimeleri içeren e-postalar spam olarak işaretlenir?

GÜNCELLEME

anahtarlardan biri / etc / mail / spamassassin dosyasını düzenlemek ve açıklandığı gibi kötü amaçlı kelime filtresi eklemektir.

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

AMA, bu durumda, posta yalnızca spam olarak işaretlenir, yine de Gelen Kutuma gider ...

Kötü kelimeler içeren e-postaları almamak için ne yapmam gerekiyor?

GÜNCELLEME 2

E-posta bir Spam olarak sınıflandırılırsa SpamAssassin'im konuyu değiştirir ve şimdi iyi çalışır. /Etc/mail/spamassassin/local.cf dosyası şuna benzer:

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

Şimdi, nasıl yapılacağı konusunda yardıma ihtiyacım var:

  1. bu e-postaları Spam klasörüne taşıyın
  2. sunucuya eklenen her yeni posta hesabı için otomatik olarak Spam klasörü oluştur

/ Etc / mail / mailfilter dosyası şuna benzer:

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

Ve .qmail-default şöyle görünür:

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

Bunu nasıl düzeltebileceğime ve spam mesajlarını spam klasörüne nasıl taşıyabileceğime yardımcı olabilir misiniz?


/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/mantıksal bir OR virgül değildir. Bu bir pipo. = "|". Virgüller genellikle değişmez virgül ve boşluk olarak alınır. Vücutta tam olarak böyle bir satır arıyorsunuz: "viagra, sex, xxx, penis, kedi, greekajob, greekajobs, perazdera". /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/iBunun yerine denemek ister misiniz?
bshea

Yanıtlar:


1

SpamAssassin'de, tetiklendikten sonra spam sınıflandırma başlığına N puanı ekleyen kurallar oluşturabilirsiniz.

Ne zaman spam olarak sınıflandırılacağına ve bununla ne yapılacağına (silme, klasöre taşıma, ileri? Vb.) Eşiği ayarlamak size kalmış.

Şüpheli spam postaları belirli bir klasöre taşımak istiyorsanız, onu POP3 / IMAP sunucunuza (örn: dovecot) veya POP3 / IMAP istemci kullanımına (ör: fetchmail + procmail) bağladığınızdan şüpheleniyorum.

Elek komut dosyalarını kullanan dovecot örneği:

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

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

Spam'ı SPAM klasörüne filtrelemek için Procmail kuralı (~ / .procmailrc)

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

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

Umarım bu yardımcı olur.


0

SpamAssassin ile spam olarak algılanan bir postayı yeniden yazabilirsiniz ancak silemezsiniz. Postfix veya cpanel, spam'ları işlemek için tespit etmek için SpamAssassin kullanır. Ancak, spamAssassin tarafından yeniden yazılmış bir başlık içeren e-postayı silmek için cpanel'de (örneğin) bir kural oluşturabilirsiniz. Benim düşünceme göre, bu kötü bir fikir, yanlış pozitif kaçırabilirsiniz. Sadece temel bir kurala sahip belirli bir klasöre koyun.


Haklısınız, çünkü konuyu (ve gövdeyi) yeniden yazmayı ve uygun e-postaları spam olarak işaretlemeyi başardım. Bu mesajları otomatik olarak spam klasörüne taşımayı nasıl başardığımı gösterebilir misiniz (her e-posta hesabı için)? Cpanel'im yok, sunucu bakımım altında.
user48058

Bu sorunla ilgili bazı güncellemeler aldığımdan, sorumu biraz değiştirdim ...
user48058

Görünüşe göre e-postanın spam olması durumunda "ulaşmadığı" / etc / mail / mailfilter betiği ... Bir şeye ulaşmadan sildiği anlaşılıyor. Posta spam değilse, her şey yolunda ...
user48058

Pop / imap sunucusu olarak doveco kullanıyorsanız, spam etiketli postaları gelen
kutuyu

0

İletilerin taşınmasının Spamassassin ile bir ilgisi yoktur ve tamamen LDA veya MUA'nıza (Yerel Dağıtım Aracısı veya Posta kullanıcı Aracısı) bağlıdır. Postanız bir POP3 hesabına mı, bir IMAP hesabına mı gönderiliyor? sunucunuz Dovecot veya Cyrus veya başka bir şey kullanıyor mu?

Çok fazla soru ve değişken var ve bu soruların yeri bu değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.