Back to blog
Threat Intel
Phishing Forensics

The p=none Purgatory: How to Escape DMARC's Monitoring-Only Trap

A DMARC policy stuck at p=none is a security control that only watches. Here’s the playbook to de-risk the jump to quarantine and reject.

MailSleuth Research
Email Security Team
June 10, 20267 min read
An editorial illustration showing a single bright teal wire being pulled straight and untangled from a large, dark, mess

Your DMARC aggregate reports arrive like clockwork. You parse the XML, stare at the IP addresses sending on behalf of your domain, and see the familiar sea of red 'fail' verdicts. You know some are spoofing attempts, but others are... probably legitimate. Maybe. This is the moment of paralysis. Flipping the switch to `p=quarantine` or `p=reject` feels like cutting a wire on a bomb without the disassembly guide. What if you block your CFO's expense report email from a new SaaS tool?

This operational fear is the single biggest reason domains languish in DMARC's monitoring-only mode. A `p=none` policy is an incomplete security control. It's a smoke detector that beeps but can't call the fire department. It provides visibility, which is a critical first step, but offers zero protection against the very BEC and domain impersonation attacks DMARC was designed to prevent.

Getting unstuck isn't about bravery; it's about process. It's about having a concrete plan to convert the unknown risks in your DMARC reports into known, manageable variables. This is that plan.

Why 'p=none' Is Just Reconnaissance

Let's be precise about what `p=none` does. According to RFC 7489, a policy of 'none' means the domain owner requests no specific action be taken by the receiver on mail that fails DMARC authentication. The receiver is free to do what it wants, but your policy isn't influencing that decision. The only thing you're guaranteed is the data—the aggregate (`rua`) and forensic (`ruf`) reports.

This is valuable reconnaissance. It's how you discover all the services sending mail on your behalf, from your primary mail provider to marketing platforms, HR systems, and transactional email APIs. But reconnaissance is not defense. Every day you remain at `p=none`, your domain is a soft target. Attackers can, and do, check public DNS for DMARC records. A `p=none` policy is a green light, signaling that impersonation attempts are unlikely to be blocked.

The operational stake is simple: without an enforcement policy, DMARC doesn't stop a single email. It just sends you a postcard about the crime after it's already happened. The goal isn't to have a DMARC record; the goal is to have a DMARC policy that actively protects your brand and your people.

From Raw XML to Actionable Intelligence

The first real task is taming the flood of DMARC aggregate reports. These XML files are machine-readable but human-hostile. You need a parser or a service to make sense of them. Once you do, you're looking for patterns in the failures. The core question is: 'Who is this failing sender, and are they one of ours?'

Isolating Legitimate-but-Unaligned Senders

Your report will be a mix of obvious junk and legitimate services. The junk is easy to spot: random IP addresses with no forward-confirmed reverse DNS, sending single-digit volumes. Ignore them. You're hunting for high-volume sources or sources whose IPs belong to well-known providers (like Salesforce, AWS SES, or SendGrid) that are consistently failing authentication.

<record>
<row>
<source_ip>209.85.220.69</source_ip>
<count>15</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>fail</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>yourdomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>some-third-party.com</domain>
<result>pass</result>
</dkim>
<spf>
<domain>google.com</domain>
<scope>mfrom</scope>
<result>pass</result>
</spf>
</auth_results>
</record>

Look closely at the snippet above. This is the classic alignment problem. The email passed SPF for 'google.com' (the mail was sent via a Google server) and passed DKIM for 'some-third-party.com' (the SaaS vendor). But because neither of those domains matches the `header_from` domain ('yourdomain.com'), DMARC alignment fails. This is not a malicious sender; it's a misconfigured third-party service. This is your action item list.

Audit Your Ecosystem with External Reputation

Once you have your list of failing third-party senders, the real investigation begins. Don't just look at the IP in the aggregate report. You need more context. An IP address alone doesn't tell you if it's a dedicated sender for a reputable ESP or a shared IP on a cloud provider that also hosts malware.

