某天,一封自称来自自己公司域名的可疑邮件,发到了自己邮箱——首先请放心,没事。这多数情况下不是『被入侵』,而是『发件人被冒充』。本文从防御视角讲解如何分辨,以及如何止住(不涉及攻击的构造方法)。
先安心:冒充 ≠ 被入侵
这是最重要的误解点。邮件信封上的『发件人』,发送方可以任意填写。所以仅仅收到一封随手写着你域名的邮件,并不意味着家被人闯入了——这就是基本格局。
不过作为例外,邮件账户真的被入侵的情况也并非为零。而要区分这一点,读邮件头就能看出来。
用邮件头分辨是『入侵』还是『冒充』
邮件在正文背后附带着一份叫『邮件头』的投递记录(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 是『软』的设置
若 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)』『人不要落入陷阱去回复』这两道防线。在检测和设置之前,先放上用机制来止住的设计,这是本站的基本立场。
接着读
FAQ
Q收到自称来自自己域名的邮件=服务器被入侵了,是这个意思吗?
多数情况下不是。邮件的发送方式(SMTP),其机制就是允许发件人任意填写发件人(From)栏。这就和在信封背面随手写上别人的住址一样,哪怕完全没碰过你的服务器,也能发出『以你域名署名』的邮件。所以收到≠被入侵。到底是真被入侵了,还是单纯的冒充,读一读邮件头就能分辨。
Q为什么冒充邮件连垃圾邮件都不算,能直接进到收件箱?
因为接收方(Gmail 等)没有『拒绝假货的依据』。如果你的域名没有设置 DMARC 方针,接收方即便检测到 From 被冒充,也无法强制拒绝。再加上一旦牵涉转发,判定就会摇摆。对策是把 SPF、DKIM、DMARC 都配齐,并把 DMARC 分阶段提升到 p=reject(拒绝)。
Q该从哪里下手?
先检查自己域名的现状(用 SPF/DKIM/DMARC 检测器一下就能确认)。在此基础上,不要一上来就拒绝,DMARC 从 p=none(仅监控)开始,先用报告确认正规邮件不会被误杀,再分阶段提升到 p=quarantine→p=reject。在转发路径上守护正规邮件的救命绳是 DKIM 签名,所以要先把 DKIM 启用搞定。