某天,一封自称来自自己公司域名的可疑邮件,发到了自己邮箱——首先请放心,没事。这多数情况下不是『被入侵』,而是『发件人被冒充』。本文从防御视角讲解如何分辨,以及如何止住(不涉及攻击的构造方法)。
先安心:冒充 ≠ 被入侵
这是最重要的误解点。邮件信封上的『发件人』,发送方可以任意填写。所以仅仅收到一封随手写着你域名的邮件,并不意味着家被人闯入了——这就是基本格局。
不过作为例外,邮件账户真的被入侵的情况也并非为零。而要区分这一点,读邮件头就能看出来。
用邮件头分辨是『入侵』还是『冒充』
邮件在正文背后附带着一份叫『邮件头』的投递记录(Gmail 里可用『显示原始邮件』来读)。要看的要害有这 5 处。
| 邮件头 | 看哪里 | 这样读 |
|---|---|---|
| Authentication-Results | spf= / dkim= / dmarc= 的结果 | 若 dmarc=fail,就是『正规认证没通过=很可能是冒充』 |
| Received(会接连出现多条) | 最底下=最初的发信源 | 若是从你自己签约的服务器以外发出,就是『来自外部的冒充』 |
| Return-Path(信封上的发件人) | 是否与可见的 From 一致 | 不一致=冒充的信号 |
| Reply-To(回复地址) | 回复会飞到哪里 | From 看着像公司内部,回复地址却是无关的外部 → 为了让你回复给发件人 |
| X-Mailer(发送软件名) | 是不是正经名字 | 莫名其妙的随机字符串=自动垃圾邮件工具的典型特征 |
尤其容易被忽略的是 Reply-To。From 哪怕长得和公司同事一模一样,一回复却会发到完全不同的外部地址——对方会诱导你把机密或联系方式(聊天的二维码等)回复过去,借此劫持联络渠道。不要只凭 From 的外观就信任,这是人这一侧最大的防御(→ 什么是钓鱼)。
为什么它能进到收件箱
冒充邮件连垃圾邮件都不算就进来了,是因为接收方没有『拒绝假货的依据』。
没有 DMARC 的方针
如果你的域名没有设置 DMARC 策略,接收方即便检测到 From 被冒充也无法强制拒绝。这是它能进到收件箱的最大主因。
SPF 设置为不拒绝(~all)
若 SPF 末尾是 ~all(软失败=『可疑但不拒绝』),接收方就缺少拒绝它的明确依据。
转发会破坏 SPF
把收到的邮件转发到别的地址时,SPF 会以转发源服务器为基准看起来是『pass』,但 From 仍是别的域名。对这种不一致做出最终判定的,正是 DMARC。
这里起作用的是 DKIM。SPF 会被转发破坏,但 DKIM 签名在转发后仍然有效。提升到拒绝(reject)后,防止正规邮件被误拒的正是 DKIM,这就是要先配置 DKIM 的理由。
修复办法:SPF → DKIM → DMARC 分阶段
机制的细节交给 什么是 SPF / DKIM / DMARC,这里只讲安全的顺序。最重要的一点是:不要一上来就拒绝。
把 SPF 只配一条且配对
启用 DKIM 签名(最先做)
DMARC 从 p=none(仅监控)开始
p=none +接收报告,观察 1~2 周,看正规邮件会不会被拒绝。分阶段提升到 reject
p=quarantine → p=reject。最终达成『冒充在接收方就被拒绝』,这时这种邮件才会在到达对方收件箱之前就被拒绝。缺少的设置因域名而异
逐个检查多个域名,会发现缺少的设置往往恰好相反。原因在于发送的机制不同,服务自动帮你配置的范围也就不同。
邮件投递服务型
- 例:交易邮件从外部的投递服务发出的架构
- DKIM / DMARC 在初始设置里就自动容易配上
- 而唯独 SPF 需要自己在 DNS 里追加 → 那一处容易漏
主机托管标准型
- 例:从租用服务器直接发送的架构
- SPF 大多一开始就有
- 而DKIM 要手动打开、DMARC 要自己发布 → 这两个容易漏
两者在『三个没配齐』这点上是一样的,只是缺少的部分正好相反。先搞清楚自己域名属于哪一种模式,这是第一步。
本站的视角:只设置还不够,检查过才会生效
本站认为,邮件认证并非『设置完就完事』,而是检查过才会生效。自己的域名可以用 SPF / DKIM / DMARC 检测器 或 网站综合安全诊断 一次确认现状。
单单一个设置值也需要注意。比如没有配置失败报告的发送地址(ruf),却加了 fo,这样做没有任何效果,按规范它只会被忽略。这种经审查才发现的『无害但无意义的设置』并不少见。
最重要的是两点:让接收方拒绝冒充邮件(DMARC),以及人不去回复伪造的邮件。在检测和设置之前,先放上用机制来阻止的设计。