Jak správně nastavit DNS SPF záznamy domény, aby emaily nepadaly do SPAMu

Tento článek stručně shrne význam a správné použítí SPF záznamu v DNS domény tak, aby aplikace na serveru mohla odesílat emaily, které nepadají do SPAMu.

Princip SPF neboli Sender Policy Frameworku spočívá v tom, že ověřuje IP adresu odesílatele tak, aby zabránil rozesílání SPAMu. Jedná se o DNS záznam typu TXT, který se u domény nastavuje zejména proto, že v něm definujeme adresy serverů, které mohou jménem domény posílat emaily. Serveru který přijímá odeslaný email tak říkáme, které servery jsou autorizovány k tomu, aby mohly jménem domény odesílat poštu. 

Jednoduchý příklad SPF záznamu

v=spf1 a -all

Tento záznam říká, že jediný server který může poštu odesílat je ten, který má IP adresu stejnou jako je uvedeno v DNS A záznamech. Díky direktivě -all je cokoli co tomuto pravidlu neodpovídá neautorizované a mělo by být automaticky zamítnuto.

SPF syntaxe podrobně

Uveďme si další příklad:

v=spf1 a mx ip4:1.2.3.4 -all
  • v=spf1 určuje verzi spf, která se používá
  • a mx ip4:1.2.3.4 definuje jeden nebo více serverů, které jsou autorizovány pro rozesílání SPF
  • -all definuje pravidlo, co se má stát, pokud se pravidla nedodrží

Autorizované servery

Možností jak které servery jsou autorizované k rozesílání emailů je poměrně dost.

  • a - všechny adresy obsažené v DNS A záznamu domény a to IPv4 i v IPv6 
  • mx - všechny adresy obsažené v DNS A záznamu domény a to IPv4 i v IPv6 
  • ip4 - definice konkrétní IPv4 adresy nebo rozsahu ve tvaru ip4:xxx.xxx.xxx.xxx/y
  • ip6 - definice konkrétní IPv6 adresy nebo rozsahu ve tvaru ip6:xxxx:xxxx:x:x::xxxx:x/y
  • include - definice konkrétní doménové adresy ve tvaru include:thirdparty.server.tld
  • all - všechny (nedoporučuji používat - nikdy!)

Co se stane při nesplnění pravidel

Pokud email nevyhovuje výčtu autorizovaných serverů, můžeme v SPF definovat, co se má s emailem stát.

  • -all - zamítnout / zahodit
  • ~all - částečně zamítnout (označit jako podezřelé), email může být doručen
  • ?all - neutární hodnocení

Příklady z praxe

v=spf1 a mx ip4:37.157.197.51 ip6:2a02:2b88:2:1::54c6:1 -all

V tomto případě může emaily rozesílat IP adresa která je uvedena v DNS A a MX záznamu domény a současně také definované adresy IPv4 a IPv6. Emaily rozeslané z jiných serverů jsou zamítnuty a označeny jako neautorizované. 

v=spf1 a include:_spf.google.com -all

Další příklad autorizuje odesílání emailů ze serveru na kterém leží webová prezentace (například prostřednictvím PHP skriptu) a současně autorizuje Gmail, který je klientem používán pro primární poštu.

Best practice

Poštu je vhodné centralizovat na jedno místo - na jeden server. Současně většinou potřebujete, aby webová prezentace mohla odesílat notifikace z vyplněných formulářů nebo například objednávky z eshopu. Proto doporučuji navrhnou SPF v co možná nejkratší formě, kde specifikujete pouze server na kterém leží web a současně server na které leží primární pošta. Vše je díky tomu přehledné a na první pohled jasné.