如何将垃圾邮件移至垃圾邮件文件夹

use*_*101 16 postfix-mta spamassassin spam-prevention mail-server

我已经在我的centos 5.10上安装了postfix,dovecot,Clamav,Spamassassin和amavisd-new.教程在这里:http://catatanlepas.com/komputer/aplikasi/server-mail/postfix/359-instalasi-postfix-menggunakan-dovecot-di-centos-5-5

我只是没有在该教程上安装Razor,Pyzor,dan DCC.

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

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

请帮助我,我在谷歌搜索了5天,我在这堆栈:(

谢谢.

TCB*_*B13 32

我 - 设置您的电子邮件发送以使用Dovecot LDA:

OP链接的原始网站是离线的,但我相信电子邮件的发送是通过sendmail程序进行的,应该通过Dovecot LDA完成您的需要.(避免电子邮件原始标题更改).

编辑Postfix master.cf(开头):

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin
Run Code Online (Sandbox Code Playgroud)

在文件的末尾:

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} 
Run Code Online (Sandbox Code Playgroud)

现在编辑Postfix main.cf并添加(可选,检查(3)下面):

spamassassin_destination_recipient_limit = 1
Run Code Online (Sandbox Code Playgroud)

现在,您的电子邮件将通过Dovecot LDA发送,不会更改标题.对于好奇的,这里是我的配置的一些细节:

  1. 配置可以与加号/子寻址/收件人分隔符一起使用(发送到的电子邮件user+nospam@example.com将被发送到user@example.com收件箱中) - 这就是为什么我添加-d ${user}@${nexthop}这将删除+和域之前的所有内容.要启用此功能,也一定要加recipient_delimiter = +main.cf;
  2. 我的旗帜flags=DROhu,他们没有添加任何异常,但他们可以在这里理解:http://www.postfix.org/pipe.8.html ;
  3. spamassassin_destination_recipient_limit = 1需要确保每个收件人都被spamassassin单独处理.由于D上面的标志(包括X-Original-To标题),这是必需的.如果你不关心这个标题,你可以删除标志,这是不需要的.

II - 将垃圾邮件移至Junk文件夹:

(在@Electronic Technologies的帮助下,访问/sf/answers/2272924461/)

您还可以配置Dovecot将检测到的垃圾邮件移动到JunkIMAP文件夹.请按照:

  1. 编辑/etc/dovecot/conf.d/15-mailboxes.conf和取消注释/添加Junk文件夹(应该在namespace inbox附近的部分mailbox Trash):

    mailbox Junk {
       special_use = \Junk
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装dovecot-sieve使用apt-get install dovecot-sieve;

  3. 编辑/etc/dovecot/conf.d/90-sieve.conf并评论该行:#sieve = ~/.dovecot.sieve

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

    plugin {
        sieve = /etc/dovecot/sieve/default.sieve
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 编辑/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
    }
    
    Run Code Online (Sandbox Code Playgroud)

    警告:您可能在protocol选择下有其他设置,保留它们.protocol lda/lmtp文件中的行更改,保留原始文件.

  6. 创建文件夹 /etc/dovecot/sieve/

  7. /etc/dovecot/sieve/default.sieve使用此内容创建文件:

    require "fileinto";
    if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
    }
    
    Run Code Online (Sandbox Code Playgroud)
  8. 将文件夹权限更改为您的虚拟电子邮件用户和组,如:chown vmail:vmail /etc/dovecot/sieve/ -R.如果你错过了这个鸽子会抱怨!

  9. 重启一切: service postfix restart; service dovecot restart; service spamassassin restart

  10. 尝试向服务器上的某些电子邮件发送电子邮件(从外部服务器),首先是普通电子邮件,然后是另一个电子邮件:XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X.第二封电子邮件应该进入Junk文件夹,第一封应该进入收件箱.

