Dovecot+Postfix+Spamassassin(虚拟用户)-自动移动垃圾邮件

Dovecot+Postfix+Spamassassin(虚拟用户)-自动移动垃圾邮件

所以我有一个接收垃圾邮件的邮件服务器,我需要将这些垃圾邮件转发到虚拟用户的垃圾邮件文件夹。我有一个 dovecot、postfix 和 spamassassin 一起工作,但我的问题是,我似乎无法找到一种方法将垃圾邮件(标题为 *****SPAM***** 的邮件)转发到虚拟用户的垃圾邮件/垃圾邮件文件夹。如果有人能帮助我解决这个问题,那就太好了。如果您需要任何信息/文件,请随时给我发消息。

该系统运行的是 Ubuntu 14.04 LTS(64 位),带有 dovecot、postfix 和 spamasssassin。

答案1

有很多方法可以实现您的愿望,但我更喜欢下一种方法。

spamassassin作为本地服务启动,在文件套接字而不是 IP 端口上可用。这是为了提高性能。 exim使用内容扫描选项进行编译,并配置为与spamassasin该评分消息交互并返回分数。如果分数高于阈值(我的情况是 49 分),则会向消息添加一些特殊标头:

spamd_address           = /tmp/spamd.sock

. . . . .

acl_data:
accept  hosts           =  : +relay_from_hosts
accept  condition       = ${if >{$message_size}{1M}}
warn    spam            = spamd
        condition       = ${if >{$spam_score_int}{49}}
        add_header      = X-Spam-Score: $spam_score_int
        add_header      = X-Spam-Ooops: Detected
        log_message     = SpamAssassin detected mesage
accept

我没有检查大于 1 MiB 的垃圾邮件,因为垃圾邮件通常要小得多。然后我将邮件发送到用户的邮箱。我通过 dovecot 的传输来做到这一点deliver

localdelivery:
        driver          = pipe
        user            = mailnull
        command         = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -f $sender_address
        temp_errors     = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
        envelope_to_add
        return_path_add
        delivery_date_add
        log_output

dovecot有一个pidgeonhole实现sieve功能的插件。所有消息都通过如下所示的全局过滤器进行处理:

####
require "fileinto";
if exists "X-Spam-Ooops"
{
   fileinto "Junk";
   stop;
}
else
{
   # Trigger to launch next script in sequence
   keep;
}
####

这里的逻辑很简单:如果传递的消息有X-Spam-Ooops标题(由分数分配eximsa,它将被传递到INBOX.Junk每个特定用户的子文件夹中。在全局过滤器处理完毕后,需要else带有动词的分支keep通过自定义用户的过滤器进一步处理消息。

相关内容