Làm cách nào để chỉnh sửa bộ lọc từ xấu trong SpamAssassin?


10

Làm cách nào tôi có thể thêm một số từ "xấu" tùy chỉnh vào SpamAssassin, để email có chứa các từ đó được đánh dấu là spam?

CẬP NHẬT

một trong những chìa khóa là chỉnh sửa tập tin / etc / mail / spamassassin và thêm bộ lọc từ xấu như mô tả trên

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

NHƯNG, trong trường hợp này, thư chỉ được đánh dấu là thư rác, nó vẫn chuyển đến Hộp thư đến của tôi ...

Tôi phải làm gì để không nhận được email có chứa từ xấu?

CẬP NHẬT 2

SpamAssassin của tôi không thay đổi chủ đề nếu email được phân loại là Spam và hiện tại nó hoạt động tốt. Tệp /etc/mail/spamassassin/local.cf trông như thế này:

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

Vì vậy, bây giờ tôi cần giúp đỡ làm thế nào để:

  1. chuyển những email đó vào thư mục Spam
  2. tự động tạo thư mục Spam cho mọi tài khoản thư mới được thêm trên máy chủ

Tệp / etc / mail / mailfilter trông như thế này:

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

Và .qmail-default trông như thế này:

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

Bạn có thể giúp tôi làm thế nào để sửa lỗi này và để chuyển các tin nhắn rác vào thư mục thư rác không?


/viagra, sex, xxx, penis, puss, greekajob, greekajobs, perazdera/một logic OR không phải là dấu phẩy. Đó là một đường ống. = "|". Dấu phẩy thường được lấy là dấu phẩy và không gian giống nhau. Bạn đang tìm kiếm một dòng chính xác như thế này trong cơ thể: "viagra, sex, xxx, dương vật, puss, greekajob, greekajobs, perazdera". /(viagra|sex|xxx|penis|puss.|greekajob|greekajobs|perazdera)/iThay vào đó hãy thử ?
bshea

Câu trả lời:


1

Trong SpamAssassin, bạn có thể tạo các quy tắc nối điểm N vào tiêu đề phân loại thư rác sau khi được kích hoạt.

Tùy thuộc vào chính bạn để đặt ngưỡng cho khi nào nó được phân loại là thư rác và phải làm gì với nó (xóa, di chuyển đến thư mục, chuyển tiếp ?, V.v.).

Nếu bạn muốn chuyển thư spam đáng ngờ sang một thư mục cụ thể, tôi nghi ngờ bạn sẽ móc nó vào máy chủ POP3 / IMAP của mình (ví dụ: dovecot) hoặc sử dụng ứng dụng khách POP3 / IMAP (ví dụ: fetchmail + procmail).

Ví dụ Dovecot sử dụng các kịch bản sàng:

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

Tham chiếu: https://wiki2.dovecot.org/Pigeonhole/Sieve/Examples#Direct_filtering_USE_message_header

Quy tắc Procmail để lọc thư rác vào thư mục SPAM (~ / .procmailrc)

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

Tham chiếu: https://www.cs.rutgers.edu/~watrous/procmail-spam.html

Tôi hy vọng điều này chứng tỏ hữu ích.


0

Với SpamAssassin, bạn chỉ có thể viết lại một thư được phát hiện là thư rác nhưng bạn không thể xóa nó. Postfix hoặc cpanel sử dụng SpamAssassin để phát hiện các thư rác không phải để xử lý nó. Nhưng bạn có thể tạo một quy tắc trong cpanel (ví dụ) để xóa email với tiêu đề được viết lại bởi SpamAssassin. Theo tôi, đó là một ý tưởng tồi, bạn có thể bỏ lỡ dương tính giả. Chỉ cần đặt nó vào một thư mục cụ thể với một quy tắc cơ bản.


Bạn nói đúng, vì tôi đã quản lý để viết lại chủ đề (và cơ thể) và đánh dấu các email thích hợp là thư rác. Bạn có thể chỉ cho tôi cách quản lý để tự động chuyển những tin nhắn đó vào thư mục thư rác (cho mọi tài khoản email) không? Tôi không có Cpanel, máy chủ đang được bảo trì.
user48058

Vì tôi có một số cập nhật liên quan đến vấn đề này, tôi đã sửa đổi một chút câu hỏi của mình ...
user48058

Có vẻ như email không "đạt" / etc / mail / mailfilter script trong trường hợp đó là thư rác ... Có vẻ như có gì đó xóa nó trước khi nó đến được. Trong trường hợp thư không phải là thư rác, mọi thứ đều hoạt động tốt ...
user48058 23/12/13

Nếu bạn đang sử dụng doveco làm máy chủ pop / imap, bạn có thể sử dụng rây để di chuyển thư được gắn thẻ thư rác vào một thư mục thư rác riêng, bỏ qua hộp thư đến
Tutul

0

Di chuyển thư không liên quan gì đến Spamassassin và hoàn toàn phụ thuộc vào LDA hoặc MUA (Đại lý chuyển phát cục bộ hoặc Đại lý người dùng thư). Thư của bạn có được gửi đến tài khoản POP3, tài khoản IMAP không? máy chủ của bạn đang sử dụng Dovecot hay Cyrus hay cái gì khác?

Quá nhiều câu hỏi và biến số, và đây không phải là nơi dành cho những câu hỏi đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.