分析一封钓鱼邮件:从邮件到背后的基础设施
钓鱼邮件看起来像一封匿名信。可它其实到处留下线索:信封上的邮戳、一个回复地址、一个指向某个网站的链接,而这个网站总得托管在某个地方。只要方法得当,我们就能顺着这些线索,找到那些把机器租给诈骗者的公司,而它们往往并不知情。能把一切关掉的,恰恰就是它们。下面就一步步来调查:读懂邮件头,顺着线索找到基础设施,最后决定该向谁举报什么。
拿到完整的邮件头:邮件的“信封”
邮件软件显示的内容(发件人、主题、正文)只是信纸本身。在它外面,还有一个看不见的信封:邮件头,也就是一路上被添加的几十行技术信息。线索就藏在这里。查看方法:
- Gmail:点邮件的 ⋮ 菜单,再点“显示原始邮件”;
- Outlook:点邮件的 … 菜单,再选择查看邮件详细信息或源代码的选项;
- Apple Mail:“显示”菜单,然后“邮件”,再选择显示所有邮件头;
- Thunderbird:快捷键 Ctrl+U(Mac 上为 Cmd+U),打开邮件源代码。
小提示:不要为了分析而“转发”邮件。转发会生成一封新邮件和新的邮件头,原来的线索就消失了。应该复制完整的源代码,或者把邮件另存为 .eml 文件。
Received 行:邮局盖的邮戳
在所有这些行里,最有价值的是以 Received: 开头的那些。每台经手这封邮件的服务器都会加上自己的一行,而且放在最上面,就像邮件每经过一个邮局,就被盖上一个新邮戳。一封邮件的完整旅程,可以看这篇指南:一封电子邮件如何从发件人到达收件人。
下面是一个简化的邮件头,和真实钓鱼邮件里看到的差不多:
Received: from mx1.provider.example (mx1.provider.example [192.0.2.10])
by mailbox.provider.example; Tue, 15 Sep 2026 09:14:05 +0200
Received: from vps-4411.host.example (vps-4411.host.example [203.0.113.45])
by mx1.provider.example with ESMTPS; Tue, 15 Sep 2026 09:14:03 +0200
Received: from mail.mybank.example (unknown [10.0.0.7])
by vps-4411.host.example; Tue, 15 Sep 2026 07:13:58 +0000
Authentication-Results: mx1.provider.example;
spf=pass smtp.mailfrom=parcel-mail.example; dkim=none;
dmarc=fail header.from=mybank.example
Return-Path: <bounce@parcel-mail.example>
From: "我的银行" <security@mybank.example>
Reply-To: mybank.support@freemail.example
Subject: 您的账户将在 24 小时内被冻结
每一行 Received 都可以当成一句短话来读:“从(from)某台机器,由(by)某台服务器,在某个时间收到”。紧跟在 from 后面的,是对方机器自报的名字,没有经过任何验证。括号里的,才是接收服务器亲眼看到的:对面那台机器的 IP 地址,写在方括号里。
从下往上读经过……但从上往下判断可信度
因为每台服务器都把自己的行加在前面几行之上,所以故事要从下往上读:最下面一行讲出发,最上面一行讲到达我们的邮箱。在例子里,邮件从一台自称“mail.mybank.example”的机器出发,经过 vps-4411.host.example,然后进入我们的邮箱服务。
但并不是每一行都同样可信。每一行总是由负责接收的那台服务器写的。所以最上面的几行是我们自己的邮箱服务写的:可以相信。下面的几行是在邮件到达我们之前写的,可能就是诈骗者的机器写的,它想写什么都行。就像寄包裹:我们这边邮局盖的邮戳可靠,而寄出前贴上的标签什么也证明不了。
所以方法很简单:从最上面开始,只要是我们邮箱服务写的行,就一直往下看。停在入口行,也就是我们的邮箱从外部机器接收邮件的那一行。这一行方括号里的 IP,这里是 203.0.113.45,是整个邮件头里最可靠的线索:它就是真正把邮件交过来的那台机器。Baitback 要找的正是它。
那最下面一行呢?它声称邮件来自“mail.mybank.example”,地址是 10.0.0.7,这是一个在互联网上根本不存在的私有地址。这一行是 vps-4411 自己写的:一条故意留下的假线索。
哪些可信,哪些可以伪造
| 邮件头中的内容 | 由谁写入 | 可信度 |
|---|---|---|
From(显示的名字和地址) | 发件人 | 无 |
Reply-To(回复地址) | 发件人 | 无……但它常常是一个真实邮箱,由诈骗者查看 |
Subject、Date、Message-ID | 发件人 | 低 |
紧跟在 from 后面自报的名字 | 对面的机器 | 无 |
入口行以下的 Received 行 | 之前的服务器,可能是诈骗者 | 低 |
| 入口行方括号里的 IP | 我们的邮箱服务 | 高 |
Authentication-Results | 我们的邮箱服务 | 高(仅限它检查的内容) |
在例子里,Authentication-Results 透露了很多信息。spf=pass 表示这台服务器确实有权发信……但那是替 parcel-mail.example 这个信封域名发,而不是替银行发。dmarc=fail 表示显示出来的地址 mybank.example 没有通过任何验证:“发件人”是假的。那这封邮件为什么还是到了?这正是这篇指南的主题:即使检查显示“通过”,邮件也可能在说谎。
从 IP 到运营商:这个地址属于谁?
IP 地址就是互联网上一台机器的门牌地址。和现实中的地址一样,它们是一大块一大块分配的。负责分配的有五个地区性注册机构:RIPE NCC(欧洲和中东)、ARIN(北美)、APNIC(亚太)、LACNIC(拉丁美洲)和 AFRINIC(非洲)。它们把地址块交给运营商,运营商再租给自己的客户。
这些地址块被组织成一个个网络,每个网络都有一个编号:ASN,例如 AS64500。如果说 IP 是房子的门牌,ASN 就是所在的街区,它指明管理这个街区、负责让流量在其中流通的运营商。
要知道一个 IP 背后是谁,可以用 WHOIS 查询这些注册机构的目录,或者用它的现代版本 RDAP。很多免费网站点一下就能查。在命令行里,大致是这样(简化摘录):
$ whois 203.0.113.45
inetnum: 203.0.113.0 - 203.0.113.255
netname: HOST-EXAMPLE-VPS
org-name: Host Example SAS
country: FR
abuse-mailbox: abuse@host.example
origin: AS64500
有三条信息最重要:是谁(组织名称)、在哪里(国家,有助于判断适用哪国法律),以及最关键的滥用举报地址(abuse),也就是接收滥用举报的官方邮箱。IP 的反向解析名称,这里是 vps-4411.host.example,也常常多给一条线索:“vps”说明这是一台租来的虚拟服务器。
一个常见的陷阱:网络运营商并不一定就是最终的托管商。大运营商可能把一个地址块租给转售商,转售商再把服务器租给自己的客户。这时 WHOIS 会显示一个挂在转售商名下的小地址块,带有它自己的 abuse 地址。应该先联系它:它离那台机器最近。
追踪其他线索:发件人、链接、DNS
发送 IP 只是其中一条线。钓鱼邮件还会留下别的线索,每一条都通向不同的角色。
发件人这条线
看看 From、Return-Path 和 Reply-To 里出现的域名:
- 如果是免费邮箱(比如 Gmail 或 Outlook.com):对应的角色是邮箱服务商,它可以关闭账户。这对
Reply-To特别有用,因为受害者的回信都会落进这个邮箱; - 如果是专门注册的域名:要找它的注册商,也就是卖出这个域名的公司,方法是对域名做 RDAP 或 WHOIS 查询,例如在 lookup.icann.org 上。那里还能看到注册日期:一个三天前才出生的“银行”域名,是非常危险的信号;
- 如果是某个品牌被冒用的真实域名:品牌本身并无责任,邮件不是它发的。如果它提供钓鱼举报地址,可以通知它。
链接这条线
邮件里的链接通向陷阱页面,而这个页面一定托管在某处。不要点击:复制地址(右键,“复制链接”)。真正要看的是域名,也就是 https:// 之后第一个“/”的正前方那一段;它左边的一切都可以由诈骗者随意编造。链接常常会经过好几次跳转:Baitback 会替我们一路跟下去,并显示完整的跳转链。藏在图片里的链接,请看这篇指南:二维码钓鱼:当网络钓鱼藏在二维码背后。
DNS 这条线
DNS 是互联网的“电话簿”,它告诉我们一个域名的各个部分分别在哪里。问三个问题就够了:
$ dig +short A secure-login.example # 网站的 IP(有时是 CDN)
$ dig +short MX secure-login.example # 接收它邮件的服务器
$ dig +short NS secure-login.example # 谁在管理它的 DNS
网站的 IP 接下来走和发送 IP 一样的流程:WHOIS、ASN、运营商、abuse 地址。而一个完全没有邮件服务器、却声称在给我们写信的域名,也值得多看一眼:参见 DNS 中的 MX 记录:可信的标志吗?
为什么总会牵出好几家服务商
调查到最后,很少只剩下一个名字。这很正常:一次钓鱼行动就像一次全靠租来的东西完成的搬家。域名在一家注册商买,DNS 由另一家管理,页面放在别处租来的服务器上、还藏在 CDN 后面,邮件从第三台服务器发出(参见 网络钓鱼:诈骗者如何让邮件成功送达),而回信落进一个免费邮箱。
诈骗者把一切分散开,自有道理:每项服务都很便宜,常常用偷来的支付方式付款;一家服务商断了,其他的照样运转;网站前面的 CDN 还能隐藏真实服务器的地址。好消息是:每一家服务商同时也是一个抓手。通知到的越多,这次行动就垮得越快。
IP 不等于罪犯
一个常见的冲动:找到 IP,看到某家公司或某个国家的名字,就断定“就是他们干的”。这几乎总是错的。IP 指向的是最后把邮件交出来的那台机器,而不是坐在键盘前的那个人。这台机器可能是:
- 诈骗者租来用几天的服务器,这是最简单的情况;
- 某个大型邮箱服务商的服务器,如果诈骗者在那里注册或盗用了账户:这时 IP 属于服务商,它并无过错,但可以关闭账户;
- 一个被入侵的网站或电脑,它的主人本身也是受害者;
- 一个 VPN 或中转节点,掩盖了真实的连接。
所以正确的问题不是“谁有罪?”,而是“谁能管得了这台机器?”。我们要写信的,就是这个角色。永远不要联系诈骗者,不要“反击”,也不要公开指责一家服务器可能只是被劫持了的公司。
域名还是服务器:招牌和大楼
想弄清谁负责什么,打个比方会很有帮助。想象街上有一家冒牌的银行营业厅:
- 域名是门上方的招牌,注册商是把这个名字租出去的机构:它可以把招牌摘下来;
- 服务器是冒牌营业厅所在的大楼,托管商是大楼的房东:它可以把租户赶出去;
- IP 地址是门牌上写的地址;
- CDN 是设在入口前的前台:访客只和前台打交道,前台再把请求转进大楼。从街上看,你只看得到它。
关停服务器能让页面消失,但诈骗者几分钟内就能把域名指向另一台服务器。反过来,暂停域名会让所有已经发出去的链接全部失效,哪怕服务器还在运行。两者相辅相成。
CDN 的情况
如果网站 IP 的 WHOIS 显示的是 Cloudflare、Akamai 或 Fastly 这类名字,那它几乎从来不是托管商,而是前台。CDN 接受举报,可以向访客显示警告页面,并把投诉转给真正的托管商,因为它知道对方的地址。比如 Cloudflare 就在 abuse.cloudflare.com 提供专门的举报表单。同时也要向域名的注册商举报,CDN 可遮不住它。
服务器被入侵的情况
类似 https://wang-bakery.example/wp-content/uploads/x/login.php 这样的地址,常常暴露出一个被黑的网站。这个域名已经存在多年,属于一家真实的店铺;陷阱页面只是被偷偷塞进了某个角落。这时要求暂停域名既不公平也没用:应该通知托管商,如果能找到网站主人的联系方式也通知他,并给出页面的确切地址。从一个被盗的真实邮箱发出的邮件也是同样道理:通知邮箱服务商,它可以冻结账户,再把账户还给真正的主人。
不同情况该联系谁
| 我们发现了什么 | 向谁举报 | 对方能做什么 |
|---|---|---|
| 发送 IP 属于某个托管商(租用的服务器) | 托管商的 abuse 地址(IP 的 WHOIS) | 关停发信服务器 |
| 邮件来自知名邮箱服务 | 该邮箱服务商 | 关闭或冻结账户 |
Reply-To 是免费邮箱 | 这个邮箱的服务商 | 关闭接收回信的邮箱 |
| 专为诈骗注册的域名 | 注册商(域名的 RDAP 或 WHOIS) | 暂停域名 |
| 藏在 CDN 后面的网站 | CDN,然后是注册商 | 提醒访客,转交托管商 |
| 被入侵的正规网站 | 网站的托管商和网站主人 | 下架页面,修复网站 |
| 短链接 | 短链接服务 | 停用该链接 |
| 任何钓鱼页面 | Google Safe Browsing、Microsoft、Netcraft…… | 在浏览器中拦截该页面 |
此外还有官方平台。例如在法国,可以把邮件转给 Signal Spam,并在 PHAROS 举报诈骗;每个国家都有自己的对应渠道。这些平台主要用于统计和调查:它们不会在一小时内关掉服务器,但会留下正式的记录。
建立自己的举报链
一股脑儿向所有人举报所有东西,效果往往不好。最好按顺序来,从最紧急的到最长远的:
- 先止损:陷阱页面(托管商或 CDN)以及浏览器的拦截名单。每一小时都很关键:一次行动的大部分受害者,都出现在最初几个小时。
- 切断名字:域名的注册商,让已经发出的链接统统失效。
- 切断发送:发送 IP 的托管商,以及
Reply-To邮箱的服务商。 - 留下记录:官方平台,供调查使用。
一份好的举报简短而且可以核实。它包括:
- 邮件的完整邮件头,而不只是一张截图;
- 与这位收件人相关的具体内容:给托管商的是 IP,给注册商的是域名,给网站托管商的是页面的确切地址;
- 日期和时间,并注明时区;
- 经过“去活化”处理的链接,例如写成
hxxps://secure-login[.]example,免得有人误点。
这正是 Baitback 所做的工作:粘贴邮件源代码,工具就会读取 Received 行,找到发信服务器、它的托管商和举报地址,检查 SPF、DKIM 和 DMARC,跟踪链接及其跳转,然后生成可以直接发送的举报邮件。本指南里的整套调查,几秒钟就能完成。
- 完整的邮件头可以通过“显示原始邮件”或邮件源代码获得;不要转发邮件。
Received行从下往上讲述邮件的经过,但只能相信我们自己的邮箱服务写的那些行。- 最可靠的 IP 在入口行,也就是我们的邮箱从外部接收邮件的那一行。
- IP → WHOIS → 运营商和 abuse 地址;域名 → 注册商;DNS → 网站的服务器。
- IP 指向的是一台机器,而不是罪犯:要写信给能采取行动的人。
- 注册商切断名字,托管商切断机器,CDN 负责转交:针对各自负责的部分分别通知它们。