DMARC for Shared Hosting: Plesk, DirectAdmin, ISPConfig, Webmin, CWP, No-Control-Panel (Complete Setup Guide with SaaS-Relay CNAME-Delegated DKIM Escape Hatch)
The operator deployment guide for DMARC on shared-hosting tiers OTHER than cPanel - Plesk (the second-largest control panel, Postfix backend, default selector), DirectAdmin (Exim backend with a completely different management UI vs cPanel, single-character x selector), ISPConfig (Postfix + Dovecot, MSP-popular), Webmin / Virtualmin, CentOS Web Panel (CWP), AND the generic-no-control-panel population (the FTP + phpMyAdmin + webmail tier). Covers all five rollout phases per panel - verify or publish SPF, enable DKIM via the panel toggle (or via the SaaS-relay CNAME-delegated escape hatch when no panel exists), publish DMARC manually at p=none, inventory every legitimate sender, advance to p=quarantine then p=reject. Anchored against the Feb 2024 Google/Yahoo bulk-sender requirements and the operator-empowerment ceiling that defines shared-hosting DMARC deployment.
This deployment guide is provided in English. Plesk, DirectAdmin, ISPConfig, Webmin / Virtualmin, and CentOS Web Panel UI labels (Mail Settings > DKIM spam protection, Email Manager > DKIM, Email > Domain > DKIM, System Settings > Email Settings, Email Authentication) and DNS-record syntax (v=spf1, default._domainkey TXT, x._domainkey TXT, v=DMARC1; p=none; rua=mailto:) do not translate. We keep the body in the source language so technical terms remain consistent with the panel documentation and the underlying RFCs.
TL;DR
- This guide covers Plesk, DirectAdmin, ISPConfig, Webmin / Virtualmin, CentOS Web Panel (CWP), and generic no-control-panel shared hosting. For cPanel specifically, see the DMARC for cPanel & Shared Hosting sibling page - cPanel has a different management UI and is the largest single shared-hosting ecosystem, justifying its own guide.
- Plesk auto-configures Postfix outbound
but does NOT auto-enable DKIM. Open
Mail > Mail Settings > DKIM
spam protection (or older Plesk:
Tools and Settings > Mail Server
Settings > DomainKeys) and
enable DKIM. Default selector is
default._domainkey(same as cPanel and ISPConfig). SPF is NOT auto-published - addv=spf1 +a +mx ~allmanually via Plesk's DNS Settings. - DirectAdmin auto-configures Exim
outbound and the DKIM toggle lives
at Email Manager > DKIM.
Default selector is
x._domainkey(single-character "x" by historical convention - distinct from cPanel'sdefaultand Plesk'sdefault). SPF auto-generated asv=spf1 a mx ~allat account creation. - ISPConfig exposes DKIM at
Email > Domain >
DKIM; the panel generates the key
and prompts the operator to publish the TXT
record. Default selector is
default._domainkey. - Generic no-control-panel shared hosting has no self-service DKIM toggle. Three escape hatches: (1) open a support ticket asking the provider to enable DKIM signing; (2) route outbound mail through a SaaS transactional relay (SendGrid, Mailgun, Amazon SES, Postmark) with CNAME-delegated DKIM so alignment works via the relay's signing infrastructure; (3) migrate to a host with a deliverability-focused control panel. Option 2 is the most operator-empowering path because it works for any host.
- Google's Feb 2024 bulk-sender
requirements apply to shared-
hosting senders too: SPF + DKIM alignment,
DMARC at minimum
p=none(bulk senders strongly encouraged atp=quarantineor stronger), RFC 8058 one-click List-Unsubscribe, and spam-complaint rate < 0.3% for any domain sending >5000 messages/day to gmail.com or yahoo.com. - DMARC rollout (universal regardless
of panel):
v=DMARC1; p=none; rua=mailto:dmarc-reports@your-domain.comfirst. Ingest reports for 2-6 weeks to inventory every sender. Advance top=quarantineafter every legitimate sender is aligned, then top=reject. Never skip fromp=nonetop=reject. - The operator-empowerment ceiling is the defining shared-hosting constraint. The less featureful your panel, the more DMARC work depends on hosting-provider support or the SaaS-relay escape hatch. For bulk and marketing-scale sending, the recommended pattern is to bypass the host's outbound mail entirely and route through a dedicated transactional relay with reputation isolation.
1. What this guide covers
This is the operator-implementation walkthrough for deploying SPF, DKIM, and DMARC on a domain hosted on the shared-hosting tier other than cPanel. The cluster covers cPanel separately in DMARC for cPanel & Shared Hosting because cPanel is the largest single shared-hosting ecosystem and its UI is sufficiently distinctive to merit a dedicated guide. This page covers the remainder of the shared-hosting market:
- Plesk - the second-largest shared-hosting control panel by market share, dominant in Europe and Russia. Default mail server: Postfix (Plesk Obsidian and newer) or Qmail (legacy Plesk versions on older RHEL-derived servers). DKIM toggle: Mail Settings > DKIM spam protection.
- DirectAdmin - a popular cPanel alternative with a lighter UI and per-account focus. Default mail server: Exim (same as cPanel). DKIM toggle: Email Manager > DKIM.
- ISPConfig - open-source Linux server control panel popular with managed-service-provider (MSP) and German-speaking-market hosts. Default mail server: Postfix + Dovecot. DKIM toggle: Email > Domain > DKIM.
- Webmin / Virtualmin - the veteran Linux server control panel with deep configuration flexibility. Default mail server: Postfix on Virtualmin (Sendmail and Exim are configurable). DKIM toggle: Email Settings > DomainKeys Identified Mail (DKIM).
- CentOS Web Panel (CWP) - free CentOS / RHEL control panel with an Exim mail backend. DKIM toggle: Email > Add new email account and the DKIM block in the per-domain configuration.
- Generic shared hosting WITHOUT a deliverability-focused control panel - the entire population of hosts whose customers have NO self-service DKIM management: just FTP access, phpMyAdmin for databases, a webmail interface, and the hosting provider's support form. This is the LEAST operator-empowered tier and the page dedicates section 5b to the three escape hatches available.
The guide is structured as five sequential deployment steps (SPF → DKIM → DMARC at p=none → alignment fix-up → enforcement) that mirror the canonical DMARC rollout with panel-specific UI paths, syntax, and gotchas.
What this guide does not cover:
- cPanel - covered in DMARC for cPanel & Shared Hosting.
- Microsoft 365 and Google Workspace - covered in DMARC for Microsoft 365 and DMARC for Google Workspace respectively. These are mailbox-provider platforms, not shared-hosting tiers - the operator buys mailbox capacity and the platform handles outbound mail without operator infrastructure.
- Reseller hosting configuration - reseller-tier access to Plesk / DirectAdmin / ISPConfig varies by hosting provider. Where reseller capabilities matter (e.g. multi-account DKIM rotation), the guide notes the feature without a comprehensive walkthrough.
- Inbound spam filtering and anti-phishing at the shared- hosting server (SpamAssassin, Rspamd, Amavis) - separate from DMARC and out of scope for this guide.
2. Why DMARC matters now: Feb 2024 requirements + operator-empowerment ceiling
In February 2024 Google (jointly with Yahoo) introduced sender requirements that apply to any domain sending more than 5000 messages per day to gmail.com or yahoo.com combined - regardless of which hosting platform or control panel sends the mail. Shared-hosting senders that exceed the threshold are subject to the same enforcement as cPanel, Workspace, or M365 senders.
The five Feb 2024 requirements:
- SPF must pass and align with the visible From: header (RFC 7208).
- DKIM must pass and align with the visible From: header (RFC 6376).
- DMARC TXT record published
with at minimum
p=none- bulk senders strongly encouraged to advance top=quarantineorp=reject. - RFC 8058 one-click List-Unsubscribe on every commercial / marketing message.
- Spam complaint rate < 0.3% as measured at the receiver.
The operator-empowerment ceiling
Shared hosting has a structural constraint that distinguishes it from cPanel / Workspace / M365: operator empowerment varies drastically by control panel. The less featureful your panel, the more DMARC work depends on hosting-provider support intervention.
| Hosting tier | DKIM self-service? | SPF self-service? | DMARC self-service? |
|---|---|---|---|
| cPanel (with Email Deliverability) | Yes (auto-generated) | Yes (auto-generated) | Manual via Zone Editor |
| Plesk | Yes (toggle) | Manual via DNS Settings | Manual via DNS Settings |
| DirectAdmin | Yes (toggle) | Yes (auto-generated) | Manual via DNS Management |
| ISPConfig | Yes (toggle) | Manual | Manual |
| Webmin / Virtualmin | Yes (toggle) | Manual | Manual |
| CWP (CentOS Web Panel) | Yes (toggle) | Manual | Manual |
| Generic no-control-panel | NO - support ticket required | Manual via registrar DNS | Manual via registrar DNS |
Operators on the generic-no-control-panel tier are the most operator-disempowered population in the entire mailbox-provider spectrum. For this tier, the recommended path is the SaaS-relay escape hatch (section 5b): route outbound mail through a SaaS transactional relay (SendGrid, Mailgun, Amazon SES, Postmark) with CNAME-delegated DKIM so alignment works via the relay's signing infrastructure. This pattern works for ANY shared host because it bypasses the host's outbound mail entirely.
DMARC at p=quarantine or
p=reject stops domain spoofing
but does NOT compensate for shared-IP
reputation - the same constraint that affects
cPanel. Both layers must be addressed
independently. Deploy DMARC for the spoofing
layer regardless of volume; address
deliverability separately by choosing the
right outbound infrastructure for your
volume.
3. Prerequisites
- Control panel access for
Plesk / DirectAdmin / ISPConfig /
Webmin / Virtualmin / CWP. Most hosting
providers expose the panel at
https://<your-domain>:8443(Plesk default), at a vendor URL likehttps://<your-domain>:2222(DirectAdmin default), or via the hosting provider's portal. You need the per- account login. - OR support-ticket lever if you have NO control panel access. Verify the hosting provider supports DKIM at all before deploying - some bargain-tier hosts ship without DKIM signing infrastructure and will require a support escalation or a migration to a different host.
- OR a SaaS-relay account (SendGrid, Mailgun, Amazon SES, Postmark, SparkPost) if you plan to bypass the host's outbound mail entirely. Most have free tiers up to 100-1000 messages/day (Mailgun: 1000/month free, SendGrid: 100/ day free, Amazon SES: paid but very inexpensive at scale).
- DNS edit access for the primary domain. Shared-hosting panels may manage DNS at the panel server (Plesk DNS Settings, DirectAdmin DNS Management), at the hosting provider's portal, or at an external registrar. Identify where your DNS lives BEFORE attempting to publish records - the panel UI may appear to publish a record but actually only write to the panel-server zone file, which is not consulted by public resolvers if your authoritative DNS is elsewhere.
- A monitored mailbox on
the domain (or a third-party DMARC
report ingestion service such as DMARC
Analyzer). Reports arrive as
gzip-compressed XML attachments - a
typical setup uses a dedicated address
like
dmarc-reports@your-domain.com. - Inventory of every legitimate sender for the domain. The host's mail (via Plesk / DirectAdmin / ISPConfig) is the obvious source, but most small businesses also have a marketing platform (Mailchimp), a transactional relay (SendGrid / Mailgun), a contact-form mailer, ecommerce platform email (WooCommerce / Shopify with custom domain), and potentially a self-hosted WordPress plugin that bypasses the host's outbound mail.
4. Step 1: Verify or publish SPF
SPF auto-generation varies by panel:
- Plesk does NOT
auto-publish SPF. Add a TXT record at
the domain apex manually:
via Plesk's Websites & Domains > DNS Settings (or your registrar's DNS panel if DNS is external). Theyour-domain.com. IN TXT "v=spf1 +a +mx include:<hosting-provider-spf-host> ~all"include:depends on the hosting provider - check the provider's documentation. - DirectAdmin auto-generates
SPF at account creation. Default value:
v=spf1 a mx ~all. Verify via Account Manager > DNS Management. Add provider-specificinclude:directives if your host requires them. - ISPConfig, Webmin / Virtualmin, CWP do NOT auto-publish SPF. Add the TXT record manually via the panel's DNS-management interface or your registrar's DNS panel.
- Generic no-control-panel:
publish SPF via your registrar's DNS
panel. The
include:depends on whether you send through the host or a SaaS relay - for a relay-only flow, usev=spf1 include:<relay-spf-host> -allwith the host's outbound completely excluded.
Typical SPF record patterns:
# Plesk-style (host-only outbound)
your-domain.com. IN TXT "v=spf1 +a +mx ~all"
# DirectAdmin-style with SaaS relay added
your-domain.com. IN TXT "v=spf1 a mx include:sendgrid.net ~all"
# SaaS-relay-only flow (no host outbound at all)
your-domain.com. IN TXT "v=spf1 include:mailgun.org -all"
Verify with
dig +short txt your-domain.com
after publication, or via the
Domain Security
Checker. If you also send via third-party
providers (SendGrid, Mailgun, Mailchimp), add
each provider's include: in the
same record (RFC 7208 §3.2 mandates a single
SPF record per domain). Stay under the
10-DNS-lookup limit
(RFC 7208 §4.6.4).
Harden the qualifier from ~all
(soft-fail) to -all (hard-fail)
once your DMARC reports show clean SPF
passes for every legitimate sender. Hard
fail is the production recommendation.
5. Step 2: Verify or publish DKIM
DKIM activation walkthroughs vary per panel. Each section below is independently usable.
5a. Plesk: Mail Settings > DKIM spam protection
- Sign in to Plesk. Select your subscription / domain.
- Navigate to Mail > Mail Settings (Plesk Obsidian) or Tools and Settings > Mail Server Settings (older Plesk).
- Find the DKIM spam protection section. Two checkboxes: Use DKIM spam protection system to sign outgoing email messages and Use DKIM spam protection system to check incoming email messages. Enable the OUTGOING checkbox.
- Click OK. Plesk
generates a 1024-bit (legacy) or 2048-bit
(modern) RSA key and publishes the
public key at
default._domainkey.<your-domain>as a TXT record in Plesk's DNS zone (if Plesk is authoritative). If DNS is external, Plesk shows the TXT record value for you to publish at your registrar. - Verify externally with
dig +short txt default._domainkey.your-domain.com. Expected output:v=DKIM1; k=rsa; p=<long-base64-public-key>.
Typical Plesk DKIM record:
default._domainkey.your-domain.com. IN TXT "v=DKIM1; k=rsa; p=<long-base64-public-key>"
5a-i. DirectAdmin: Email Manager > DKIM
- Sign in to DirectAdmin. Select your domain from the domain dropdown.
- Open Email Manager > DKIM.
- Click Enable.
DirectAdmin generates a 1024-bit RSA key
(configurable to 2048-bit in modern
DirectAdmin versions) and publishes the
public key at
x._domainkey.<your-domain>(DirectAdmin uses the single-character x selector by historical convention). - Verify externally with
dig +short txt x._domainkey.your-domain.com.
Typical DirectAdmin DKIM record:
x._domainkey.your-domain.com. IN TXT "v=DKIM1; k=rsa; p=<long-base64-public-key>"
5a-ii. ISPConfig: Email > Domain > DKIM
- Sign in to ISPConfig as an administrator or email-admin user.
- Open Email > Domain. Select your domain.
- Open the DKIM tab.
Check Enable DKIM. Click
Generate DKIM Private-key
- ISPConfig generates a 2048-bit RSA key
and shows the DNS-record value (selector:
default). - Publish the displayed TXT record at
default._domainkey.<your-domain>via your DNS provider. - Click Save to activate signing. ISPConfig configures Amavis + Postfix to sign outbound mail with the generated key.
5a-iii. Webmin / Virtualmin: Email Settings > DKIM
- Sign in to Virtualmin as root.
- Open System Settings > Email Settings > DomainKeys Identified Mail (DKIM).
- Set Signing of outgoing mail
enabled? to Yes.
Select the Selector for DKIM
record name (Virtualmin defaults
to
defaultbut allows operator customization). - Click Save and Apply. Virtualmin generates the key, publishes the TXT record in its DNS zone (if authoritative), and configures OpenDKIM + Postfix.
5a-iv. CWP (CentOS Web Panel)
- Sign in to CWP at port 2031 (admin) or 2083 (user).
- Open Email > Email Authentication (admin) or the per-domain DKIM block under Email (user).
- Enable DKIM for the domain. CWP
generates the key (default selector:
default) and publishes the TXT record in its DNS zone.
5b. Generic no-control-panel: the three escape hatches
If you have no DKIM toggle in your panel (or no panel at all), pick one of three paths:
- Support-ticket DKIM
activation. File a ticket with
the hosting provider: "Please enable
DKIM signing for outbound mail on
domain <your-domain> and publish
the public key at
default._domainkey.<your-domain>". Most providers will action this within a business day. Note that this only works if the provider's MTA (Exim or Postfix) is configured to sign with OpenDKIM or rspamd - a small fraction of bargain-tier hosts ship without DKIM infrastructure at all. - SaaS-relay CNAME-delegated
DKIM (the recommended path for
operators who value DMARC alignment more
than the cost of a transactional relay).
Sign up for SendGrid / Mailgun / Amazon
SES / Postmark / SparkPost. Each
provides a "domain authentication" or
"sender authentication" interface that
prompts you to publish a CNAME like
s1._domainkey.<your-domain> CNAME s1.domainkey.u12345.relay-host.net- the CNAME delegates the DKIM key lookup to the relay's signing infrastructure. Route outbound mail through the relay via SMTP submission (port 587 with TLS) or the relay's REST API; every message is signed withd=your-domainand aligns with your visible From: header.# SendGrid-style CNAME-delegated DKIM s1._domainkey.your-domain.com. IN CNAME s1.domainkey.u12345.wl001.sendgrid.net. s2._domainkey.your-domain.com. IN CNAME s2.domainkey.u12345.wl001.sendgrid.net. # Mailgun-style CNAME (technically a TXT delegation in their interface) mailo._domainkey.your-domain.com. IN TXT "k=rsa; p=<mailgun-managed-key>" - Migrate to a host with a deliverability-focused control panel (cPanel, Plesk, DirectAdmin). The highest-friction option; warranted if your business critically depends on mail deliverability and you have outgrown the bargain-tier host's capability.
5c. Verification (universal)
Verify by sending a test message to a Gmail
or Yahoo address you control. Open
Show original (Gmail) or the
equivalent raw-source view. The
Authentication-Results header
should show
dkim=pass header.d=your-domain.com header.s=<your-selector>.
Key rotation: shared-hosting panels do NOT rotate selectors automatically. Plan a manual rotation every 6-12 months by generating a new key with a new selector, publishing both selectors during the transition window, switching the panel configuration to the new selector, then retiring the old.
6. Step 3: Publish DMARC at p=none
None of the shared-hosting panels auto-publish
DMARC - the rua= mailbox is
operator-specific. Publish manually via the
panel's DNS interface (Plesk DNS Settings,
DirectAdmin DNS Management, ISPConfig DNS
Manager, Webmin BIND DNS Server, CWP DNS
Functions) or via your registrar's DNS panel
if DNS is external.
- Open your DNS management interface.
- Add a TXT record at
_dmarc.your-domain.comwith the valuev=DMARC1; p=none; rua=mailto:dmarc-reports@your-domain.com; fo=1. - Save / publish the record.
Tags explained:
v=DMARC1- protocol version, always first.p=none- the reporting-only phase. Receivers will NOT change disposition based on DMARC outcomes; instead they will send daily aggregate reports describing every authentication result.rua=mailto:dmarc-reports@...- destination for daily aggregate (RUA) reports.fo=1- request a forensic (RUF) report on any DMARC failure (most major receivers do not send forensic reports - see DMARC aggregate reports deep dive).
Confirm the record is live with
dig +short txt _dmarc.your-domain.com
or via DMARC Analyzer's
Domain Security
Checker. Reports begin arriving within
24-48 hours.
7. Step 4: Inventory legitimate senders and fix alignment
Read aggregate reports for 2-6 weeks. For each unique sending IP / sending domain combination, determine:
- Is this a legitimate sender? Your shared-hosting MTA is obvious; the WordPress plugin you installed two years ago may not be.
- Is the sender aligned?
Either SPF must pass AND the envelope
MAIL FROM domain match your visible
From: header (organisational-domain
match for relaxed alignment), OR DKIM
must pass AND the
d=in the signature match your visible From: header. - If not aligned, what is the
gap? Three shared-hosting-
specific patterns dominate the
alignment-failure surface:
- The provider-bounce-domain pattern - some shared hosts rewrite the envelope MAIL FROM to a provider- controlled domain, so SPF passes for the provider but does not align with your visible From:. DKIM alignment (via the panel-issued DKIM signature) still works correctly because DKIM is independent of envelope rewriting - assuming DKIM is enabled on the panel.
- The DKIM-not-enabled pattern - the most common shared-hosting failure mode on Plesk specifically. The operator deployed DMARC but skipped the Plesk DKIM activation step. Without DKIM, the only alignment path is SPF, which breaks under envelope-rewriting hosts. Fix: enable DKIM via Mail Settings > DKIM spam protection (Plesk) or the equivalent panel toggle.
- The SaaS-sender pattern
- a third-party service
(SendGrid, Mailgun, Customer.io,
Mailchimp) sends with the From:
header set to your-domain but
its own bounce domain. Fix by
enabling CNAME-delegated DKIM
with
d=your-domainin the SaaS provider.
Continue iterating until every legitimate sender shows in reports as DMARC-pass. The DMARC Analyzer dashboard breaks down per source IP and per sending organisation so each unaligned sender is identifiable.
8. Step 5: Advance from p=quarantine to p=reject
Once every legitimate sender is aligned,
advance the DMARC record to
p=quarantine:
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@your-domain.com; fo=1"
Edit the existing _dmarc TXT record in your
panel's DNS interface (or your registrar's
DNS panel) - change p=none to
p=quarantine. Receivers begin
delivering DMARC-failing mail to spam. A
common pattern: a WordPress plugin that
sends weekly newsletters from an unaligned
SMTP configuration surfaces in the first
week at p=quarantine.
After 1-3 months at
p=quarantine without unexpected
failures, advance to p=reject:
_dmarc.your-domain.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@your-domain.com; fo=1"
DMARC-failing mail is now bounced at the SMTP boundary. Spoofing of your domain at DMARC-honouring receivers is no longer possible. You have completed the rollout.
Never skip from p=none
to p=reject. The
p=quarantine intermediate phase
exists specifically so failed mail goes to
spam (recoverable) rather than bouncing
(unrecoverable). The single most common
self-inflicted email outage in DMARC
rollouts is skipping this phase. See the
DMARC
policy rollout deep dive for the full
rationale.
For granular ramping, use the
pct= tag: p=quarantine;
pct=5 applies the quarantine
disposition to 5% of failing mail, leaving
95% at p=none. RFC 7489 §6.3
defines the semantics; note that the
dmarcbis draft deprecates
pct= so this is a transitional
feature.
9. Shared-hosting gotchas
- Operator-empowerment ceiling. Covered in section 2. The defining shared-hosting constraint: the less featureful your panel, the more DMARC work depends on hosting-provider support or the SaaS-relay escape hatch.
- DNS hosted at the registrar, not
the panel. The panel's DNS
interface will let you publish records to
its local zone file, but if your
authoritative DNS lives at Cloudflare,
Route 53, or your registrar, public
resolvers will never see those records.
Verify with
dig +short ns your-domain.com- if the nameservers are NOT the panel host's nameservers, publish DNS records at the registrar / external DNS provider. - WordPress plugins bypassing the
panel. The
wp_mail()function in WordPress is widely overridden by SMTP plugins (WP Mail SMTP, Easy WP SMTP, FluentSMTP) that route outbound through a third-party SMTP relay - bypassing the panel's DKIM signing entirely. Either configure the SMTP plugin to use the panel server's SMTP (so DKIM is applied) or configure the plugin's third-party SMTP to sign DKIM withd=your-domainunder a CNAME-delegated selector. - Plesk DKIM disabled by default. Unlike DirectAdmin and cPanel, Plesk does NOT enable DKIM at account creation - the operator must explicitly enable it via Mail Settings > DKIM spam protection. The most common Plesk DMARC failure mode is skipping this step.
- Postfix vs Exim signing
infrastructure. Plesk and
ISPConfig run Postfix; DirectAdmin and
CWP run Exim. Both work the same way
operationally (the panel toggle enables
the appropriate signing milter or filter)
but if you ever need to inspect the MTA
configuration directly (e.g. via SSH),
the configuration files differ:
/etc/postfix/main.cf+ OpenDKIM milter for Postfix,/etc/exim.conf+ dkim_signing block for Exim. - Per-tenant key vs server-wide
key. Some bargain-tier shared
hosts sign all outbound mail with a
SERVER-WIDE DKIM key whose
d=is the hosting provider's domain rather than per- tenant. In this configuration DKIM alignment is structurally impossible for tenants becaused=can never match the tenant's From: header. The fix is either to demand per-tenant DKIM from the provider, route mail through a SaaS relay with per-tenant DKIM, or migrate hosts.
10. Common shared-hosting + DMARC mistakes
- Deploying DMARC on Plesk without
first enabling DKIM. The #1
Plesk failure mode. Without DKIM, the
only alignment path is SPF, which breaks
under envelope-rewriting hosts. Enable
DKIM at Mail Settings > DKIM spam
protection BEFORE advancing past
p=none. - Assuming all shared-hosting
panels use the "default"
selector. DirectAdmin uses
x, notdefault. Always verify withdig +short txt <selector>._domainkey.your-domain.comfor whichever selector your panel uses. - Publishing DNS records at the
panel when authoritative DNS lives
elsewhere. Plesk DNS Settings,
DirectAdmin DNS Management, etc. will
accept the record but it will not be
visible to public resolvers. Verify your
nameservers with
dig +short ns your-domain.combefore deciding where to publish. - Forgetting to advance past
p=none. The reporting-only phase does NOT stop spoofing. Advance to enforcement after 2-6 weeks of clean reports. - Filing a support ticket but
publishing DMARC before the provider
enables DKIM. The host's
outbound mail will fail DMARC for the
gap window. Either delay DMARC
publication until the support ticket
is closed AND DKIM is verified, or
publish DMARC at
p=none(which never quarantines / rejects) and advance to enforcement only after DKIM is confirmed working. - Two SPF records on the same domain. RFC 7208 §3.2 mandates a single SPF record. If you add a SaaS-sender include, MERGE it into the existing panel-generated record - do not publish a second TXT.
- SPF over 10 DNS lookups.
The panel-host include plus several
third-party
include:directives commonly blow the limit. Use Domain Security Checker to count lookups. - Skipping the WordPress plugin audit. WordPress installations typically send mail through paths that bypass the panel's signing. Configure WP Mail SMTP / equivalent to route via the panel SMTP endpoint OR to sign DKIM under your domain via the third-party SMTP's authentication settings.
- Treating server-wide DKIM as
per-tenant DKIM. If your host
signs with
d=<hosting- provider>.com(verify in the DKIM-Signature header on a test message), per-tenant alignment is structurally impossible. Move to a host or relay that signs withd=your-domain. - Publishing DMARC at
p=rejectwithout alignment fix-up. The fastest path to a self-inflicted email outage. Always ingest reports atp=nonefor 2-6 weeks first.
11. Troubleshooting
- "DKIM not signing despite
enabling the panel toggle".
Send a test message to a Gmail address;
open Show Original. If
dkim=noneappears in the Authentication-Results header, the signing infrastructure is not active on the server - file a support ticket with the hosting provider. Common cause on Plesk: OpenDKIM is not installed at the OS level even though the toggle is exposed in the panel UI. - "My shared-hosting mail goes to
spam at Gmail despite all three records
passing". Diagnose shared-IP
reputation:
dig +short a mail.<your-host-server>then check the IP at Blacklist Checker. If the IP is on a major blocklist (Spamhaus, SORBS, Barracuda), the deliverability problem is upstream of DMARC. Move bulk sending off shared hosting; for transactional volume, switch to a SaaS relay with a clean outbound IP. - "DMARC reports show DKIM
header.d=<hosting-provider>.com,
not my custom domain". The
host signs with a server-wide DKIM key
whose
d=is the provider's domain rather than per-tenant. Per- tenant alignment is structurally impossible in this configuration. Either demand per-tenant DKIM, route through a SaaS relay, or migrate hosts. - "DMARC reports show DKIM pass + SPF pass but DMARC fail". An alignment failure. The SPF-passing domain or DKIM-signing domain does not match the visible From: header. See DMARC alignment explained for the deep dive.
- "My SPF record is failing with permerror". Almost always the 10-DNS-lookup limit. Run Domain Security Checker.
- "How do I inspect Plesk's
outbound mail queue?" Plesk
> Tools and Settings >
Mail Server Settings > Mail
Queue shows pending Postfix
messages. From the command line:
postqueue -p # Postfix queue list mailq # alias for postqueue -p postqueue -f # flush queue (retry deferred messages) postsuper -d <message-id> # delete a stuck message - "How do I inspect DirectAdmin's
Exim queue?" DirectAdmin
> Admin Tools > Mail
Queue Administration. From
the command line:
exim -bp # list queue exim -bpc # queue size count exim -Mvh <message-id> # view message headers exim -Mrm <message-id> # remove a stuck message - "I have no panel access and no SSH access". You are on the most-restrictive shared-hosting tier. Pick the SaaS-relay escape hatch from section 5b: bypass the host's outbound mail entirely and route through a transactional relay with CNAME- delegated DKIM. This is the only operator-empowering option on this tier.
12. Frequently asked questions
- How do I set up DMARC on Plesk?
-
Five steps. Open Mail > Mail
Settings > DKIM spam protection
and enable DKIM signing. Verify the
public key at
default._domainkey.<your-domain>. Add SPF manually at the domain apex (Plesk does NOT auto-publish SPF). Publish DMARC at_dmarcvia Plesk's DNS Settings. Ingest reports for 2-6 weeks, align every legitimate sender, advance throughp=quarantinetop=reject. - How do I set up DMARC on DirectAdmin?
-
Five steps. Open Email Manager
> DKIM and click
Enable. Verify the
public key at
x._domainkey.<your-domain>(DirectAdmin uses the single-characterxselector). DirectAdmin auto-generates SPF asv=spf1 a mx ~all; verify and tighten to-allafter DMARC reports confirm clean alignment. Publish DMARC at_dmarcvia DNS Management. Advance throughp=quarantinetop=rejectafter 2-6 weeks. - What DKIM selector do Plesk and DirectAdmin use?
-
Plesk:
default. DirectAdmin:x. ISPConfig:default. Webmin / Virtualmin:defaultby default but operator-configurable. CWP:default. cPanel:default. There is no industry-wide convention - verify withdig +short txt <selector>._domainkey.<your-domain>for whichever selector your panel uses. - How do I deploy DMARC if my shared host has no control panel?
- Three escape hatches: (1) file a support ticket asking the hosting provider to enable DKIM signing for outbound mail; (2) route outbound mail through a SaaS transactional relay (SendGrid, Mailgun, Amazon SES, Postmark, SparkPost) with CNAME-delegated DKIM so alignment works via the relay; (3) migrate to a host with a deliverability-focused control panel. Option 2 is the most operator- empowering path because it works for any host.
- How is shared hosting different from cPanel, Plesk, or DirectAdmin for DMARC?
- cPanel, Plesk, and DirectAdmin are specific control panels with self- service DKIM toggles - the operator can deploy DMARC end-to-end without contacting hosting support. Generic shared hosting WITHOUT a deliverability- focused control panel has no such lever - the operator depends on hosting-provider support or the SaaS- relay escape hatch. The fundamental distinction is operator empowerment.
- Why does my Plesk-hosted mail fail DMARC despite SPF passing?
- Almost always a DKIM-not-enabled gap. Plesk auto-configures Postfix outbound but does NOT auto-enable DKIM signing - the operator must explicitly enable DKIM via Mail Settings > DKIM spam protection. Without DKIM, your only alignment path is SPF, which breaks under envelope-rewriting hosts. See help_dmarc_alignment.php for the deep dive.
- Do I need DMARC if I send all my mail through SendGrid or Mailgun instead of my hosting?
-
Yes. Without DMARC at enforcement,
attackers can forge messages with your
domain in the From: header from anywhere
on the internet. SendGrid / Mailgun
signing your outbound mail does not
stop spoofing at receivers that ignore
the relay's DKIM signature. DMARC at
enforcement closes that gap. Configure
DKIM via the relay's domain-
authentication interface (CNAME-
delegated) and ramp DMARC from
p=nonetop=rejectover 2-6 weeks. - Where do I see DMARC reports for shared hosting mail?
-
Receivers (Google, Microsoft, Yahoo,
Comcast, and others) send daily
aggregate reports to the
rua=mailbox in your DMARC record. DMARC Analyzer ingests these viaincludes/DmarcParser.php. Plesk, DirectAdmin, and ISPConfig do NOT parse DMARC reports - their email- stats interfaces show outbound delivery only.
Deploy DMARC for your shared-hosting domain now
DMARC Analyzer parses the daily aggregate
reports receivers send to your
rua= mailbox, deduplicates by
report_id + org_name,
and surfaces the per-sender / per-IP /
per-day breakdown needed to drive the
alignment fix-up phase. Live DNS verification
for every SPF / DKIM / DMARC record on your
domain runs through
includes/DnsChecker.php; the
Email Header
Analyzer at
header_analyzer.php diagnoses
individual message failures by parsing the
full Authentication-Results stack via
includes/EmailHeaderParser.php;
the Blacklist
Checker diagnoses shared-IP reputation
issues common on shared-hosting
infrastructure.