我想为自己运行一个电子邮件服务器(我倾向于使用 postfix),但我需要它看起来像这样:
[MUA] <-> [主 MTA] <--> [外部 MTA]
家庭 MTA 位于我家的虚拟化服务器上,仅接受来自外部 MTA 的邮件(通过其配置和防火墙)。外部 MTA 仅接受我域的电子邮件,具有 DKIM/SFP,并且(至少最初)不会向除我的家庭 MTA 之外的任何人发送电子邮件。
我认为如果我做对了,应该可以防止我被列入黑名单,也可以防止我的家庭 IP 被人肉搜索,因为使用我的域的 MX 记录列出的 MTA 不会是这个。我认为这几乎就像一个堡垒或跳转服务器,但用于邮件而不是 ssh。
- 这可能吗?
- 我还应该考虑什么?例如,我发现一个页面讨论如何防止反向散射电子邮件,而我以前从未想到过。
- 我假设 MTA 到 MTA 可以加密和验证。那是 SASL 吗?
- 有没有专门用于这种设置的术语,以便我可以找到基本配置并从那里开始?例如,这叫做带卫星的智能中继还是别的什么?
编辑:我想我应该禁用 SMTP 而使用 SMTPS,并配置 postfix 不接受未经身份验证的用户发出的出站电子邮件。这样可以防止垃圾邮件发送者使用我的 MTA 发送邮件,对吗?如果是这样,为什么仍然建议不要运行自己的邮件服务器,因为要处理所有垃圾邮件?
是的,多跳传递是 SMTP 原始设计的一部分。它与拥有备份 MX 或使用邮件转发没有什么不同。电子邮件诞生于互联网之外还存在许多其他网络的时代,您经常需要使用电子邮件网关从一个地方到达另一个地方。
每个 MTA 都会添加
Received:
一行,表明它从哪里收到消息。很可能它不止有一行。发送几封测试邮件(发送到不同的域,例如 Gmail)并确保检查完整的标头。一些 MTA 可以配置为删除“已接收:”标头,但如果我没记错的话,它们也是 SMTP 循环预防机制的一部分。MTA 到 MTA 连接通常使用 TLS 进行加密。端口 25 上的标准邮件交换在“希望最佳”模式下使用 STARTTLS,但您通常可以配置 MTA,使 STARTTLS 对某些目的地强制执行,或使用“仅 TLS”(SMTPS)端口。
(尽管您可以自由使用任何其他加密机制,例如通过 IPsec 的普通 SMTP,或通过 WireGuard 隧道……或其他完全不同的东西,例如通过 SSH 的 UUCP。)
就 SMTP 而言,SASL 只是一个身份验证框架。是的,从技术上讲它可以提供加密,但 SMTP 不使用该功能。
(实际上很少有协议可以做到这一点;LDAP 就是其中之一。原因之一是 SASL 的加密功能仅在某些 SASL 机制中可用 - 例如,带有 Kerberos 的“GSSAPI”能够生成加密密钥,但带有基本密码的“PLAIN”无法做到这一点。)
与 TLS 一样,您可以使用任何您喜欢的身份验证 - 您可以要求 SASL,或使用 TLS 客户端证书,或基于 IP 的身份验证(尤其是使用 VPN)。
广义上,SMTP 只是称之为“中继”。以这种方式向外发送邮件(即,所有向外传递逻辑都依赖于单个代理/跳转服务器)通常称为“智能主机”或类似名称,但据我所知,这不是一个正式术语。
在客户端,使用 Postfix
relayhost
选项将所有邮件通过单个服务器转发;在服务器端,使用特定系统(覆盖 MX 记录)transport_maps
转发您自己域的邮件。(有很多将 Postfix 配置为 Gmail 的“智能主机”客户端的示例,这些示例可以适用于任何其他接受 TLS 和密码验证的 SMTP MTA。但通常这样的示例根本不涵盖入站邮件。)