DNSprobe Wiki · DMARC section
DMARC configuration, policy and reporting
DMARC links SPF and DKIM together and tells receivers how to handle messages that fail authentication or alignment.
DMARC (Domain-based Message Authentication, Reporting and Conformance) builds on SPF and DKIM to enforce domain alignment. It focuses on whether the visible From: address matches the domains that actually authenticated the message.
With DMARC you can start by only monitoring traffic, then progressively move to quarantining or rejecting messages that do not authenticate correctly.
The DMARC Configuration block in DNSprobe shows your raw record, a human-friendly policy summary, reporting settings, a parsed tag table and a final evaluation score.
What DNSprobe shows in the DMARC section
How DNSprobe analyses your DMARC record
DNSprobe looks for a TXT record at _dmarc.example.com and checks that it starts with v=DMARC1. It then parses the rest of the string into individual tags such as p, sp, rua, ruf, pct, adkim and aspf.
From these tags it builds the Policy summary, Report settings and Parsed DMARC tags tables that you see in the report, and it normalises values that are omitted but have well-defined defaults.
Finally, DNSprobe evaluates how strict your policy is, whether you receive reports, and whether the configuration follows recommended best practices, then assigns a DMARC Evaluation Score with a short explanation.
1. DMARC Configuration block overview
This row in your DNSprobe report confirms that a DMARC record was found, shows its raw value and provides a short textual summary of the main settings.
Why this matters
A valid DMARC record is now expected by many major mailbox providers. It helps protect your brand from spoofing and gives you visibility on who is sending mail using your domain.
How to read this block
Check that the hostname is _dmarc.yourdomain, that the value begins with v=DMARC1 and that the high-level policy (none, quarantine or reject) matches your intentions. DNSprobe also displays your “real” DMARC once defaults are applied.
Best practices at a glance
- Publish exactly one DMARC record per domain, at the _dmarc host.
- Move gradually from p=none (monitoring) to p=quarantine or p=reject once SPF and DKIM are correctly configured.
- Keep the record readable so you can review it quickly in tools like DNSprobe.
2. Policy summary (p, sp, pct, alignment)
The Policy summary block in your DNSprobe report answers three questions: what happens to failing messages, what happens for subdomains, and what percentage of traffic is subject to the policy.
Why the policy matters
These settings control how aggressively receivers should treat messages that do not align with your SPF or DKIM, both for the main domain and for its subdomains.
How DNSprobe interprets the policy
DNSprobe reads the p, sp and pct tags and translates them into a short, human-friendly description such as “Policy: reject; Subdomain policy: reject; Percentage applied: 100%”.
Best practices for DMARC policy
- Start with p=none and pct=100 to collect reports without impacting delivery.
- When you are confident that SPF and DKIM are aligned, move to p=quarantine, then eventually p=reject.
- Use sp only if you need a different policy for subdomains; otherwise let them inherit the main policy.
3. Reporting settings (rua, ruf, fo, ri, rf)
The Report settings part of the block tells you where aggregate reports (rua) and forensic reports (ruf) are sent and how often they are expected.
Why DMARC reports are useful
Aggregate reports help you understand which IPs and providers are sending mail for your domain and how often messages fail authentication. Forensic reports can provide detailed samples of failed messages.
How DNSprobe displays reporting configuration
DNSprobe lists your rua and ruf mailto: addresses, the chosen fo options and the ri interval, and highlights when no reports will be sent because the corresponding tags are missing.
Best practices for DMARC reporting
- Always configure at least one rua address that points to a mailbox or DMARC analysis service you control.
- Use fo=1 if you want more detailed failure visibility, but be prepared for additional report volume.
- Request ruf reports only if you have a clear need and can handle the privacy and data-protection implications.
Legend (tag meaning, defaults and plain-English translation)
This legend explains what each DMARC tag does in practice, which values are accepted, and what happens when the tag is omitted.
| TAG | DEFAULT | TRANSLATION |
|---|---|---|
v |
DMARC1 |
DMARC version identifier. It must be exactly “DMARC1” and it must be the first tag. If v is missing, misspelled or not first, many receivers ignore the entire DMARC record. |
p |
none |
Policy applied when a message fails DMARC (authentication + alignment). Valid values: none, quarantine, reject. “none” is monitoring-only, “quarantine” asks receivers to treat failing mail as suspicious (often spam), and “reject” asks receivers to refuse failing mail. Note: p is a required tag—if it is missing, the record is considered invalid by many implementations. |
adkim |
r |
DKIM alignment mode. Valid values: r (relaxed) or s (strict). Relaxed allows the DKIM d= domain to align at the organisational level with the visible From: domain. Strict requires an exact match between the DKIM d= domain and the From: domain. |
aspf |
r |
SPF alignment mode. Valid values: r (relaxed) or s (strict). Relaxed allows the SPF-validated domain (MailFrom/Return-Path) to align at the organisational level with the visible From: domain. Strict requires an exact match. |
sp |
inherits p |
Subdomain policy. Valid values: none, quarantine, reject. If omitted, subdomains inherit the main p policy. Use sp when you want an explicit “wildcard” policy for all subdomains. |
fo |
0 |
Forensic reporting trigger options (receiver support varies). Valid values: 0, 1, d, s (comma-separated combinations may be used). 0 means “generate a failure report only if both SPF and DKIM fail to produce a DMARC pass”. 1 means “if either SPF or DKIM fails”. d means “on DKIM failure”, s means “on SPF failure”. |
ruf |
none |
Where forensic (failure) reports should be sent. This is a list of URIs, not just email addresses—typically mailto: URIs. If omitted or set to none, receivers will not send forensic reports. |
rua |
none |
Where aggregate (XML) reports should be sent. This is a list of URIs (usually mailto:). If omitted or set to none, you will not receive aggregate reports. |
rf |
afrf |
Format for forensic reports sent via ruf. Valid values: afrf (commonly used) or iodef (structured incident format). Many receivers only support afrf. |
pct |
100 |
Percentage of failing messages to which the policy is applied. Example: pct=25 means apply the p policy to ~25% of DMARC failures. Important: pct is mainly meaningful when p (or sp) is quarantine or reject; with p=none, it does not provide enforcement. |
ri |
86400 |
Requested interval (in seconds) between aggregate report deliveries. Many receivers still send reports at most once per day regardless of the exact value. |
Tip: rua/ruf values should be URIs (for example mailto:[email protected]). If reports are sent to a different domain (external provider), additional DNS authorisation may be required by some receivers.
6. Quick interpretation guide
This section adds the practical checks you typically get in DMARC inspector tools: validity, defaults, alignment, subdomain behaviour, reporting and common mistakes.
1) Record validity and correct DNS placement
DMARC must be published as a TXT record on the _dmarc host of the domain you want to protect. If the record is malformed, many receivers ignore it entirely.
- Hostname should be: _dmarc.yourdomain
- The value must start with: v=DMARC1 (and it must be first).
- Publish only one DMARC record per domain (multiple records often invalidate DMARC).
Example record:
_dmarc.example.com TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
Keep the string readable (clear separators, consistent formatting). It makes typos much easier to spot.
2) Policy behaviour: p, sp and pct
These tags define what receivers should do when a message fails DMARC (authentication + alignment), and whether that behaviour applies to subdomains and all traffic.
- p=none: monitoring only (no enforcement).
- p=quarantine: treat failing mail as suspicious (often spam/junk).
- p=reject: reject failing mail at the receiver.
- pct controls the enforcement percentage (mostly relevant for quarantine/reject).
3) Alignment: adkim and aspf (relaxed vs strict)
Alignment answers a simple question: does the domain that authenticated match the domain visible to the user in the From: header? Relaxed allows an organisational match; strict requires an exact match.
- adkim controls DKIM alignment (the DKIM d= domain vs From:).
- aspf controls SPF alignment (MailFrom/Return-Path domain vs From:).
| Setting | Relaxed (r) | Strict (s) |
|---|---|---|
adkim |
The DKIM d= domain may be a subdomain of the From: organisational domain. | The DKIM d= domain must exactly match the From: domain. |
aspf |
The SPF MailFrom domain may be a subdomain of the From: organisational domain. | The SPF MailFrom domain must exactly match the From: domain. |
In practice, relaxed alignment is common. Strict alignment can be useful for tighter control but requires disciplined sending infrastructure.
4) Subdomains and organisational domain behaviour
DMARC is evaluated on the exact domain in the visible From:. If that exact domain has no DMARC record, receivers may apply the organisational domain’s DMARC record instead, depending on the public suffix rules.
- sp sets a dedicated policy for subdomains; if omitted, subdomains inherit p.
- If you send from subdomains (news.yourdomain, billing.yourdomain), plan them as part of your DMARC rollout.
- Be consistent: avoid accidental “shadow” policies across subdomains unless you really mean it.
5) Reporting: rua, ruf, fo, ri and rf
Reporting tags control where aggregate reports (rua) and (optionally) forensic/failure reports (ruf) are sent, and what level of detail is requested.
- rua: aggregate reports (usually the most valuable and widely supported).
- ruf + fo: forensic/failure reporting (implementation varies; can raise privacy/volume concerns).
- ri: requested interval in seconds, but many receivers still send at most daily.
6) External report addresses: required DNS authorisation
When your rua/ruf points to a different domain (for example, a DMARC analytics provider), that destination domain typically needs an authorisation TXT record. Without it, some receivers will refuse to send reports to that external address.
Example authorisation record:
example.org._report._dmarc.sample.net TXT "v=DMARC1;"
Your DMARC provider usually tells you the exact hostname/value to publish for external destination verification.
7) Common mistakes to avoid
Most DMARC issues come from small DNS or syntax mistakes. Here are the ones worth checking first:
- Publishing more than one DMARC TXT record at _dmarc (can invalidate DMARC).
- v=DMARC1 not first, or written with the wrong casing.
- Missing semicolons or accidental extra separators that break parsing.
- Using report addresses you don’t control (or forgetting external authorisation).
- Moving to reject before all legitimate senders have aligned SPF/DKIM.
7. Test DMARC records manually from your own terminal
The DMARC section in DNSprobe reads the TXT record at _dmarc.yourdomain and parses tags such as policy (p), subdomain policy (sp), reporting addresses (rua/ruf) and alignment modes (adkim/aspf). You can inspect the raw DMARC record yourself from a terminal by querying the TXT record on the _dmarc subdomain.
Linux: using dig (BIND utilities)
On most Linux distributions, the dig command is provided by the BIND utilities package. The commands below query the DMARC TXT record for your domain and then focus on the line that starts with v=DMARC1:
dig _dmarc.example.com TXT
dig _dmarc.example.com TXT +short
# Optional: filter TXT records to show only the DMARC policy (the line starting with v=DMARC1)
dig _dmarc.example.com TXT | grep "v=DMARC1"
macOS: using dig from the built-in tools
macOS ships with dig as part of its standard command-line tools. Open Terminal and run the same commands as on Linux to list the DMARC TXT record and isolate the policy line that begins with v=DMARC1:
dig _dmarc.example.com TXT
dig _dmarc.example.com TXT +short
# Optional: filter TXT records to show only the DMARC policy (the line starting with v=DMARC1)
dig _dmarc.example.com TXT | grep "v=DMARC1"
Windows: using nslookup
On Windows, the legacy nslookup tool can query TXT records on the _dmarc subdomain. From a Command Prompt or PowerShell window, you can retrieve the main DMARC policy and, if needed, test a delegated DMARC record on a subdomain:
nslookup -type=TXT _dmarc.example.com
REM Optional: query a subdomain-specific DMARC record such as _dmarc.sub.example.com if you override the policy there
nslookup -type=TXT _dmarc.sub.example.com
Important: only query DMARC records for domains that you own or are authorised to analyse. Repeated automated lookups against third-party domains without permission may be treated as abusive traffic by some providers.
Summary: DMARC ties your e-mail authentication together
A well-designed DMARC policy tells receivers how seriously you take spoofing, while still giving you insight into legitimate and abusive traffic via reports.
DNSprobe’s DMARC section helps you verify that the record is published in the right place, that the policy matches your intentions and that every tag uses safe, standards-compliant values.
Planning to move from monitoring to reject?
Before tightening your DMARC policy, review your SPF and DKIM configuration and watch aggregate reports for a while. When in doubt, involve your mail provider so that stricter policies do not accidentally block legitimate mail.