Postfix mta 如何将垃圾邮件移动到垃圾邮件文件夹?

Postfix mta 如何将垃圾邮件移动到垃圾邮件文件夹?,postfix-mta,mail-server,spam-prevention,spamassassin,Postfix Mta,Mail Server,Spam Prevention,Spamassassin,我已经在centos 5.10上安装了postfix、dovecot、Clamav、Spamasassin和amavisd new。 教程在这里: 我只是没有在那个教程上安装Razor、Pyzor和dan DCC 在/var/log/maillog中一切正常,如果有垃圾邮件n未进入收件箱,但我想将垃圾邮件移动到垃圾邮件文件夹 我的问题是: 1.如何在我的网络邮件上自动创建垃圾邮件文件夹,因为它只是创建收件箱、草稿和已发送邮件,而我的网络邮件上没有垃圾邮件文件夹。 2.如何将每个用户的垃圾邮件移动

我已经在centos 5.10上安装了postfix、dovecot、Clamav、Spamasassin和amavisd new。 教程在这里:

我只是没有在那个教程上安装Razor、Pyzor和dan DCC

在/var/log/maillog中一切正常,如果有垃圾邮件n未进入收件箱,但我想将垃圾邮件移动到垃圾邮件文件夹

我的问题是: 1.如何在我的网络邮件上自动创建垃圾邮件文件夹,因为它只是创建收件箱、草稿和已发送邮件,而我的网络邮件上没有垃圾邮件文件夹。 2.如何将每个用户的垃圾邮件移动到该垃圾邮件文件夹(我在/var/vmail上创建用户)

