![背景](https://linux22.com/image/656385/%E8%83%8C%E6%99%AF.png)
背景
我们有一个正在运行的 Web 应用程序webapp.example.com
,它(除其他外)不时通过电子邮件发送消息。这些消息并不重要:虽然我们希望尽最大努力发送这些消息,但消息发送失败并不重要。
考虑到这一点,昨天我问如果不想收到电子邮件退回该怎么办?—遗憾的是,答案似乎是丢弃此类反弹后首先接收它们(而不是拒绝它们,例如在 SMTP 层或更低层;或者使用空返回路径传输原始消息)。
选择
假设 Web 应用程序生成的消息当前具有返回路径,[email protected]
并且在 DNS 中,域example.com.
由以下记录完全定义:
@ SOA ns.example.net. hostmaster 1 86400 7200 604800 300
NS ns.example.net.
NS ns.example.org.
MX 1 mx.example.net.
TXT "v=spf1 a:192.0.2.0/24 -all"
webapp A 198.51.100.1
TXT "v=spf1 a -all"
我们的问题是,为了接收退回邮件(尽管纯粹是为了可以丢弃它们),我们认为:
webapp.example.com
必须运行接受退回消息的 SMTP 服务器;其他机器必须运行接受退回邮件的 SMTP 服务器,并且必须添加 MX 记录
webapp.example.com.
以便将邮件投递到那里;或者返回路径必须改变,例如改为
[email protected]
— 在这种情况下,该域的邮件交换器不仅必须接受退回消息,而且必须:(a)结果域的发件人策略(例如
example.com.
)必须更新为包含a:webapp.example.com
;或(b)Web 应用程序必须通过该域的发件人策略批准的主机中继所有传出消息,例如
192.0.2.0/24
。
问题
选项#1是不可取的,因为我们不特别希望在托管web应用程序的机器上运行额外的面向公众的服务(尤其是那些功能很少的服务)而带来额外的安全风险。
选项#2 是不可取的,因为我们唯一面向公众的邮件服务是由第三方提供的,而创建新的收件人域超出了我们现有服务协议的范围。
选项 #3(a) 是不可取的,因为我们不希望授予webapp.example.com
在 内的其他发送者发送消息的权限example.com
。
webapp.example.com
选项#3(b)是不可取的,因为它需要维护从(面向公众的)到我们安全的、仅内部使用的网络的VPN 连接。
那么我们该怎么办呢?
在许多情况下,选项 2 可能是最佳解决方案。但是,鉴于上述原因,对我们来说,选项 1 看起来最不糟糕——但它仍然感觉过于夸张。有没有更好的方法?
答案1
通过阅读您之前的问题主题,我了解到您正在使用 exim。我的建议是将其配置为“仅发送”MTA。我个人使用过本指南在公共网络上快速配置仅发送邮件服务器。基本上它的作用是拒绝外部连接到 smtp 端口。
我知道这不是解决问题最“标准”的方法,但它非常实用。
缺点是,一些电子邮件提供商可能不喜欢无法联系到原始服务器,并拒绝接受来自该服务器的邮件。根据我的经验,我从未见过这样的事情发生,但我猜这取决于您发送的“非关键”邮件的数量,以及这些邮件被退回的频率。