为什么 SMTP 服务器不要求所有发件人在接受邮件之前进行身份验证?
答案1
邮件提交协议(RFC4409) 完全按照您的要求进行操作(它需要加密和身份验证)并且被大多数 ISP 使用,但它可能不是您的意思,因为它仅限于出站。
对于入站来说,这更难。不可能有用户/密码机制,因为世界上任何服务器都可能在没有事先通知的情况下合法地向您发送某些内容,因此接收服务器需要调查发送者。有几种协议允许在 SMTP 中实现这一点,特别是:防晒指数,密钥管理信息系统和DMARCSPF 的历史很曲折,微软的发件人ID协议确实使事情变得混乱并且没有任何帮助。
SPF 旨在使用 DNS 条目通过 IP 地址或主机名授权电子邮件来源。除非规则导致直接通过或失败结果,否则它实际上并不有效,并且对用户设置施加限制(例如,阻止用户使用 ISP 的邮件服务器从其公司的域发送邮件)。它的有效性有限,但它得到了许多大型 ISP 的支持。
DKIM 旨在通过提供邮件头和邮件正文的加密哈希来证明邮件内容在传输过程中未被篡改。它与 S/MIME 签名类似,但在堆栈中处于不同的级别。
SPF 和 DKIM 可以很好地协同工作,但它们缺乏管理监督,无法确定在发生故障时该做什么 - 没有提供报告违规行为的机制,大多数故障最终都只是丢失在日志文件中。DMARC 旨在通过定义报告机制来解决这个问题。因此,DMARC 消除了对如何处理 SPF 和 DKIM 故障的猜测,而这本来是必需的。
回答你的问题,SPF 很容易实现(它只是一个 DNS 记录),但决定在其中放入什么可能会很麻烦。DKIM 很复杂,与邮件服务器的集成可能很困难。DMARC 依赖于两者的实现。总而言之,这就是为什么许多域没有实现它们中的任何一个。
还有其他可能的替代方案,例如 DJBIM2000协议将存储和身份验证的负担转移给发送方,但这将涉及替换整个 SMTP 服务器,因此它更多的是一项学术活动。
答案2
您想解决什么问题?
假设每个 SMTP 服务器都需要用户名和密码。您现在必须为可能向您的任何用户发送电子邮件的每个人维护一个用户名和密码。这是不可能的。但是,想象一下,这是可能的。然后,垃圾邮件发送者只需创建一个新的用户名和密码并向您发送垃圾邮件。如果您禁用该帐户,他们会创建一个新的用户名和密码。这并不比您阻止他们的 IP 地址更好;他们会转移到新的 IP 地址。
假设您只接受经过 GPG 签名的电子邮件,这样您就知道是谁发送了该邮件。这是另一种身份验证形式,但它不需要为世界上的每个用户设置用户名和密码。垃圾邮件发送者只需签署所有垃圾邮件即可。这会让他们的速度慢一点,而且您会知道,是的,这些垃圾邮件绝对是来自某个人。但是您仍然必须阻止该人,然后他会生成新的 GPG 密钥,然后循环重复。
SMTP 是一种“联合服务”。每个电子邮件系统都是独立的,但联合(互联网上每个 SMTP 服务器的集合)可以相互通信。如此庞大的联合的问题在于它必须建立在信任的基础上;而垃圾邮件发送者破坏了这种信任。信任是一个社会问题。你无法用技术解决社会问题。