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/논리 OR은 쉼표가 아닙니다. 파이프입니다. = "|". 쉼표는 일반적으로 리터럴 쉼표로 사용되며 공백은 동일합니다. "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)에 연결해야합니다.

시브 (sieve) 스크립트를 사용한 도브 코트 예제 :

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

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

스팸을 스팸 폴더 (~ / .procmailrc)로 필터링하는 Procmail 규칙

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

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

이것이 도움이되기를 바랍니다.


0

SpamAssassin을 사용하면 스팸으로 탐지 된 메일을 다시 작성할 수는 있지만 삭제할 수는 없습니다. Postfix 또는 cpanel은 스팸을 처리하지 않는 스팸을 탐지하기 위해 SpamAssassin을 사용합니다. 그러나 SpamAssassin에서 제목을 다시 쓰면 전자 메일을 삭제하기위한 규칙을 cpanel에 만들 수 있습니다 (예 :). 제 생각에는 나쁜 생각입니다. 오탐을 놓칠 수 있습니다. 기본 규칙으로 특정 폴더에 넣으십시오.


제목과 본문을 다시 작성하고 적절한 이메일을 스팸으로 표시했기 때문에 당신이 옳습니다. 메시지를 스팸 폴더 (모든 전자 메일 계정)로 자동 이동하는 방법을 알려 주시겠습니까? Cpanel이 없으며 서버가 유지 관리 중입니다.
user48058

이 문제와 관련하여 몇 가지 업데이트가 있었으므로 약간의 질문을 수정했습니다.
user48058

스팸 인 경우 이메일이 / etc / mail / mailfilter 스크립트에 "도달"하지 않는 것 같습니다 ... 이메일이 도착하기 전에 삭제하는 것 같습니다. 메일이 스팸이 아닌 경우 모든 것이 잘 작동합니다.
user48058

doveco를 pop / imap 서버로 사용하는 경우 sieve를 사용하여받은 편지함을 우회하여 스팸 태그가 지정된 메일을 별도의 스팸 폴더로 이동할 수 있습니다.
Tutul

0

메시지 이동은 Spamassassin과 관련이 없으며 LDA 또는 MUA (Local Delivery Agent 또는 Mail 사용자 에이전트)에 전적으로 의존합니다. 메일이 IMAP 계정 인 POP3 계정으로 배달됩니까? 서버가 Dovecot 또는 Cyrus 등을 사용하고 있습니까?

질문과 변수가 너무 많아서 이러한 질문에 대한 장소가 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.