电子邮件路由如何工作?

0 dns email routing smtp

我想了解电子邮件路由的工作原理。假设我正在尝试向某人@gmail.com 发送消息。根据我目前的理解,会发生以下步骤:

  1. gmail.com 上的 DNS MX 查询。
  2. 选择具有最高优先级(最低数字)值的邮件交换服务器。
  3. 通过端口 25 (smtp) 将邮件发送到 Exchange 服务器。

但是当我对端口25进行端口扫描(使用nmap)时,我发现端口25对于域gmail.com(gmail-smtp-in.l.google.com)的邮件交换服务器是关闭的。大多数电子邮件域都是这种情况。请帮助理解电子邮件路由的流程。

Sha*_*dur 5

您缺少的是,这nmap并不是开放端口的最终检查器。

其一,仅仅为了查看某个端口是否打开而进行全面的端口扫描是一个糟糕的主意。telnet工作得很好:

shadur@huginn:~$ telnet gmail-smtp-in.l.google.com.  25 
Trying 2a00:1450:4013:c01::1b...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)

马克在对你的问题的评论中做出了一个非常好的可能解释;另一种可能性是,谷歌的邮件服务器几乎肯定会受到机会主义者近乎持续的低级攻击,它会注意到端口扫描尝试,并在您到达端口 22 之前立即在接下来的五分钟内阻止您的 IP 地址,更不用说25了。

也就是说,完整的流程图有点大:

  1. 您可以在邮件客户端中撰写消息,无论它是什么(称为邮件用户代理或 MUA)。
  2. MUA 查阅其设置和“收件人:”字段以了解应如何处理此问题,然后调用相应的外发邮件服务器(MTA - 邮件传输代理),其配置告诉它已被分配处理此问题的任务。在 UNIX 系统上,这通常是localhost;Windows 系统倾向于配置其 ISP 的外发邮件服务器。
  3. 从 MUA 接收消息的 MTA 检查其配置并将其与消息的源、目标(以及可选的正文)进行匹配,以决定应如何处理该消息。根据上述情况,这可能会有所不同,从完全拒绝它到扫描它是否有病毒/垃圾邮件/等或继续发送。
  4. 如果 MTA 确定应接受邮件,但收件人的域不在其要本地处理的域列表中,它将尝试中继到收件人域的 MX 或配置的所谓“智能主机” ”。(#3 中提到的大多数 UNIX 系统都将其 localhost smtp 服务器配置为使用其 ISP 的邮件服务器来发送邮件)。然后,“智能主机”将在第 3 步中选择此信息。
  5. 一旦链接中的 MTA 决定将其直接发送给收件人,它将首先尝试将其发送给主 MX。如果该 MX 没有响应,它将按优先级降序尝试其余 MX 服务器,直到它收到其中一个 MX 服务器的明确接受或拒绝响应,或者直到它用完可尝试的 MX 记录(以先到者为准)。
  6. 一旦收件人域的 MX 记录中的 MTA 收到邮件,它同样会查询配置并将其与邮件标头和内容进行匹配,以确定如何处理它,其选项与 #3 中提到的选项相同,但使用添加了通过配置的邮件传送代理 (MDA)“传送给最终用户”的选项。
  7. 当 MDA 收到消息时,它也会参考其配置来决定如何处理消息以及应将消息放入哪个邮箱(如果有)。