曾经 @orzFly 跟我发过一封邮件,想假装是美国政府给我发邮件。具体的方式呢,自然就是把发件人变成美国政府的邮箱地址(@whitehouse.gov)。虽然他当时用了比较 naive 的方法,失败了,但你有想过这个问题吗?
比如,有人假装是 @apple.com 发了封邮件给你,你看到发件人的域名就信了,点了进去,结果 Apple ID 的密码就被偷了。
除了一点众览群骗的经验之外,我们怎么验证这个发件人是真实的呢?
(1) 一点假设
首先,我们要假设这个发件人的帐号不是被盗用了。
也就是说,如果猜到了那个邮箱的密码,自然无论发什么邮件,都会是名义上的“真邮件”。
是,Email 协议是开放的,任何人都可以自己开自己的邮件服务器。更多的假邮件,其实是通过伪造发件人的形式发出的。伪造的嘛,作为被伪造的一方,自然是无能为力了。
(2) 于是他们想了些方法 - SPF
你看,假如 ebay.com 的邮件如果经常被伪造,顾客被骗了钱才不管骗子什么的,让 eBay 背锅很自然。这样,被伪造邮件的公司自然很不爽。
随着这种情况越来越多,也有人想出了一些方法,来验证邮件的“真实性”。
SPF 记录是其中一种方法。这要从邮件是怎么发给另一方说起。
所有的域名,都是用 DNS 记录来定义各种属性的,管理者可以自己修改。比如,访问网站的时候该连到哪个 IP,用的就是 DNS 里的 A 或者 AAAA 记录,一查就知道了。
同样,一封邮件该发到具体哪台服务器的 IP 呢?答案是查 DNS 的 MX 记录。
收邮件的服务器是一定要确定下来的,否则就根本收不到邮件。但是因为邮件的特性,随便哪个服务器都可以代表这个域名发邮件出去,所以,不用在 DNS 中指定。
如果我们事先说好哪些服务器会发邮件,那些伪造邮件的服务器不在名单里,就“没法”发邮件出来咯。这不就好了。
DNS 可以定义其他的记录,比如 TXT 记录,就是那种“爱写啥写啥,一般没人看”的存在。所以 SPF 记录,实际上是一条 TXT 记录,内容则是可以发邮件的服务器的 IP 地址等。
(3) SPF 是怎么工作的
SPF 只是一条记录,看不看全看收到邮件的服务器的心情。
如果它看的话,步骤大概这样:
- 收到一封邮件,记录下把邮件发给它的服务器的 IP;
- 提取出发件人邮箱地址;
- 查询发件人的邮箱域名上的 SPF 记录,和另一个 DMARC 记录;
- 把发件服务器的 IP 与 SPF 记录做个比较;
- 如果 SPF 记录不允许第一步中的 IP 发邮件,嗯,服务器就知道了。
上面提到的 DMARC 记录,用来定义收件服务器,对于可能的“假邮件”该怎么处理。像 PayPal,设置的是“直接退信”,这样子伪造的邮件就没法进到收件箱里去了。
(4) 一些总结
说起来,这其实只是防止诈骗邮件的一小步吧。每一个环节稍不留心,被骗的机率还是很高。
毕竟,只有国内外的一些主流邮箱会校验 SPF 记录,毕竟这个校验功能是需要人写代码的,一些小邮箱也“没这个本事”。有些人则认为,这个技术没什么卵用,用户又不会盯着发件人域名看,用一个 app1e.cn 发邮件,人家都照样都以为是苹果,防不胜防。
但是吧,它的确能够有效解决猖獗的“伪造邮件”问题。自从我自己那个很不知名的域名设置了 SPF 记录,Gmail / 网易每天会给我发自动报告,伪造我域名的假邮件每天能有个好几封。如果算上那些不看 SPF 的邮箱,这个数一定会更多,我也是有点心惊胆战呢。
同步阅读:DKIM 和 DMARC 协议。
这是很好的“下期预告”。刚准备发。