在搭建了自己的邮件服务器之后,经常收到 Gmail 和 Outlook 的 Report,类似:

Report domain: example.com Submitter: google.com Report-ID: 73941XXXXX

Report Domain: example.com Submitter: protection.outlook.com Report-ID: 200aa9XXXXXXXXXX

所以再整理一下 DMARC 报告。

在之前介绍 DMARC 的文章中介绍过其中 ruaruf 两个配置的作用,这两个配置分别用来配置邮箱地址,用来接收 DMARC aggregate report 和 DMARC Failure report。

DMARC aggregate report

默认情况下,邮件服务提供商,比如 Gmail,Outlook 等等,会每隔 24 小时发送一次 DMARC aggregate report 到 rua 指定的邮件地址。每一份报告中都写明了一段时间内 DMARC 的验证次数和合规问题。

DMARC 报告中提供了该域名下邮件发送整体情况的表现。如果有人伪装该域名进行钓鱼邮件的发送,那么也会在报告中有所体现。

如果你是一个邮件服务器的管理员,你马上就会被收件箱中的邮件无数的 DMARC report 邮件所淹没。根据邮件的不同使用情况,每一天都会收到成百上千的 reports。

在附件里面是两份从 Google 和 Outlook 收到的 report。可以看到格式是 XML 格式,其中包含了验证的次数,验证的结果等等信息。

对比

下面是 DMARC aggregate 报告和 DMARC failure 报告的对比:

  • aggregate 报告提供一组邮件的聚合数据,failure 报告提供单一邮件的详细信息;
  • 要接收 aggregate 报告,设置 rua 标签;要接收 failure 报告,设置 ruf 标签;
  • aggregate 报告不是实时的:在缺省的情况下,这些报告被每天发送;failure 报告则在 DMARC 验证失败的情况下几乎被立即发送;
  • aggregate 报告使用 XML 格式,failure 报告使用普通文本格式;
  • aggregate 报告不包含可用来辨认个人的信息 (personally identifiable information, PII),比如接收者邮件地址;failure 报告包含 PII;
  • 所有支持 DMARC 的邮箱服务提供商都支持 aggregate 报告,然而仅有一些邮箱服务提供商支持 failure 报告。

附录

Google 的报告:

<?xml version="1.0" encoding="UTF-8" ?>
<feedback>
  <report_metadata>
    <org_name>google.com</org_name>
    <email>noreply-dmarc-support@google.com</email>
    <extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
    <report_id>73941XXXX1096975</report_id>
    <date_range>
      <begin>1650499200</begin>
      <end>1650585599</end>
    </date_range>
  </report_metadata>
  <policy_published>
    <domain>example.com</domain>
    <adkim>s</adkim>
    <aspf>s</aspf>
    <p>reject</p>
    <sp>reject</sp>
    <pct>100</pct>
  </policy_published>
  <record>
    <row>
      <source_ip>200.15.100.100</source_ip>
      <count>1</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>example.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>example.com</domain>
        <result>pass</result>
        <selector>dkim</selector>
      </dkim>
      <spf>
        <domain>example.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>

Outlook 的报告:

<?xml version="1.0"?>
<feedback xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <version>1.0</version>
  <report_metadata>
    <org_name>Outlook.com</org_name>
    <email>dmarcreport@microsoft.com</email>
    <report_id>200aa9xxxxxxxxxxxx16af8b6a8bbaf5</report_id>
    <date_range>
      <begin>1650499200</begin>
      <end>1650585600</end>
    </date_range>
  </report_metadata>
  <policy_published>
    <domain>example.com</domain>
    <adkim>s</adkim>
    <aspf>s</aspf>
    <p>reject</p>
    <sp>reject</sp>
    <pct>100</pct>
    <fo>0</fo>
  </policy_published>
  <record>
    <row>
      <source_ip>200.10.106.108</source_ip>
      <count>1</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <envelope_to>outlook.com</envelope_to>
      <envelope_from>example.com</envelope_from>
      <header_from>example.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>example.com</domain>
        <selector>dkim</selector>
        <result>pass</result>
      </dkim>
      <spf>
        <domain>example.com</domain>
        <scope>mfrom</scope>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
</feedback>