Description
Every domain the organization owns publishes a DMARC TXT record at _dmarc.<domain> with:
p={{ dmarc_policy }}for domains that send mail, andp=rejectfor domains that never send mail (parked domains);- no
pcttag, orpct=100; - a subdomain policy (
sp) that is absent or not weaker thanp; - aggregate reports (
rua) sent to {{ dmarc_report_address }}.
SPF (CB-M365-MAIL-014) and DKIM (CB-M365-MAIL-015) must pass and align for legitimate senders before the policy is enforced.
Rationale
DMARC is the only standard that protects the From address users actually see. With p=none,
receivers only report forgeries; with quarantine or reject they stop them, which protects
employees, customers and partners from phishing that uses the organization's name. Reports show
forgery attempts and forgotten legitimate senders.
Impact
Legitimate senders that fail SPF and DKIM alignment (a forgotten marketing tool, a partner that
sends on the organization's behalf) see their messages quarantined or rejected. Start with
p=none, read the reports for a few weeks, fix the senders, then move to quarantine and
reject. A third-party DMARC report service makes the reports usable.
Parameters
| Parameter | Baseline | Hardened | Bounds |
|---|---|---|---|
dmarc_policyenum. DMARC policy required for domains that send mail. | quarantine | reject | one of quarantine, reject |
dmarc_report_addressstring. Mailbox or report service that receives DMARC aggregate reports. | a mailbox or DMARC report service monitored by the organization | a mailbox or DMARC report service monitored by the organization |
The value used is your override (tailoring file), else the profile's, else the one of the profile it extends, else the default. Bounds limit what an override may set.
Audit
- List the domains as in CB-M365-MAIL-014 (Microsoft 365 admin center > Settings > Domains, plus registrar inventory).
- For each domain, query DNS (no tenant role needed):
Get-AcceptedDomain | ForEach-Object { Resolve-DnsName -Name "_dmarc.$($_.DomainName)" -Type TXT -ErrorAction SilentlyContinue | Select-Object Name, Strings } - Fail if a domain has no DMARC record, if a sending domain's policy is weaker than
{{ dmarc_policy }}, if a parked domain is notp=reject, ifpctis below 100, ifspis weaker than the required policy, or if there is noruaaddress.
Remediation
- Publish a monitoring record first, for example
v=DMARC1; p=none; rua=mailto:[email protected], and analyze the aggregate reports. - Fix SPF and DKIM for every legitimate sender found in the reports.
- At the DNS hosting provider, update the TXT record at
_dmarc.<domain>:
thenv=DMARC1; p=quarantine; rua=mailto:[email protected]p=rejectwhere the parameter requires it. - For parked domains, publish
v=DMARC1; p=rejectdirectly.
Rollback
Lower the policy to p=none while a delivery problem is investigated.
References
- Set up DMARC to validate the From address domain for cloud senders Microsoft, vendor-doc, accessed 2026-10-24
- RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC) IETF, rfc, accessed 2026-10-24
- CISA SCuBA Exchange Online baseline CISA, standard, accessed 2026-10-24
Mappings
| Framework | ID | Relation | Note |
|---|---|---|---|
| NIST SP 800-53 Rev. 55.1.1 | SI-8 | related | |
| NIST SP 800-53 Rev. 55.1.1 | SI-4(5) | related | |
| CISA SCuBA Microsoft 365 Secure Configuration Baselines2.0.0 | MS.EXO.4.1v1 | equivalent | |
| CISA SCuBA Microsoft 365 Secure Configuration Baselines2.0.0 | MS.EXO.4.2v1 | looser | Our baseline accepts p=quarantine; the hardened value p=reject matches SCuBA. |
| CISA SCuBA Microsoft 365 Secure Configuration Baselines2.0.0 | MS.EXO.4.4v1 | equivalent |
How this control relates to the other framework's: equivalent, stricter, looser, partial or related.
Threats mitigated
| Taxonomy | ID |
|---|---|
| MITRE ATT&CK | T1566 |
Related controls
- related
CB-M365-MAIL-014Publish an SPF record that fails unauthorized senders for every domain - related
CB-M365-MAIL-015Sign outgoing mail with DKIM for every sending domain - related
CB-M365-MAIL-017Honor the sender's DMARC policy for inbound spoofed mail
People and lifecycle
| Authors |
|
| Introduced in | v0.1.0 |
| Created, updated | 2026-10-24, 2026-10-24 |
| Translations | fr |