防止垃圾邮件被 Postfix 转发(同时本地传送到垃圾邮件文件夹)

防止垃圾邮件被 Postfix 转发(同时本地传送到垃圾邮件文件夹)

我们有一个非常标准的 Postfix/Amavis 设置,我们使用 Dovecot LDA 在本地发送邮件。Amavis 发送垃圾邮件,我们使用 Sieve 将其放入用户的垃圾邮件文件夹中。

问题是,被我们的 Amavis 标记为垃圾邮件的邮件不应转发到外部地址。我不知道如何实现这一点。

我确实找到了一些对 Postfix header_checks 的引用,但这些引用是由 Amavis 开始检查之前的清理过程处理的。转发过程如下:

Dec 13 23:13:32 mail postfix/smtpd[14405]: connect from ...
Dec 13 23:13:32 mail postfix/smtpd[14405]: Anonymous TLS connection established from ... SSLv3 with cipher AES128-SHA (128/128 bits)
Dec 13 23:13:32 mail postfix/smtpd[14405]: 5659141F35: client=..., sasl_method=PLAIN, sasl_username=test.piet@...
Dec 13 23:13:32 mail postfix/cleanup[14251]: 5659141F35: message-id=<[email protected]>
Dec 13 23:13:32 mail postfix/qmgr[13623]: 5659141F35: from=<test.piet@...>, size=1701, nrcpt=1 (queue active)
Dec 13 23:13:32 mail postfix/smtpd[14405]: disconnect from ...
Dec 13 23:13:37 mail postfix/smtpd[14358]: connect from localhost[127.0.0.1]
Dec 13 23:13:37 mail postfix/smtpd[14358]: ACF4F42260: client=localhost[127.0.0.1]
Dec 13 23:13:37 mail postfix/cleanup[14251]: ACF4F42260: message-id=<[email protected]>
Dec 13 23:13:37 mail postfix/smtpd[14358]: disconnect from localhost[127.0.0.1]
Dec 13 23:13:37 mail postfix/qmgr[13623]: ACF4F42260: from=<test.piet@...>, size=2408, nrcpt=1 (queue active)
Dec 13 23:13:37 mail amavis[11530]: (11530-14) Passed SPAM, [188.142.56.16] [188.142.56.16] <test.piet@...> -> <mark.ruys@...>, Message-ID: <[email protected]>, mail_id: iTVFrnGF7RaS, Hits: 999.001, size: 1701, queued_as: ACF4F42260, 5305 ms
Dec 13 23:13:37 mail postfix/smtp[14253]: 5659141F35: to=<mark.ruys@...>, orig_to=<mark@...>, relay=127.0.0.1[127.0.0.1]:10024, delay=5.4, delays=0.11/0/0/5.3, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as ACF4F42260)
Dec 13 23:13:37 mail postfix/qmgr[13623]: 5659141F35: removed
Dec 13 23:13:37 mail postfix/smtp[14414]: Trusted TLS connection established to gmail-smtp-in.l.google.com[173.194.65.26]:25: TLSv1.1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)
Dec 13 23:13:38 mail postfix/smtp[14414]: ACF4F42260: to=<mark.ruys@...>, relay=gmail-smtp-in.l.google.com[173.194.65.26]:25, delay=0.84, delays=0/0.02/0.08/0.73, dsn=2.0.0, status=sent (250 2.0.0 OK 1386972818 f8si3542819eep.162 - gsmtp)
Dec 13 23:13:38 mail postfix/qmgr[13623]: ACF4F42260: removed

答案1

通用解决方案

如果您有另一台服务器,那么解决方案就很简单了。据说,另一台机器名为 second.example.com。在您的原始机器上,将main.cf中继主机设置为 second.example.com

relayhost = [second.example.com]:25

在 second.example.com 中,设置header_checks为检查电子邮件是否可能是垃圾邮件,方法是检查垃圾邮件主题中的单词或检查标题中的垃圾邮件分数。在此示例中,我将使用主题检查方法。header_checks 语法是

/^Subject: \[SPAM\]/ DISCARD

完成。现在别名电子邮件将流经 second.example.com,并且当其为垃圾邮件时将被丢弃。


如果你没有其他服务器,那么你可能的选择是smtpd在 master.cf 中设置额外的守护进程或Postfix 多个实例

附加 smtpd 守护进程

状态:不起作用

想法是添加新的 smtpd 监听另一个端口并覆盖 header_checks 和 Relayhost 的配置。将配置main.cf添加relayhost到另一个 smtpd 守护进程。

relayhost = [127.0.0.1]:12225

定义master.cf并覆盖header_checks 以检查垃圾邮件标记的电子邮件并清空,relayhost以使其不会循环到自身。

[127.0.0.1]:12225    inet  n       -       n       -       -       smtpd
   -o header_checks=pcre:/etc/postfix/killspam
   -o relayhost=

不幸的是,这种方法行不通。根据人 8 smtpd,smtpd 会默认拒绝本手册页中未列出的参数。因此,它仍然使用 main.cf 中的旧配置。

Postfix 多个实例

状态:有效

这个想法是设置一个默认实例来处理传入的电子邮件,另一个实例来处理传出的电子邮件,就像上面的设置一样。我没有给你详细信息,但你应该调整一些参数来运行第二个实例。然后添加其他配置,如空relayhostheader_checks

相关内容