guide · cloudflare dmarc
How should a product team implement Cloudflare DMARC safely?
Configure DMARC in Cloudflare by inventorying every service that sends with your visible From domains, verifying SPF or DKIM alignment on controlled messages, and adding one TXT policy at the exact _dmarc name. Start with reporting, preserve the prior DNS state, validate authoritative and recursive answers, and review aggregate reports before requesting quarantine or reject. Cloudflare hosts or analyzes the DNS policy; it does not make a sender aligned or prove delivery.
Separate Cloudflare DNS from sender configuration
Cloudflare can operate authoritative DNS while another provider submits and signs application email. Record those boundaries before editing anything. The zone publishes the DMARC TXT policy; each email provider controls its return path, DKIM signing domain and selector, verification, and sometimes reporting; the application controls tenant, message class, recipient, template, visible From address, and provider path. A valid DNS record cannot repair an unauthorized sender, missing DKIM signature, unaligned return path, or cross-tenant From value. Inventory production, staging, support, billing, identity, monitoring, CRM, marketing, and human-mail systems by visible From domain. Assign an owner and rollback contact to each, and classify unknown report sources before increasing enforcement.
Query the policy name receivers evaluate
For mail from alerts@notify.example.test, begin with TXT at _dmarc.notify.example.test. Do not publish the policy at the website host, mail exchanger, DKIM selector, or return-path name by mistake. Current DMARC discovery can select an applicable organizational or public-suffix policy when the author domain lacks a valid record, so record both the queried name and the policy domain selected. Query existing authoritative and recursive answers before opening Cloudflare. Multiple policy records at the same name, malformed tag syntax, or a conflicting CNAME can make the result unusable. Capture the old content, TTL, resolver output, owner, and expected post-change value so rollback is exact rather than reconstructed during an incident.
Create one reviewed TXT record in Cloudflare
Open the correct Cloudflare account and zone, go to DNS Records, choose Add record, and select TXT. Use _dmarc as the relative name for an apex policy or the exact _dmarc label for the intended subdomain. Enter one reviewed value without inconsistent quote characters; Cloudflare documents that it adds enclosing quotes to new TXT content saved without them. Choose a TTL consistent with rollout and recovery, add a privacy-safe change reference if appropriate, and save only after checking zone, name, old value, and new value. TXT policies are DNS data, not proxied web routes. If a hosting partner or another authoritative provider manages the zone, perform the change there instead of assuming the Cloudflare dashboard is authoritative.
Build the DMARC value from explicit decisions
An observation-stage record can begin with v=DMARC1; p=none and an approved aggregate-reporting URI, but that is an example rather than a universal value. Keep the version first, make the requested policy intentional, and authorize every reporting destination. Review subdomain policy, alignment mode, percentage, and reporting tags only when there is a documented requirement and current standards interpretation. Do not copy a vendor sample containing someone else's rua mailbox or jump to p=reject because syntax validates. A valid record expresses requested receiver handling; it does not prove SPF or DKIM authenticates, either authenticated identifier aligns with the From domain, all legitimate sending paths were inventoried, or any message reached an inbox.
Verify SPF and DKIM alignment on real messages
Send controlled examples from every application path to recipients whose raw headers you can inspect. Record visible From, SMTP MAIL FROM, sending IP, DKIM d= domain and selector, Authentication-Results, provider identifier, message class, environment, and time. DMARC can pass through aligned authenticated SPF or an aligned verified DKIM signature. SPF evaluates an SMTP identity and can change under forwarding; DKIM verifies a signature over selected content. Neither replaces application authorization. Test relaxed or strict alignment deliberately, including subdomains and failover routes. Provider API acceptance, destination-server acceptance, a DMARC pass, mailbox placement, and engagement are different observations. Keep those states separate so a successful API call or green policy indicator is never promoted into stronger delivery evidence.
Validate DNS and reports outside the dashboard
After saving, query Cloudflare's authoritative name servers and multiple independent recursive resolvers for TXT at the exact _dmarc name. Store raw answers, selected policy domain, TTL, resolver, timestamp, and parser result. Confirm exactly one usable record, v=DMARC1 first, required values valid, and reporting URIs approved. Repeat after the expected cache window. Send controlled messages again and inspect receiver headers. Cloudflare documents DMARC Management as a way to view sending sources and aggregate SPF, DKIM, and DMARC results, but reports are delayed receiver-supplied observations rather than a complete live census. Correlate them with provider evidence. Pause on resolver disagreement, missing low-frequency traffic, unknown legitimate sources, unaligned controlled messages, or unexpected changes to report volume.
Treat Cloudflare DMARC Management as a DNS change
Cloudflare says enabling DMARC Management may invite creation of a record when none exists or add a Cloudflare aggregate-reporting address to an existing rua tag. Review that proposed mutation like production infrastructure: export the prior value, confirm existing destinations remain intentional, verify domain scope, and preserve rollback. Its enablement documentation also describes current apex-domain scope and an external SPF-record caveat. Do not infer that the feature can safely rewrite an SPF path hosted elsewhere. A listed source or IP does not prove which application, tenant, or person authorized it, and lack of a row does not prove no traffic exists. Use the view for evidence collection while preserving authoritative DNS, raw-message, provider-log, and application-audit evidence.
Increase enforcement through staged evidence
Observe long enough to cover every legitimate sender, message class, weekday pattern, batch job, failover route, and low-frequency workflow. Classify sources as owned, approved vendor, forwarded, unknown, or abusive. Fix alignment for legitimate traffic before requesting stronger treatment. A go/no-go gate should include valid DNS, controlled-message passes, acceptable aligned coverage, no unknown legitimate sources, incident ownership, support readiness, and tested rollback. Increase policy only through a bounded, approved change and monitor authentication plus business failures. Roll back or pause on legitimate-message rejection, report loss, unexpected sources, resolver inconsistency, provider migration, or subdomain inheritance surprises. Change SPF, DKIM, and DMARC separately when possible so regression attribution stays clear.
Avoid common Cloudflare DMARC failure modes
Frequent failures include editing the wrong zone, publishing at the wrong _dmarc name, leaving two policy records, adding broken quote characters, replacing an approved rua list, assuming apex and subdomain policy are identical, and using p=reject before infrequent senders appear. Another mistake is treating the dashboard's saved or detected state as message-level proof. Use exact diffs, controlled recipients, independent queries, raw headers, and recipient-scoped incident logs. Keep customer addresses, message bodies, API keys, and unbounded report data out of tickets and analytics. If authoritative and cached answers remain inconsistent beyond the plan, an expected sender is missing, or a real message fails alignment, stop and diagnose delegation, cache, record syntax, sender inventory, SPF, and DKIM separately.
How SendHQ fits
The safe boundary is provider-neutral: the application authorizes a message, the sending provider authenticates it, Cloudflare publishes or analyzes DNS state, and receivers evaluate the message. Rely on Cloudflare's current official documentation, the current DMARC standard, observed DNS answers, and controlled received-message evidence.
Frequently asked questions
What Cloudflare name holds an apex DMARC policy?
Create TXT at _dmarc for the zone, resolving as _dmarc.example.com. For a subdomain From identity, evaluate that author domain and current discovery rules.
Should the TXT value include manual quotes?
Cloudflare says new TXT content saved without quotes is enclosed automatically. Avoid inconsistent manual quotes, then verify the authoritative raw answer and parser result.
Does Cloudflare proxy a DMARC TXT record?
No HTTP proxy decision is involved for this TXT policy. Publish it in authoritative DNS and validate it externally; web proxy behavior is a different function.
Can DMARC Management change the record?
Cloudflare's enablement documentation says it may offer to add a record or a Cloudflare rua destination. Review, preserve, verify, and roll back that change explicitly.
Does p=none reject failing mail?
No. It is observation-oriented requested policy. Inventory and remediate legitimate senders with reports and controlled messages before considering a stronger receiver request.
Does a DMARC pass prove inbox placement?
No. It proves the applicable aligned-authentication evaluation passed. Provider acceptance, receiver acceptance, folder placement, and engagement require separate scoped evidence.
Why can SPF pass while DMARC fails?
The authenticated SMTP identity may not align with the visible From domain, or another evaluation error may apply. Inspect exact identities and raw receiver results.
Does a DMARC record prove an email-provider integration?
No. A DMARC record alone does not prove an email-provider integration.
Sources
- Manage DNS records — Cloudflare
- Cloudflare DNS record types — Cloudflare
- Cloudflare DMARC Management overview — Cloudflare
- Enable Cloudflare DMARC Management — Cloudflare
- Review Cloudflare DMARC statistics — Cloudflare
- RFC 9989: DMARC — RFC Editor
- RFC 7208: SPF — RFC Editor
- RFC 6376: DKIM — RFC Editor