一句话版本
电子邮件诞生时根本没有身份验证:任何人都能发一封"发件人:noreply@你的银行.com"的邮件。三个后来补上的 DNS 机制各管一件事:SPF 规定"哪些服务器可以替我发信",DKIM 给每封信盖一个数字签名,DMARC 规定"冒充我的信该怎么处理"并要求发件人域名对齐。 三者都配好、DMARC 策略收紧之后,冒充你域名的钓鱼邮件会被直接送进垃圾箱或拒收。再配合"防钓鱼码"和"邮件里不放可点击的操作链接",就能大大降低用户被假邮件骗的概率。
全文分三层:
- 通俗理解:为什么邮件那么容易冒充
- 实际用处:BEC 诈骗、2024 年 Gmail 和雅虎的新规、防钓鱼码
- 原理与工程要点:三条 DNS 记录逐条解读、"对齐"、从
p=none到reject
第一层:通俗理解
1.1 信封上的寄件人可以随便写
寄纸质信时,你可以在信封上写任何寄件人地址,邮局不会检查。早期的电子邮件协议(SMTP)也是这样:发件人地址只是一行可以随便填写的文字。
1.2 三道补丁
| 机制 | 比喻 | 回答的问题 |
|---|---|---|
| SPF | 公司公布"我们只用这几家快递寄信" | 这封信是从授权的服务器发出来的吗? |
| DKIM | 每封信上盖公司的钢印(数字签名) | 这封信真的是这个域名签发的?路上被改过吗? |
| DMARC | 公司告诉所有邮局:"不符合上面规则的冒牌信,请扔掉" | 验证失败怎么办?发件人地址和验证结果对得上吗? |
第二层:实际用处
- 商业邮件诈骗(BEC):冒充老板或供应商发邮件,要求财务"紧急付款到新账户"。美国 FBI 网络犯罪投诉中心的年度报告显示,BEC 每年造成的损失高达数十亿美元,长期位居各类网络犯罪损失的前列。
- Gmail 和雅虎的新规(2024 年 2 月):向它们大批量发信的域名必须配置 SPF、DKIM 和 DMARC,否则邮件会被拒收或进入垃圾箱。这让 DMARC 从"建议"变成了事实上的门槛。
- 防钓鱼码:很多交易所让用户自己设一个短语,所有官方邮件和页面上都会显示它。看不到这个短语的邮件,一律当作假的。这是 DMARC 之外的另一道人工防线,因为攻击者也可能用一个长得很像的域名(不受你的 DMARC 保护)发信。
- 邮件里不放可操作的链接:安全敏感的通知只写"请自己打开官网查看",从根本上切断"点邮件链接 → 进假网站"的路径。
Caloogy Wallet 也采用了 DMARC 和防钓鱼码。
第三层:原理与工程要点
3.1 SPF
在 DNS 里加一条 TXT 记录:
example.com. TXT "v=spf1 include:_spf.某发信服务.com -all"
收件服务器检查:这封信的信封发件人(Return-Path)所在域名,是否允许发信服务器的 IP 发信。-all 表示其他服务器一律不允许。
局限:SPF 只检查信封发件人,而用户在邮件客户端里看到的是信头的 From:,两者可以不同。所以单靠 SPF 挡不住冒充,需要 DMARC 的"对齐"。SPF 记录展开后最多只能有 10 次 DNS 查询,接入的发信服务太多会超限。
3.2 DKIM
发信服务器用私钥对邮件的关键信头和正文签名,签名放在 DKIM-Signature 头里:
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=sel1; h=from:to:subject:date; bh=...; b=...
收件服务器按 s=(选择器)和 d=(域名)去 DNS 查 sel1._domainkey.example.com 拿公钥验签。签名算法通常是 RSA(见《RSA与欧拉定理》),也支持 Ed25519。
DKIM 的好处是能经过转发:只要签过名的部分没被改,转发后仍能验证。
3.3 DMARC 与"对齐"
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; adkim=r; aspf=r; rua=mailto:[email protected]"
DMARC 的核心规则:SPF 或 DKIM 至少一项通过,并且通过的那一项所用的域名必须和用户看到的 From: 域名对齐(r 宽松对齐允许子域名,s 严格对齐要求完全相同)。
策略 p= |
收件方怎么处理冒牌信 |
|---|---|
none |
照常投递,只给你发报告(用于观察) |
quarantine |
放进垃圾箱 |
reject |
直接拒收 |
rua= 指定接收汇总报告的地址。各大邮箱每天会告诉你:"有哪些服务器以你的名义发了多少信,多少通过、多少失败。"
3.4 安全收紧的步骤
- 先列清楚所有以你域名发信的渠道(营销邮件、交易通知、客服系统、个人邮箱);
- 给每个渠道配好 SPF 和 DKIM;
- DMARC 先用
p=none收一段时间报告,确认合法邮件都能通过; - 改为
p=quarantine,再观察; - 最终改为
p=reject。
跳过第 1 步直接收紧,最常见的后果是自己的正常邮件(比如某个被遗忘的系统通知)全进了垃圾箱。
3.5 DMARC 管不到的地方
- 相似域名:
examp1e.com、example-support.com不是你的域名,你的 DMARC 管不着; - 显示名欺骗:
From: "Example 官方" <[email protected]>,很多手机邮箱只显示名字。
这些只能靠用户教育、防钓鱼码,以及"邮件里不放操作链接"来弥补。
总结
| 机制 | 一句话 |
|---|---|
| SPF | 谁可以替我发信 |
| DKIM | 每封信有我的签名 |
| DMARC | 冒牌信怎么处理,且发件人要对齐 |
| 收紧路线 | 盘点渠道 → none 观察 → quarantine → reject |
| 补充 | 防钓鱼码、邮件不放操作链接,对付相似域名 |