I’m further working to secure my new somebits.com email domain. Today I’m setting a strict p=reject policy for DMARC. If a message arrives claiming to be from @somebits.com and isn’t DKIM signed, the receiver should bounce it. Scary!
Why do this? Because I think all email I’m sending will be DKIM signed, so it’s harmless to my legitimate mail. And it will stop spammers from spoofing mail from my domain. I’m hoping this will also be seen as a positive sign that my domain is not a spam source. Or at least, prevent my domain from getting a bad reputation from people spoofing it. Let’s see.
Details
DMARC and DKIM have been around for awhile but almost no one enforces it strictly. If an email should be DKIM signed but isn’t, email receivers like Gmail will take that as a signal that maybe it’s spam. But they aren’t strict about it.
You can set a DMARC policy for a domain about what to do for unsigned email. A lot of folks run p=none, which means “don’t worry about the signature but send a report if it doesn’t match”. A monitoring setup, you can send error reports to nice consoles like PostMark’s or Cloudflare’s.
I’ve been doing that for a few weeks now and all my emails seem to be properly signed. They should be, I only ever send mail out from Gmail. I have seen some reports of failed signatures but they all look like spammers impersonating me. Today it was an email from China Mobile to mail.ru. Definitely not me.
A lot of folks advise testing the waters by setting p=quarantine first. That tells the receiver to just put the mail in a spam folder, not bounce it. But that means I get no feedback. My theory of jumping straight to p=reject is if anything goes wrong my mail will bounce and I’ll see it. At least, I hope so.
What might go wrong? The usual problem is a bunch of legacy systems are built around spoofing email. Various cron jobs, mailing list software, etc impersonating @somebits.com. But I haven’t done that for years because it’s unreliable. I send all my mail via Gmail’s servers where they are DKIM signed. So I should be good.
Another way to test is pct=25 or the like, to say “only reject 25% of the mail if it’s not DKIM signed”. I can see the value of this for a high volume domain so you don’t break all your customers. But for a personal domain it would just make things unreliable. I either want it 100% working or 100% failing, not for a quarter of my mail to randomly get dropped.
So now we run this way for a few weeks and see what happens. I’m liking Cloudflare’s DMARC reports, they are aggregated daily and presented in a nice dashboard.
Subdomains
Currently I have no setting for the subdomain policy sp=. The default behavior is to follow the p= policy, so now I have sp=reject as well. That means any email for subdomains like foobar.somebits.com will act the same as somebits.com. Which is just fine for my situation, I’m not even using subdomains.
SPF
BTW, all this DMARC and DKIM stuff is different from SPF. DKIM says “this email claiming to be from @somebits.com was signed by a valid somebits.com system”. There’s also SPF, which says “this email for @somebits.com arrived from an IP address belonging to a valid somebits.com system. I do have some SPF failures because various folks are legitimately forwarding email around who aren’t valid SPF senders for my domain. I had this problem for my inbound email and fixed it by using Cloudflare as my MX. They do ARC signatures right which works around the SPF problem.
It’s possible to set aspf=s to tell mail systems to strictly drop any email for the domain if there’s an SPF failure. I can’t imagine that works well in practice. I’m not doing it.
Bottom line: Cloudflare still reports SPF failures but it’s OK. They are often from legitimate activity. And systems are supposed to not drop my mail just because of an SPF failure.
Testing
Gemini helped me test what happens with email that’s not signed. It’s gotten a little tricky to forge email: all the legitimate mailing services don’t allow you!
LearnDMarc is a tool that will forge mail and show you what happens. It’s a little too scripted though, I’m not sure if what I was seeing is real.
swaks is a modern tool for forging mail, a replacement for the old days of just telnetting to port 25. That’s hard to run from a home ISP because they all filter outgoing port 25, but I have a cloud server that still can send email. So I tried sending an email to gmail from me at somebits.com:
-> Date: Tue, 31 Mar 2026 19:13:45 +0000
-> To: ******@gmail.com
-> From: *****@somebits.com
-> Subject: test Tue, 31 Mar 2026 19:13:45 +0000
-> Message-Id: <20260331191345.1520151@localhost>
-> X-Mailer: swaks v20240103.0 jetmore.org/john/code/swaks/
->
-> This should be rejected by DMARC.
->
->
-> .
<** 550-5.7.26 Unauthenticated email from somebits.com is not accepted due to
<** 550-5.7.26 domain's DMARC policy. Please contact the administrator of
<** 550-5.7.26 somebits.com domain if this was a legitimate mail. To learn about
<** 550-5.7.26 the DMARC initiative, go to
<** 550 5.7.26 https://support.google.com/mail/?p=DmarcRejection 46e09a7af769-7da0a433fadsi8755951a34.58 - gsmtp
-> QUIT
Looks like it worked! An immediate rejection from Gmail’s receiving SMTP server. Great!