请帮帮我,我已经在谷歌搜索了5天了,我对这一点很感兴趣:(


谢谢。

好吧,有几种方法,但我发现这是有效的。在您完成postfix、dovecot、spamassassin和(我推荐procmail)设置后,您可以告诉procmail/spamassassin如何将垃圾邮件分发到各种文件夹中。对于dovecot,我使用以下4个文件夹:

spam          (for known spam based on Bayes setting)
spam-learn    (for spam that slipped through, you move it here)
spam-probably (for spam ID'd as probably spam by Bayes setting)
spam-unlearn  (messages flagged as spam, that are NOT spam go here)
将文件夹设置和后缀配置为通过procmail筛选邮件,使用:

mailbox_command = /usr/bin/procmail -a "$EXTENSION"
现在,您可以设置procmailrc,以便在垃圾邮件进入收件箱时将其放置在正确的位置。您的~/.procmailrc应该如下所示:

PATH=/usr/bin/vendor_perl:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail/
LOGDIR=$HOME/log
#DEFAULT=$HOME/Mail/
LOGFILE=$LOGDIR/procmail.log
VERBOSE=ON
## with spamc
:0fw: spamc.lock
* < 256000
| spamc
#| /usr/bin/vendor_perl/spamc
# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam
#Mail/spam

# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
spam-probably
#Mail/spam-probably

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped.  This will re-add it.
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "

:0 fhw
| sed -e '1s/^/F/'
}
#!/bin/bash

## log file location and per-user name
LDIR=/home/admin/log
LFN="${LDIR}/${USER}.log"

## Retrieve and Process Spam & Ham from 'spam-learn' & 'spam-unlearn' folders
/usr/bin/fetchmail -a -s -n --folder spam-learn -m '/usr/bin/vendor_perl/sa-learn --spam' &>/dev/null
mss=$?
sleep 2
/usr/bin/fetchmail -a -s -n --folder spam-unlearn -m '/usr/bin/vendor_perl/sa-learn --ham' &>/dev/null
mhs=$?

## test and create log dir in noexist
[[ -d "$LDIR" ]] || mkdir -p "$LDIR"
if [[ -w "$LDIR" ]]; then

## check return from fetchmail and write log info
if [[ $(($mhs+$mss)) -le 2 ]]; then
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn completed successfully for user $USER" >>$LFN
else
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn FAILED for user $USER" >>$LFN
fi
fi
(您只需对.fetchmailrc文件运行
fetchmail--verbose
,即可获得服务器指纹,它将打印服务器指纹,检查当前指纹,告诉您它们不匹配并关闭连接--但是--您刚刚获得了下一次的正确指纹:-)

最后,设置几个cron作业,通过读取垃圾邮件学习和垃圾邮件清除文件夹来运行整个过程。每小时一次就足够了。脚本可以如下所示:

PATH=/usr/bin/vendor_perl:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Mail/
LOGDIR=$HOME/log
#DEFAULT=$HOME/Mail/
LOGFILE=$LOGDIR/procmail.log
VERBOSE=ON
## with spamc
:0fw: spamc.lock
* < 256000
| spamc
#| /usr/bin/vendor_perl/spamc
# Mails with a score of 15 or higher are almost certainly spam (with 0.05%
# false positives according to rules/STATISTICS.txt). Let's put them in a
# different mbox. (This one is optional.)
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam
#Mail/spam

# All mail tagged as spam (eg. with a score higher than the set threshold)
# is moved to "probably-spam".
:0:
* ^X-Spam-Status: Yes
spam-probably
#Mail/spam-probably

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped.  This will re-add it.
:0
* ^^rom[ ]
{
LOG="*** Dropped F off From_ header! Fixing up. "

:0 fhw
| sed -e '1s/^/F/'
}
#!/bin/bash

## log file location and per-user name
LDIR=/home/admin/log
LFN="${LDIR}/${USER}.log"

## Retrieve and Process Spam & Ham from 'spam-learn' & 'spam-unlearn' folders
/usr/bin/fetchmail -a -s -n --folder spam-learn -m '/usr/bin/vendor_perl/sa-learn --spam' &>/dev/null
mss=$?
sleep 2
/usr/bin/fetchmail -a -s -n --folder spam-unlearn -m '/usr/bin/vendor_perl/sa-learn --ham' &>/dev/null
mhs=$?

## test and create log dir in noexist
[[ -d "$LDIR" ]] || mkdir -p "$LDIR"
if [[ -w "$LDIR" ]]; then

## check return from fetchmail and write log info
if [[ $(($mhs+$mss)) -le 2 ]]; then
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn completed successfully for user $USER" >>$LFN
else
    echo "$(date +'%b %e %R:%S') $HOSTNAME ${0##*/}: sa-learn FAILED for user $USER" >>$LFN
fi
fi
cron作业只需执行上面的spamv.sh文件:

05 * * * * /usr/local/bin/spamv.sh
我已经运行这样的服务器近十年了,它工作得很好。培训文件位于用户的主目录中,可以轻松地逐框移动,为新用户提供良好的基础设置。祝你好运。几年前我做了一个关于此设置的简短介绍。那里可能还有更多信息

p.S.Rayzor值得装载。

用于Dovecot 2.1+ 修改/etc/dovecot/dovecot.conf:

namespace {
    type = private
    separator = .
    inbox = yes
  mailbox Trash {
    auto = subscribe # autocreate and autosubscribe
    special_use = \Trash
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
}

plugin {
    sieve = /home/spam/default.sieve
}

protocol lda {
            auth_socket_path = /var/run/dovecot/auth-master
            mail_plugins = $mail_plugins sieve
}
然后/etc/postfix/master.cf-添加

spamassassin unix -     n   n   -   -   pipe
  user=vmail argv=/usr/bin/spamc -f -e  /usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
(!!)user=vmail-将用户更改为为为spamassassin设置的用户

并将内容筛选器添加到smtp

smtp  inet  n  - - - -  smtpd -o content_filter=spamassassin
在/etc/mail/spamassassin/local.cf中

add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ version=_VERSION_
#rewrite_header Subject *****SPAM*****
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
我会将X-Spam邮件头添加到邮件中,用于以后的筛选 重新启动spamassassin,重新加载dovecot和postfix

垃圾文件夹将自动创建。 所有垃圾邮件都将在本地传递到垃圾邮件邮箱

我还添加了一个筛子过滤器的示例,将所有标记为垃圾邮件的邮件(上面的spamassassin配置)移动到垃圾邮件文件夹

require "fileinto";
  if exists "X-Spam-Flag" {
          if header :contains "X-Spam-Flag" "NO" {
          } else {
          fileinto "Junk";
          stop;
          }
  }

I-将您的电子邮件发送设置为使用Dovecot LDA:

OP链接的原始网站是离线的,但是我相信电子邮件传递是通过
sendmail
程序进行的,这应该通过Dovecot LDA完成,以满足您的需要。(避免更改电子邮件来源标题)

编辑后缀的
master.cf
(开头):

在文件末尾:

spamassassin unix -     n   n   -   -   pipe
    flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e 
    /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} 
现在编辑Postfix的
main.cf
并添加(可选,选中下面的(3)项):

现在,您的电子邮件将通过Dovecot LDA发送,不会更改邮件头。对于好奇的人,以下是我的配置中的一些详细信息:

  • 配置可与加地址/子地址/收件人分隔符一起使用(电子邮件地址为
    用户+nospam@example.com
    将交付到
    user@example.com
    inbox)-这就是为什么我添加了
    -d${user}@${nexthop}
    这将删除
    +
    和域之前的所有内容。要启用此功能,还请确保将
    收件人分隔符=+
    添加到
    main.cf
  • 我的标志
    flags=DROhu
    ,它们没有添加任何异常,但可以在这里理解:
  • spamassassin\u destination\u recipient\u limit=1需要确保每个收件人都由spamassassin单独处理。这是必需的,因为上面有
    D
    标志(包括
    X-Original-to
    标题)。如果您不关心此标题,则可以删除该标志,这是不需要的
  • II-将您的垃圾邮件移动到
    垃圾邮件
    文件夹:

    (在@Electronic Technologies at的帮助下)

    您还可以将Dovecot配置为将检测到的垃圾邮件移动到
    Junk
    IMAP文件夹。只需执行以下操作:

  • 编辑
    /etc/dovecot/conf.d/15 mailboxes.conf
    并取消注释/添加
    垃圾文件夹(应位于
    邮箱垃圾桶附近的
    命名空间收件箱
    部分):

  • 安装
    dovecot筛
    apt get安装dovecot筛

  • 编辑
    /etc/dovecot/conf.d/90 sieve.conf
    并注释行:
    #sieve=~/.dovecot.sieve

  • /etc/dovecot/conf.d/90 plugin.conf
    编辑为:

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
  • 编辑
    /etc/dovecot/conf.d/15 lda.conf
    /etc/dovecot/conf.d/20 lmtp.conf
    以匹配:

    protocol lda/lmtp { # do not copy/paste this line!
      mail_plugins = $mail_plugins sieve
    }
    
    警告:您可能在
    协议
    选项下有其他设置,请保留它们。文件中的行
    协议lda/lmtp
    更改,请保留原始设置

  • 创建文件夹
    /etc/dovecot/sieve/

  • 使用以下内容创建文件
    /etc/dovecot/sieve/default.sieve

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
  • 将文件夹权限更改为您的虚拟电子邮件用户和组,如:
    chown vmail:vmail/etc/dovecot/sieve/-R
    。如果您错过了此功能,dovecot将投诉

  • 重新启动一切:
    service postfix重新启动;service dovecot重新启动;service spamassassin重新启动

  • 尝试向服务器上的某个电子邮件发送电子邮件(来自外部)
    protocol lda/lmtp { # do not copy/paste this line!
      mail_plugins = $mail_plugins sieve
    }
    
    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }