有些电子邮件有一个标头,如“收到:来自[172.16.1.2](some.public.ip.address)”为什么? 为什么发件人的NAT后面的客户端显示私有地址?
因为这就是SMTP的devise方式,以及如何configuration发送电子邮件系统。
有办法来压制这个信息,但发送邮件系统需要明确地configuration来做到这一点。
Received: from [172.16.1.2] (some.public.ip.address)"
正如你在评论中提到的,这个特定位置的私有IP是因为它是作为HELO命令中的客户端主机名发送的。
对于正确的邮件服务器, HELO命令应该包含完全合格的主机名,这也应该与DNS匹配。 对于入站电子邮件,许多服务器实际上validationHELO主机名以确保它是有效的和DNS匹配。 对于发送电子邮件,服务器通常会接受任何事情,只要你被authentication(你不能指望最终用户都有在他们的机器上configuration的真实,有效的主机名)。
对于像Outlook一样的SMTP客户端,他们可以发送您的机器名称,但这不是完全合格的,可能并不理想,具体取决于机器的名称。 例如,您经常会看到类似以下的标题:
Received: from DESKTOP9U6J0BC (unknown)
使用IP地址可能会提供更多的隐私,因为有些人可能会认为在标题中看到172.1.2.3比MIKES-MACBOOK或CEO-WORKSTATION更好。
在一天结束的时候,客户端只需要在HELO命令中提供一些合理的东西,一些客户端selectIP地址。
这与其他答案所讨论的内容略有不同,这些答案与使用专用地址在组织内传输电子邮件的实际SMTP服务器相关。
不是邮件客户端添加了Received标头,而是SMTP邮件的path中的每个SMTP邮件服务器都是从发件人使用的第一个发送邮件服务器(邮件中继)到收件人邮箱的最终目的地。
如果第一个邮件服务器位于发件人的内部networking中,则可以(除非另外configuration)将发件人的内部IP地址logging在第一个“ Received标题中。
当一个SMTP客户端发送邮件到SMTP服务器时,它会从“helo”或“ehlo”命令开始。 该命令有一个发件人主机名字段。
为什么客户端将主机名发送到服务器? 因为SMTP被devise为运行许多传输协议,其中一些协议可能不会提供服务器识别客户端的方式。 当时的世界也更加信任,没人希望人们故意撒谎。
我们今天所知道的“个人电脑”在创buildSMTP时并不存在。 networking电子邮件开始成为互联大型多用户计算机上使用的本地电子邮件系统的一种方式。 这些大型多用户计算机将具有明确定义的主机名。
接收邮件服务器添加一个“Received:”标题来logging邮件的path。 通常,在现代邮件服务器上,它在标题的“主机名”字段中logging客户端报告的“主机名”以及服务器看到的实际IP地址和/或反向DNS主机名。
现在,我们现在使用桌面电子邮件客户端。 客户端必须使用某些东西作为主机名,因为协议要求它发送一个,但是一个桌面系统可能没有一个有意义的主机名。 有些客户端使用操作系统报告的主机名(可能会或可能不会在任何networking上具有任何意义的主机名),有些则使用其本地IP地址。