SPF, DKIM a DMARC: aby vaše e-maily nekončily ve spamu
Jak nastavit SPF, DKIM a DMARC pro vlastní doménu, odesílání z VPS i přes externí službu, postupné zpřísnění politiky a ověření hlaviček e-mailu.
Aplikace na VPS posílá registrační e-maily a ty končí ve spamu – nebo nedorazí vůbec. Velcí poskytovatelé schránek (Gmail, Outlook, Seznam) dnes vyžadují, aby odesílatel prokázal, že má právo posílat poštu za svou doménu. Slouží k tomu tři DNS mechanismy: SPF, DKIM a DMARC.
Jak spolu souvisejí
| Mechanismus | Co ověřuje | Kde je záznam |
|---|---|---|
| SPF | smí tento server posílat za doménu? | TXT na mojeapp.cz |
| DKIM | je zpráva podepsaná klíčem domény a nezměněná? | TXT na selektor._domainkey.mojeapp.cz |
| DMARC | co dělat, když kontroly selžou, + reporty | TXT na _dmarc.mojeapp.cz |
DMARC navíc vyžaduje zarovnání (alignment): doména, kterou ověřilo SPF nebo DKIM, musí odpovídat doméně v hlavičce From:, kterou vidí příjemce.
SPF
SPF je seznam serverů oprávněných odesílat poštu. Příklad pro doménu, která posílá z VPS a přes externí službu:
mojeapp.cz. IN TXT "v=spf1 ip4:203.0.113.10 include:_spf.example-mailer.com -all"
| Část | Význam |
|---|---|
v=spf1 |
verze, povinné na začátku |
ip4: / ip6: |
konkrétní adresa nebo rozsah |
mx |
servery z MX záznamů domény |
include: |
převezme SPF jiné domény (typicky poskytovatele) |
-all |
ostatní odmítnout (hard fail) |
~all |
ostatní označit jako podezřelé (soft fail) |
Pravidla, na která se zapomíná:
- Jen jeden SPF záznam na doménu. Další služby přidávejte do stejného záznamu.
- Limit 10 DNS dotazů – každý
include,a,mxaredirectse počítá, včetně vnořených. Při překročení končí SPF chyboupermerror. - SPF ověřuje doménu z obálky (
Return-Path), ne zFrom:. U externích služeb proto bývá potřeba nastavit vlastní return-path doménu, aby fungovalo zarovnání.
DKIM
DKIM podepisuje každou odeslanou zprávu privátním klíčem; příjemce ověří podpis veřejným klíčem z DNS.
Externí služba (transakční mailer, Google Workspace, Microsoft 365): v administraci služby vygenerujete DKIM a ona vám dá záznam (TXT nebo CNAME) k vložení do DNS.
Vlastní Postfix na VPS s OpenDKIM:
sudo apt install opendkim opendkim-tools
sudo mkdir -p /etc/opendkim/keys/mojeapp.cz
sudo opendkim-genkey -b 2048 -d mojeapp.cz -s mail2026 -D /etc/opendkim/keys/mojeapp.cz
sudo chown -R opendkim:opendkim /etc/opendkim/keys
sudo cat /etc/opendkim/keys/mojeapp.cz/mail2026.txt
Výstup obsahuje záznam pro mail2026._domainkey.mojeapp.cz ve tvaru v=DKIM1; k=rsa; p=MIIBIjAN.... Klíč 2048 bitů je delší než 255 znaků, takže ho v DNS rozdělte na více řetězců v jednom TXT záznamu (většina webových rozhraní to udělá sama).
V /etc/opendkim.conf pak nastavte doménu, selektor, cestu ke klíči a socket, který napojíte na Postfix přes smtpd_milters a non_smtpd_milters. Detaily se liší podle verze, proto vycházejte z komentářů ve výchozím konfiguračním souboru.
Selektor (mail2026) umožňuje mít víc klíčů současně a bezpečně je rotovat.
DMARC
DMARC říká příjemcům, co dělat se zprávami, které neprojdou SPF ani DKIM se zarovnáním, a kam posílat reporty.
Začněte jen monitorováním:
_dmarc.mojeapp.cz. IN TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
| Parametr | Význam |
|---|---|
p=none |
jen sbírat reporty, nic neblokovat |
p=quarantine |
neprošlé zprávy do spamu |
p=reject |
neprošlé zprávy odmítnout |
rua= |
kam posílat souhrnné reporty (XML) |
pct= |
na kolik procent zpráv politiku uplatnit |
adkim= / aspf= |
r = volné zarovnání (subdomény OK), s = přesné |
Postup zpřísňování:
p=none– pár týdnů sbírejte reporty a zjistěte, kdo všechno za vaši doménu posílá (newsletter, fakturační systém, CRM…).- Všem legitimním odesílatelům nastavte SPF a DKIM.
p=quarantine, případně nejprve spct=25.p=reject, jakmile reporty neukazují legitimní selhání.
XML reporty jsou nečitelné ručně – použijte analyzátor reportů (existují open-source i hostované varianty).
Odesílání přímo z VPS: na co myslet
- PTR záznam IP adresy musí ukazovat na hostname serveru (
mail.mojeapp.cz) a ten zpět na stejnou IP. Nastavuje se u poskytovatele VPS. - Port 25 bývá u mnoha poskytovatelů VPS pro odchozí poštu zablokovaný, nebo se odblokovává na žádost.
- Reputace IP – nová IP nebo IP po předchozím zneužití může být na blacklistu.
Pro transakční e-maily z aplikace je často jednodušší odesílat přes SMTP relay specializované služby a na serveru mít jen SPF include a DKIM záznam od ní.
Ověření
Pošlete si testovací e-mail do Gmailu a otevřete „Zobrazit originál“. Hledejte:
Authentication-Results: mx.google.com;
dkim=pass [email protected] header.s=mail2026;
spf=pass smtp.mailfrom=bounce.mojeapp.cz;
dmarc=pass (p=QUARANTINE) header.from=mojeapp.cz
Kontrola DNS z příkazové řádky:
dig +short TXT mojeapp.cz | grep spf1
dig +short TXT mail2026._domainkey.mojeapp.cz
dig +short TXT _dmarc.mojeapp.cz
Na serveru s OpenDKIM ověříte klíč proti DNS:
sudo opendkim-testkey -d mojeapp.cz -s mail2026 -vvv
Doména, ze které neposíláte
I doména, která poštu vůbec neodesílá, by měla mít ochranu proti podvržení:
mojeapp.cz. IN TXT "v=spf1 -all"
_dmarc.mojeapp.cz. IN TXT "v=DMARC1; p=reject"
Pokud si nejste jistí, proč zprávy padají do spamu, vložte hlavičky e-mailu do ColdHost AI v režimu Server a DevOps – rozebere výsledky SPF, DKIM a DMARC a navrhne úpravy DNS záznamů.