Assessing Sender Hygiene

For each failing service, investigate the domain used in its SPF (RFC 7208) or DKIM (RFC 6376) signature. What is its reputation? Has it been associated with spam campaigns? Does it have proper authentication records itself? A legitimate marketing platform will have a clean reputation; a shady email list provider won't. This external data is crucial for risk assessment. A failing sender with a terrible domain reputation is a much lower risk to block than a failing sender with a sterling reputation.

This is also where you dig into *why* it's failing. The most common culprit is SPF breaking during forwarding. Imagine a vendor sends a calendar invite. It goes from their mail server to a partner's, then to your user. By the time it hits your mail gateway, the connecting IP is the partner's server, which isn't in the original sender's SPF record. SPF `fail`. This is why DKIM is so vital; it survives forwarding, so long as the content isn't modified in transit. If a sender doesn't support DKIM, press them to implement it. It's 2024. There's no excuse.

Fix, Mitigate, or Accept the Risk

For each legitimate service, you have three paths. The best path is to *fix* it. Work with the vendor to get them to send DMARC-aligned mail, either by setting up a custom DKIM signature with your domain or by sending from a subdomain you can delegate to them. If you can't fix it, *mitigate* it by adding their sending infrastructure to your SPF record. This is less ideal as it can contribute to the 10-lookup limit and doesn't solve DKIM alignment, but it can be a temporary bridge. Finally, if it's a low-impact service and they won't fix their configuration, you may have to *accept the risk* and proceed with your DMARC enforcement, knowing that mail from this specific service might be quarantined.

The Phased Rollout: A Surgical Approach to Enforcement

You don't go from `p=none` to `p=reject` in one jump. That's how you cause outages. DMARC gives you the tools for a gradual, controlled rollout. The key is the `pct` tag.

Start by moving to quarantine. Your new policy might look like this: `v=DMARC1; p=quarantine; pct=5; rua=mailto:dmarc-agg@yourdomain.com`. This tells receivers to quarantine just 5% of emails that fail the DMARC check. The other 95% are treated as `p=none`. This is your safety net. You can now observe the impact on a small fraction of your mail flow. Check your spam filters and help desk tickets. Is anyone complaining about missing emails? If not, slowly dial up the percentage: 10%, 25%, 50%, and finally 100%.

Only after you've been sitting at `p=quarantine; pct=100` for a week or two with no major incidents should you even consider `p=reject`. Rejection is final. A `reject` disposition tells the receiving mail server to drop the connection, usually with a 5xx SMTP error code. The email is never delivered, and the end-user never knows it existed. Quarantine, on the other hand, typically places the email in the recipient's Junk or Spam folder, where it's discoverable. For all but the most security-hardened organizations, quarantine is the most practical enforcement level.

You can also use subdomains for surgical testing via the `sp` tag. For example, you could set `p=none; sp=reject` and then use a test subdomain like `testing.yourdomain.com` to see exactly how rejection behaves with a harmless mail stream before applying it to your organizational domain.

The takeaway

Moving away from `p=none` is fundamentally a de-risking process. You're trading the passive risk of impersonation for the active risk of blocking legitimate mail. By using DMARC data to identify your real email ecosystem, enriching it with external reputation data to gauge sender hygiene, and leveraging a phased rollout with the `pct` tag, you can manage that active risk down to an acceptable level. The process forces conversations with business units about the tools they use, improving not just security but IT governance.

The goal isn't just to publish a record; it's to build a resilient, defensible email posture. `p=none` is the map of your domain's exposure; `p=reject` is the wall. It's time to start building. Analysis platforms like MailSleuth.AI can accelerate the audit by automatically correlating sender IPs with known services and their reputation, turning months of manual log sifting into days of targeted action.

#dmarc#p=none#email-security#spf#dkim#bec
MailSleuth Research
Email Security Team

We dissect phishing campaigns and email infrastructure so you don't have to.