จะแก้ไขตัวกรองคำที่ไม่ดีใน SpamAssassin ได้อย่างไร


10

ฉันจะเพิ่มคำว่า "ไม่ดี" ที่กำหนดเองลงใน SpamAssassin ได้อย่างไรดังนั้นอีเมลที่มีคำนั้นจะถูกทำเครื่องหมายว่าเป็นสแปม

UPDATE

หนึ่งในกุญแจคือการแก้ไขไฟล์ / etc / mail / spamassassin และเพื่อเพิ่มตัวกรอง badword ตามที่อธิบายไว้ใน

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/ตรรกะหรือไม่ใช่เครื่องหมายจุลภาค มันเป็นท่อ = "|" เครื่องหมายจุลภาคมักถูกใช้เป็นเครื่องหมายจุลภาคและช่องว่างเหมือนกัน คุณกำลังค้นหาหนึ่งบรรทัดเช่นนี้ในร่างกาย: "ไวอากร้า, เพศ, xxx, องคชาต, แมว, greekajob, greekajobs, perazdera" ลอง/(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/iแทน
bshea

คำตอบ:


1

ใน SpamAssassin คุณสามารถสร้างกฎที่เพิ่มคะแนน N ให้กับส่วนหัวการจำแนกประเภทของสแปมหลังจากที่ถูกทริกเกอร์

มันขึ้นอยู่กับตัวคุณเองที่จะตั้งค่าขีด จำกัด เมื่อมันจะถูกจัดประเภทว่าเป็นสแปมและจะทำอย่างไรกับมัน (ลบย้ายไปที่โฟลเดอร์ส่งต่อหรือไม่เป็นต้น)

หากคุณต้องการย้ายอีเมลสแปมที่น่าสงสัยไปยังโฟลเดอร์ที่เฉพาะเจาะจงฉันสงสัยว่าคุณจะขอไปยังเซิร์ฟเวอร์ POP3 / IMAP ของคุณ (เช่น dovecot) หรือการใช้ไคลเอนต์ POP3 / IMAP (เช่น fetchmail + procmail)

ตัวอย่าง Dovecot โดยใช้สคริปต์ตะแกรง:

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

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

กฎ Procmail เพื่อกรองสแปมไปยังโฟลเดอร์ SPAM (~ / .procmailrc)

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

Ref: 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 คุณสามารถใช้ตะแกรงเพื่อย้ายอีเมลที่ติดแท็กสแปมไปยังโฟลเดอร์สแปมที่แยกต่างหากโดยข้ามกล่องจดหมายเข้า
Tutul

0

ข้อความเคลื่อนไหวไม่เกี่ยวข้องกับ Spamassassin และขึ้นอยู่กับ LDA หรือ MUA ของคุณ (ตัวแทนจัดส่งในท้องถิ่นหรือตัวแทนผู้ใช้จดหมาย) เมลของคุณถูกส่งไปยังบัญชี POP3 ซึ่งเป็นบัญชี IMAP หรือไม่ เซิร์ฟเวอร์ของคุณใช้ Dovecot หรือ Cyrus หรืออย่างอื่น

มีคำถามและตัวแปรมากเกินไปและนี่ไม่ใช่ที่สำหรับคำถามเหล่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.