让 exim 仅在邮件可以发送时才接受重定向邮件

让 exim 仅在邮件可以发送时才接受重定向邮件

我运行一个具有所有常用功能的小型邮件服务器:发送本地邮件、接收本地文件夹的邮件、根据别名和邮件列表重定向邮件。

重定向会转到其他域名(包括 Google)的地址,因此发送到这些重定向地址之一的所有垃圾邮件都会损害我的服务器在 Google 上的声誉,甚至导致我本地生成的邮件受到速率限制。

我可以想象,减少此问题的一种方法是永远不存储必定会被重定向的邮件。这样,如果 Google 将某些邮件视为垃圾邮件而拒绝,我也会这么做。这样,我的服务器就不必重试发送,而原始服务器(作为垃圾邮件发送服务器)则不必重试。

所以问题是:我可以在 ACL 的某个地方告诉 exim

  • 确定邮件是否要通过重定向到远程位置进行投递,
  • 立即尝试一下,
  • 仅当中继成功时才接受邮件?

谢谢!

答案1

这不是一个答案,而只是对您正在尝试做的事情的复杂性的解释。

你必须总是请记住,一封电子邮件可以发送给多个收件人。您说“如果是转发器,我不想将其排队”。那么,当一个是转发器,一个是本地邮箱时,您会怎么做?您只在 DATA 阶段知道邮件的内容(标题和正文),此时您已经接受了收件人(一个转发器和一个本地)。

这是很多由于 SMTP 协议不允许应用每个收件人的偏好设置,因此执行您想要的操作会更加复杂。Exim 中有一项新功能,称为 PRDR(每个收件人的传递响应)。这是几年前的草案协议,是 SMTP 协议的扩展。除了 Exim,几乎没有其他邮件服务器支持它。它需要邮件服务器连接到您的 Exim 邮件服务器并说“我看到您允许 PRDR,所以我将请求它并允许您拒绝每个用户的电子邮件,而不仅仅是全部或全部。”

它要求您配置 PRDR ACL 来检查特定事项(垃圾邮件分数、收件人将特定发件人标记为垃圾邮件等)。每个收件人都会调用一次 ACL邮件已收到(常规 SMTP 不允许),并且您可以在该 PRDR ACL 中为每个收件人拒绝或接受。由于发送邮件服务器请求 PRDR 模式,因此它将理解它。

否则,您要么全部接受(并冒着在 Google 上声誉不佳的风险),要么全部拒绝(并冒着被拒绝所需电子邮件的风险)。

您也可以为每封入站邮件指定最多 1 个收件人。当您以这种方式限制时,您可以在数据阶段指定转发者/非转发者,并根据垃圾邮件分数决定要做什么。但是对于有 10 个收件人的电子邮件,您将向第一个收件人发送 1 封电子邮件,其余 9 个收件人暂时失败,发送邮件服务器将对其进行排队并稍后重试。经过一段时间(取决于发送邮件服务器队列重试时间)您将再次向第二个收件人发送电子邮件,其余 8 个暂时失败。重复 1 次,剩余 7 次。重复 1 次,剩余 6 次。记住,在中间每个传递会出现一个您无法控制的暂停,因为这取决于发件人重试排队消息的时间。

这方面的选择并不好:-/

** 讽刺的是,LMTP 是 SMTP 协议的一个子集,旨在从入站 SMTP 服务器传送到后端邮箱服务器(即不通过互联网,仅在内部)。LMTP允许每个收件人拒绝。因此,如果您想这样考虑,请将 PRDR 视为将 LMTP 的特定功能应用于 SMTP 协议。

答案2

发件人验证会给外部 MTA 带来额外负担,因此不建议这样做。但您可以设置通用的防垃圾邮件 MTA。

我的经验表明,两个简单的条件有助于检测大约 90% 的垃圾邮件:

  1. 没有 PTR 记录的发件人绝对是垃圾邮件发送者。那些无法为合法 MTA 设置 PTR 的人就更糟糕了。
  2. 具有动态分配 IP 地址的发件人应该通过提供商的中继发送电子邮件。所有这些static-dynamic-123-456.789-client.fiber.peer.tld 垃圾邮件发送者应该通过简单的正则表达式列表将其过滤掉。

来自上述主机的每条消息都应提供给bayes。我选择的是spamassassin。其余所有消息都应由 进行测试bayes

这种方法可以过滤掉大约 99.9% 的垃圾邮件,并且有一个很大的优势 -bayes自动更新。您所要做的就是定期将一些非常活跃的垃圾邮件发送者主机添加到规则 #2 的正则表达式列表中。

检测到垃圾邮件后,您可以轻松阻止其转发到gmail或其他地方。

相关内容