我想了解电子邮件路由的工作原理。假设我试图向某人@gmail.com发送一条消息。根据我目前的理解,将发生以下步骤:
- gmail.com 上的 DNS MX 查询。
- 选择优先级最高(数字最低)的邮件交换服务器。
- 将邮件发送到端口 25 (smtp) 上的 Exchange 服务器。
但是当我对端口 25 进行端口扫描(使用 nmap)时,我发现 gmail.com 域(gmail-smtp-in.l.google.com)的邮件交换服务器的端口 25 已关闭。大多数电子邮件域都是这种情况。请帮助了解电子邮件路由的流程。
答案1
您所忽略的是,它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 '^]'.
马克在对你的问题的评论中给出了一个非常好的解释;另一种可能性是,谷歌的邮件服务器几乎肯定正受到机会主义者近乎持续不断的低级攻击,它会注意到端口扫描尝试,并在接下来的五分钟内立即阻止你的 IP 地址,然后你才能到达端口 22,更不用说 25 了。
也就是说,完整的流程图稍微大一些:
- 您可以在邮件客户端中撰写消息,无论它是什么(称为邮件用户代理或 MUA)。
- MUA 查阅其设置和收件人:字段以了解应如何处理此问题,然后调用其配置指示其负责处理此问题的相应外发邮件服务器(MTA - 邮件传输代理)。在 unix 系统上,这通常是
localhost
; windows 系统倾向于配置其 ISP 的外发邮件服务器。 - 从 MUA 接收邮件的 MTA 将检查其配置,并将其与邮件的来源、目的地(以及可选的正文)进行匹配,以决定如何处理它。根据上述情况,处理方式可能包括直接拒绝、扫描病毒/垃圾邮件/等或继续发送。
- 如果 MTA 确定应该接受该邮件,但收件人的域不在其本地处理的域列表中,它将尝试中继邮件,要么发送到收件人域的 MX,要么发送到配置的所谓“智能主机”。(第 3 点中提到的大多数 unix 系统都将其本地主机 smtp 服务器配置为使用其 ISP 的邮件服务器发送邮件)。然后,“智能主机”将在步骤 3 中接收该邮件。
- 一旦链接中的 MTA 决定将其直接发送给收件人,它将首先尝试将其发送到主 MX。如果该 MX 没有响应,它将按优先级降序尝试其余 MX 服务器,直到它从其中一个服务器获得明确的接受或拒绝响应,或者直到它用尽了 MX 记录(以先到者为准)。
- 一旦收件人域的 MX 记录中的 MTA 收到邮件,它同样会咨询它是配置并将其与邮件头和内容进行匹配以确定如何处理它,使用与#3 下提到的相同的选项,但增加了通过配置的邮件传递代理 (MDA)“传递给最终用户”的选项。
- 当 MDA 收到消息时,它也会查阅其配置来决定如何处理该消息以及应该将消息放入哪个邮箱(如果有)。