为什么Amazon EC2 限制25 端口?

Why does Amazon EC2 limit port 25?

它说 here...

Amazon EC2 imposes default sending limits on email sent via port 25 and throttles outbound connections if you attempt to exceed those limits. To remove these limits, submit a Request to Remove Email Sending Limitations. You can also connect to Amazon SES via port 465 or port 587, neither of which is throttled.

为什么它不限制端口 465 和 587?为什么不是每个人都使用这些端口而不是 25 并完全避免节流问题?

这是一项 anti-spam 措施。

如果没有此限制,您可以创建一个新的 Amazon 帐户,启动 EC2 机器并发送几百万封垃圾邮件,然后再做任何事情。通过限制连接,新用户帐户无法使用该方案。

465/587 是经过身份验证的端口,它特别提到了 Amazon Simple Email Service (SES),它专为批量发送电子邮件而设计,并经过调整以检测垃圾邮件发送者的使用。

编辑以添加 SES 信息

当您第一次注册 SES 时,您会被置于一个沙盒中。这将对您的帐户施加以下限制。

  • 您只能将邮件发送到 Amazon SES 邮箱模拟器以及已验证的电子邮件地址和域
  • 您只能从经过验证的电子邮件地址和域发送邮件。
  • 您每 24 小时最多可以发送 200 条消息。
  • Amazon SES 每秒最多可以接受来自您帐户的一条消息。

这基本上意味着如果您想在生产场景中使用 SES,因为您只能向/从您已明确验证的帐户发送邮件。您需要请求提高发送限制。您可以从控制台或通过提交支持票来执行此操作。

您随后将应用新的发送限制和每日配额。例如,在我的开发帐户上,我有每天 50,000 个每日配额和 14 个/秒的发送限制。

如果我尝试通过 SMTP(无论端口)每秒发送超过 14 条消息,您将收到此 SMTP 错误消息 454 Throttling failure: Maximum sending rate exceeded如果我尝试发送超过 50,000 条消息,我会收到454 Throttling failure: Daily message quota exceeded

为了了解节流的工作原理,您需要考虑正在发生的过程。

当您通过 SMTP(在任何端口上)连接到 SES 并传递您的凭据时,AWS 将检查您帐户的限制并开始计算您的限制。那时你是一个经过身份验证的用户,来自一个经过身份验证的端点(你不能通过 SES 匿名发送 - 你可以在 SES 中接收电子邮件,但没有应用传入电子邮件限制,除了邮件大小)在这种情况下你可以看到节流一个特定的端口将完全没有意义。

唯一在端口 25 上具有默认限制的 AWS 服务是 EC2。

SES 限制您的消息的只有 次是在您超出允许的限制时。

这些限制永远无法取消,只能增加(尽管增加到相当疯狂的数字)

这些限制会随着时间的推移而增加,如果您勤奋地使用 SES 并处理被阻止/退回的邮件,您的数量将会增加。

所以,总结一下。

  • SES 限制端口 25、端口 465 或端口 587。
  • SES 将 根据您的配额限制邮件速率。
  • SES 速率限制完全独立于 TCP 端口号。

要清楚 SES 发送限制,您必须了解有两种类型的限制:最大发送速率发送配额

除这些限制外,端口 25 的发送速率默认 受到限制 - 但可以删除该限制。

最大发送速率

Amazon SES 每秒可以从您的账户接受的最大电子邮件数。

发送配额

您在 24 小时内可以发送的电子邮件的最大数量。所有新的 SES 帐户都在沙盒中设置,并且默认发送配额为每 24 小时 200 封电子邮件。您可以根据您的需要和实际使用模式请求提高此限制。

直接回答您的问题:

Why doesn't it throttle ports 465 and 587?

在端口 25 上强制执行默认速率限制,因为这是常用的发送端口。这会导致在该端口上发送大量垃圾邮件。为防止这种情况,AWS EC2 默认限制端口 25。端口 465 和 587 不太为人所知,也没有那么多垃圾邮件滥用。

Why doesn't everyone use these ports instead of 25 and avoid the throttling issue altogether?

他们 can/should 如果他们的软件允许使用这些端口。某些遗留应用程序只能使用端口 25。在这些情况下,您可以请求移除限制。

关于 SES 发送限制的总结:

  • 端口 TCP/465 和 TCP/587 未被限制
  • 默认情况下限制端口 25,但可以根据请求将其删除。
  • 您的 SES 帐户的每日发送配额限制始终适用
  • 您的 SES 帐户的每秒最大发送速率限制始终适用