DMARC 在子域名上面如何工作 (DMARC sp 标签)?
在本文中,我们来看一下一个比较少讨论到的问题:在子域名的情形下,DMARC 如何工作?
确切地,讨论以下问题:
- DMARC 策略发现如何工作?
- DMARC 策略继承如何工作? 应该使用 sp 标签来保护子域名吗?
在深入下面的 DMARC/子域名情形之前,我们先来介绍组织域名 (organizational domain)。
DMARC 中的组织域名是什么?
组织域名是一个域名的"根域名/顶层域名"。下面是几个域名与它们的组织域名:
域名 | 组织域名 |
---|---|
example.com | example.com |
sales.example.com | example.com |
mail.sales.example.com | example.com |
sales.example.co.us | example.co.us |
组织域名可以通过这个办法获得:将域名分段,然后将它跟包含顶层域名 (TLD) 的公共后缀列表 (PSL) 匹配,包括国家顶层域名,比如在美国的 ".co.us",在英国的 ".co.uk"。
这里是一个 Mozilla 基金会维护的 PSL。
DMARC 策略发现如何工作
当一封邮件抵达接收服务器时,服务器需要对该邮件应用 DMARC。要这样做的话,服务器要先尝试找到 DMARC 策略。该过程被称为 DMARC 策略发现。
DMARC 策略发现执行以下步骤来找到邮件的 DMARC 策略:
- 找到邮件的 RFC5322.From 域名;
- 查询 DNS,以寻找第 1 步中的 RFC5322.From 域名上面的 DMARC 记录;并根据结果:
- 如果只找到 1 个 DMARC 记录,那么返回该记录中的策略;
- 如果找到多个 DMARC 记录,策略发现过程终止,并且不对该邮件做 DMARC 处理;
- 如果没有找到 DMARC 记录,执行第 3 步;
- 查询 DNS,以寻找 RFC5322.From 域名的组织域名上面的 DMARC 记录,如果这两个域名并不相同的话;并根据结果:
- 如果只找到 1 个 DMARC 记录,那么返回该记录中的策略;
- 如果没有找到 DMARC 记录,或者找到多条 DMARC 记录,策略发现过程终止,并且不对该邮件做 DMARC 处理;
- 如果找到的策略中并不包含合法的 p 标签:
- 如果有 1 个 rua 标签,并且其包含至少 1 个合法的报告 URI,邮件服务器将 p=none 应用到邮件上面;
- 否则,策略发现过程终止,并且不对该邮件做 DMARC 处理;
每个 DMARC 策略发现过程顶多发起 2 次 DNS 查询。一次是 RFC5322.From 域名,另外一次是组织域名(如果和 RFC5322.From 域名不同的话)。
如果有多层子域名的话,该过程不会对中间层的子域名发起 DNS 查询。原因是为了减轻 DNS 的负担。
例如,如果 RFC5322.From 域名是 it.sales.example.com,只会对 it.sales.example.com 执行 1 次 DNS 查询,可能还对 example.com 执行 1 次 DNS 查询。不会对 sales.example.com 执行 DNS 查询,因为这是一个中间子域名。
DMARC 策略继承如何工作
DMARC 策略继承机制允许域名管理者在子域名上面灵活地设置 DMARC 策略。
DMARC 策略继承规则如下所述。
情形:子域名继承组织域名上面的 DMARC 策略
如果组织域名上面有 DMARC 记录,并且该记录中有 1 个策略 (p 标签),但是没有子域名策略 (sp 标签);子域名上面没有发布 DMARC 记录,该子域名继承组织域名上面的 p 策略。
比如,如果在 example.com 上面发布了一个 DMARC 记录如下:
example.com "v=DMARC1; p=reject;"
既然 example.com 的策略为 reject,任何没有发布 DMARC 记录的 example.com 的子域名都会继承 reject 策略。
情形:子域名继承组织域名的 sp 策略
如果组织域名发布了一个 DMARC 记录,该记录包含了一个策略 (p 标签) 和一个子域名策略 (sp 标签),而子域名没有发布 DMARC 记录,该子域名会继承组织域名的子域名策略。
例如,如果 example.com 上面发布了一个 DMARC 记录如下:
example.com "v=DMARC1; p=reject; sp=quarantine;"
既然 example.com 的 sp 策略被显式地设置成 quarantine,任何没有发布 DMARC 记录的 example.com 的子域名将会继承 quarantine 策略。
情形:子域名覆盖组织域名的策略
如果组织域名发布了一个 DMARC 记录,该记录包含了一个策略 (p 标签) 和一个子域名策略 (sp 标签),而子域名有自己的策略 (sp 标签),子域名会用自己的策略覆盖组织域名的子域名策略。
例如,如果 example.com 上面发布了一个 DMARC 记录如下:
example.com "v=DMARC1; p=reject; sp=reject;"
sales.example.com 上面发布了这样一个 DMARC 记录:
sales.example.com "v=DMARC1; p=quarantine;"
在这个情况下,sales.example.com 的策略将会覆盖 example.com 的策略。因此 p=quarantine 会应用到 sales.example.com。
情形:子域名上面发布了子域名策略
当子域名上面发布了一个包含了 sp 标签的 DMARC 记录,由于 DMARC 策略发现过程的作用,该 sp 标签会被忽略。
比如,如果在子域名上面有一个 DMARC 记录:
sales.example.com "v=DMARC1; p=reject; sp=quarantine;"
该 sp 标签不会在 sales.example.com 或者其任何子域名上面产生效果。
DMARC 与子域名的最佳实践
在组织域名上面实现了 p=reject 以后,您应该使用 p=reject 保护您的子域名。这是因为哪怕子域名上面的 DMARC 策略是 p=none 或者 p=quarantine,攻击者仍然能够使用您的子域名投递邮件。
通过把组织域名上面的策略设置成 p=reject,并且不要在子域名上面覆盖它,您可以轻松做到这一点。这样,所有该组织域名下面的子域名都会有 p=reject,攻击者将无法使用您的子域名投递邮件!
相关文章:
- SPF 在子域名上面的工作方式和 DMARC 不同:SPF 不会使用组织域名上面的 SPF 记录。请参照 SPF 在子域名上面如何工作
- DKIM 在子域名上面如何工作
Protect Business Email & Improve Email Deliverability
Get a 14 day trial. No credit card required.
Create Account