为啥我应该说服开发人员使用端口 587 进行所有 SMTP 通信?

Posted

技术标签:

【中文标题】为啥我应该说服开发人员使用端口 587 进行所有 SMTP 通信?【英文标题】:Why should I convince developers to use port 587 for all SMTP communication?为什么我应该说服开发人员使用端口 587 进行所有 SMTP 通信? 【发布时间】:2011-03-29 22:27:18 【问题描述】:

使用端口 587 进行所有客户端到 MTA 的通信的趋势越来越明显。它在标准轨道 RFC 中:http://www.ietf.org/rfc/rfc2476.txt

我的问题是“为什么?”。如果它们都做同样的事情,为什么在同一台服务器上运行 2 个 SMTP 服务器实例?除了让我以管理员身份进行故障排除之外,它还提供了哪些安全功能。

这似乎是不必要的复杂性,除非 ISP 阻止端口 25。即便如此,如果 ISP 阻止端口 25 以防止垃圾邮件,这只是意味着在端口 587 之前需要更多时间也被阻止了,我们将不得不完全使用不同的端口。

似乎我们正在为自己创造更多的工作,而不是解决问题并开始验证 SMTP

【问题讨论】:

【参考方案1】:

请看。

http://www.uceprotect.net/downloads/MAAWGPort25English.pdf

我认为您缺少的是端口 587 仅经过身份验证。无论收件人是否是本地人,您都不应该在端口 587 上接受未经身份验证的电子邮件。我们(作为 ISP)阻止出站端口 25 以防止直接到 mx 的垃圾邮件。例如来自 botted 计算机。在阻止我们的住宅/动态用户群在端口 25 上发送出站消息(我们仍然允许在端口 25 上从我们的 IP 空间进行未经身份验证的中继)时,滥用报告减少了 85% 以上。

ISPS 不会开始阻塞 587(他们不应该,因为它不是供 MTA 到 MTA 使用的,只有 MUA 到 MTA,因为它是提交端口)。它使管理更加容易。同样在 MTA 方面,强制所有本地用户进行身份验证可以更轻松地缓解垃圾邮件。当他们的盒子被拥有并偷走他们的 smtp 信用证时。您需要做的就是禁用他们的帐户/密码。当通过 ip 使用中继时,您需要阻止他们连接到邮件服务器(我们通过将 ACL 动态应用到他们的 DSL/Cable 连接来做到这一点。

如果您正在编写 MUA 或 MTA,您需要同时支持两者,并且在 MUA 或发送电子邮件的情况下,它应该默认为 587 尝试 TLS 和 smtp 身份验证,并且仅故障回复到 465 , 25 如果失败。

【讨论】:

对 465 端口有什么期望? SMTP Auth 也一样? 465 是 SSL 下的 SMTP。而 25 和 587 开始时未加密,并且可以使用 starttls(如果支持启用 ssl 加密连接)。端口 465 从一开始就是 SSL。身份验证是可选的,取决于服务器。 谢谢,你的解释“点击”了。我没有想到所有入站 SMTP 服务器都应该有一个 MX,而所有端口 587 服务器都没有这样链接。这通过端口 25 更好地划分了关注点的分离。 我们有入站 MXS 和中继服务器在不同的盒子上,因为它使我们能够更重地保护 MXs 以抵御垃圾邮件发送者。很高兴它有帮助。【参考方案2】:

我快速阅读了 RFC,他们的想法是将 SMTP 世界分为两个领域:传输邮件(这就是 SMTP 的开发目的)和提交邮件。

作者认为 SMTP 并非旨在供邮件客户端(MUA,消息用户代理)使用,而只是供邮件服务器使用,将邮件路由到其目的地。他们认为,如果您以这种方式划分 SMTP 世界,那么您可以编写一个只能由 MUA 访问的 SMTP 服务器,然后该 MUA 能够做事并做出“正常”的假设,转发 SMTP 服务器应该/可能不做。 “正常”的 SMTP 服务器一直被称为 MTA,即消息传输代理。作者建议将这种新型 SMTP 服务器命名为 MSA,Message Submission Agent。

似乎他们认为这会使实现这两种服务器类型更容易,甚至可能更安全。 RFC 解释了 MSA 与 MTA 相比有哪些不同之处。例如,RFC 强制使用授权,而原始 SMTP 协议没有授权(SMTP AUTH 是后来添加的,似乎是 RFC 2476;但是 SMTP AUTH 本身是后来在 RFC 2554 中指定的,它已被替换由 RFC 4954)。

需要将消息从各种来源中继到各种目的地的 MTA 不能对每条消息都使用身份验证(另一台服务器应如何对您的服务器进行身份验证?)。但是,作为消息起点的 MSA 可以并且必须要求来自其对等方(邮件客户端)的身份验证。虽然 MTA 必须不加更改地转发消息,但要添加 Received 标头,而 MSA 可能会“清理”电子邮件,例如通过填写缺少的标题和类似的东西。

【讨论】:

rfc5321 说,“邮件传输代理”(MTA)”。我认为这与您上面的 line1/p2 冲突。 @Ellipticalview:您的意思是“SMTP 不打算由邮件客户端(MUA,消息用户代理)使用,而只能由邮件服务器使用”? MUA=客户端,MTA=服务器。 SMTP 旨在用于将邮件从一台服务器移动到另一台服务器,它从用户提交到服务器的方式应该是不同的。但是客户也开始使用它,今天我们有 ports 25 和 465 用于来自 MTA 的连接和端口 587(称为 submission)用于经常处理的 MUA不同。 我认为你的总体观点是公平的。但我也认为现在非常令人困惑的是,虽然“M”最初仅指代 MTA、MUA 和 MDA 的“邮件”,但现在它有时指代“消息”,但仅指 MUA。所以我认为我们需要从一个新的首字母缩略词重新开始,比如可能是 ITA,代表输入传输代理,或 MITA,代表消息输入传输代理,或者可能是 MSTA,代表消息提交传输代理,或者 MTA 以外的其他名称。

以上是关于为啥我应该说服开发人员使用端口 587 进行所有 SMTP 通信?的主要内容,如果未能解决你的问题,请参考以下文章

Android 发送自定义电子邮件 STARTTLS 端口 587

谷歌云引擎:开放587端口

为啥我的客户端应该只连接到一个子节点集群工作人员时接收来自所有子节点集群工作人员的套接字发射?

查看端口 587、25、110、465、995、143、993 上的 SSL 证书

为啥要使用托管(C# 和 .NET)或本机代码进行 Windows API 开发?

邮件开发命令行发邮件