如果这在您第一次尝试时不起作用,请查看日志:tail -f /var/log/mail.log并在tail运行时发送电子邮件.一个好的工作设置应报告stored mail into mailbox 'INBOX'stored mail into mailbox 'Junk'.

  • 这对我有用,除了`-e/usr/lib/dovecot/deliver -f $ {sender} -d $ {user} @ $ {nexthop}`部分.它以'(未知用户)'反弹.我确实尝试使用`-a $ {recipient}`而不是`-d $ {user} @ $ {nexthop}`,但是它确实只是在以太丢失了(它说它已发送,但没有收到任何信息) .所以我最后使用`-e/usr/sbin/sendmail -oi -f $ {sender} $ {recipient}`代替它,它的作品很有魅力:D (2认同)
  • 有些`dovecot`设置在`dovecot.conf`中没有`include conf.d/*.conf`.我意识到这一点之前花了几个小时.而且我并不孤单http://serverfault.com/a/778462/122228 (2认同)

ETe*_*ech 7

对于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
}
Run Code Online (Sandbox Code Playgroud)

然后/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}
Run Code Online (Sandbox Code Playgroud)

(!!)user = vmail - 将用户更改为为spamassassin设置的用户

并将内容过滤器添加到smtp

smtp  inet  n  - - - -  smtpd -o content_filter=spamassassin
Run Code Online (Sandbox Code Playgroud)

在/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
Run Code Online (Sandbox Code Playgroud)

我将X-Spam标题添加到将用于稍后筛选过滤的消息中重新启动spamassassin,重新加载dovecot和postfix

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

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

require "fileinto";
  if exists "X-Spam-Flag" {
          if header :contains "X-Spam-Flag" "NO" {
          } else {
          fileinto "Junk";
          stop;
          }
  }
Run Code Online (Sandbox Code Playgroud)


Dav*_*ica 0

嗯,有多种方法,但这是我发现有效的方法。当你安装了 postfix、dovecot、spamassassin 和(我推荐 procmail)之后,你可以告诉 procmail/spamassassin 如何将垃圾邮件分发到各个文件夹中。带鸽舍。我使用以下 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)
Run Code Online (Sandbox Code Playgroud)

文件夹设置和 postfix 配置为通过 procmail 过滤邮件:

mailbox_command = /usr/bin/procmail -a "$EXTENSION"
Run Code Online (Sandbox Code Playgroud)

现在,您可以设置 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/'
}
Run Code Online (Sandbox Code Playgroud)

现在,让这一切自动工作的最后一个关键是,fetchmail当邮件到达收件箱时进行扫描,将其交给 procmail,将垃圾邮件/垃圾邮件可能放在正确的文件夹中,并读取垃圾邮件中的邮件(以删除)并spam-unlearn(学习为ham)。典型的 fetchmail 脚本是 ~/.fetchmailrc。它只包含轮询您的邮箱的命令:

poll mail.yourserver.com protocol IMAP : user yourname with password yourpass ssl \
sslfingerprint "D9:73:1A:FE:C6:7C:E7:9B:F1:31:F8:A1:A0:E1:F9:27"
Run Code Online (Sandbox Code Playgroud)

(您可以通过简单地运行fetchmail --verbose您的 .fetchmailrc 文件来获取服务器指纹,它将打印服务器指纹,检查您当前的指纹,告诉您它们不匹配并关闭连接 - 但是 - 您刚刚获得了正确的指纹下次:-)

最后,设置几个 cron 作业,通过读取 spam-learn 和 spam-unlearn 文件夹来运行整个过程。每小时就足够了。该脚本可以如下所示:

#!/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
Run Code Online (Sandbox Code Playgroud)

cron 作业只需​​执行上面的 spamv.sh 文件:

05 * * * * /usr/local/bin/spamv.sh
Run Code Online (Sandbox Code Playgroud)

我已经运行这样的服务器近十年了,而且运行良好。培训文件驻留在用户的主目录中,可以轻松地逐个移动,为新用户提供良好的基础集。祝你好运。几年前我为openSuSE 11.0做了一个关于此设置的简短说明。那里可能还有更多信息。

PS Rayzor 值得加载。