Self-Hosted Email: Postfix, Dovecot and OpenDKIM

Gavin Phratsachack · operator, AS218248 · Minnesota, USA - hosted in Düsseldorf, Germany

I run my own mail server for gnpk.zip on the same VPS as the rest of AS218248. Postfix handles SMTP, Dovecot handles IMAP, OpenDKIM signs outgoing mail, and the whole thing is authenticated with SPF, DKIM and DMARC. It is a one-person mail server — but it is a real one, sending to the same big providers everyone else does, and it has to earn its delivery the same way.

Why this exists

Independence from the big providers. My mail lives on my own server, under my own domain, with my own rules — no provider deciding what I can send, no account to lose, no ads in the inbox. It is also a working example of a self-hosted mail server done properly: authentication, TLS, reputation work, and the deliverability fight documented honestly, so anyone else considering it can see what it actually takes.

The stack

SMTPPostfix
IMAPDovecot (localhost-only: listen 127.0.0.1, ::1)
DKIMOpenDKIM, selector ‘mail’
Clientmutt (mail is VPS-local)
MX10 mail.gnpk.zip

Dovecot listens on localhost only, so mail is read on the VPS itself with mutt — there is no public IMAP. DKIM signs mail sent as me@gnpk.zip; mail originating as root goes unsigned, and a sender-canonical fix for that was prepared but is unconfirmed as applied.

Authentication

SPFv=spf1 ip4:45.154.99.220 ip6:2a0c:b640:10::6:220 -all
DKIMSelector ‘mail’, signs as me@gnpk.zip
DMARCp=quarantine, rua=mailto:me@gnpk.zip (live Nov 8, 2026)
PTRBoth VPS IPs point to mail.gnpk.zip
TLSTLS 1.2+ only, high ciphers, Let’s Encrypt ECDSA (secp384r1) for mail.gnpk.zip

Postfix is hardened (TLS 1.2+ only, high ciphers, ECDSA-first), and the mail certificate is pinned in DNS with DANE/TLSA — see the DNS page. internet.nl mail TLS tests are all green. The standard aliases are all in place: postmaster, abuse, noc, tech and root all point to me@gnpk.zip (added Nov 10, 2026; a test to abuse@gnpk.zip was confirmed working).

The Microsoft S3150 saga

The hardest part of self-hosting mail is not the software — it is reputation. Microsoft blocked the VPS IP (45.154.99.220) with error S3150, a hard 550 5.7.1 rejection on every message to Hotmail/Outlook. The timeline:

The authentication was never the problem: a Microsoft DMARC aggregate report covering Nov 9 showed SPF pass, DKIM pass, disposition none — the block was purely IP reputation. That is the part of self-hosted mail no configuration can fix by itself; it takes a delist request, an escalation, and patience.

Reputation work

SNDSApproved (Comments Normal, expires Sep 9, 2027)
JMRPLive — complaints to me@gnpk.zip
Yahoo Sender HubVerified; Complaint Feedback Loop enrolled
Google Postmaster ToolsVerified
DNSWLID 100404, pending
SpamhausReputation ~−1, neutral

Watching the queue

Postfix logs on Debian 13 are journald-only — there is no /var/log/mail.log; read them with journalctl -u postfix. The queue is watched with a pretty-printer: postqueue -j (NDJSON — one JSON object per line, not an array) piped through jq, using a filter at ~/.tmux/mailq.jq, usually under watch -n 1 in the mail tmux window. It extracts the readable reason after said: and strips the boilerplate. jq was installed Nov 11, 2026 for this. (pfqueue is not in Debian 13 trixie — do not look for it.)