Hoe voorkom ik dat bij het verzenden van e-mail mijn domein door onbevoegden wordt geïmiteerd (lees: gespoofed)? Dit is een heel belangrijke vraag voor mezelf, maar ook voor iedereen die in naam van mijn domein e-mail ontvangt. Ik wil geen e-mail ontvangen in naam van mijn domein verzonden door onbevoegde servers. Iedereen wil geen e-mail ontvangen van mijn domein welke niet is verzonden door mijn servers. Een technische maatregel die helpt in het voorkomen dat mijn domein tijdens het verzenden van e-mail wordt geïmiteerd is SPF (Sender Policy Framework).
Wanneer een e-mail met mijn domeinnaam als afzender wordt verzonden, voeren veel ontvangende e-mailservers een controle op mijn SPF record uit. Dit doen ze om vervalste, gespoofde berichten te detecteren. Met andere woorden, met een SPF record kan ik als domeineigenaar aangeven welke e-mailservers berichten voor mijn domein mogen verzenden.
Op het ogenblik dat mijn server tijdens het SMTP gesprek zijn "MAIL-FROM" opdracht geeft, zoekt de ontvangende server het SPF record voor mijn (verzendend) domein op, en controleert of source IP adres overeenstemt met wat is opgegeven in mijn SPF record.
Een SPF record is m.a.w. gewoon een DNS TXT record met een specifieke syntax. Twee SPF record voorbeelden worden hieronder weergegeven:
v=spf1 mx -all
;v=spf1 include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com include:_spf-ssg-a.microsoft.com include:spf-a.hotmail.com ip4:147.243.128.24 ip4:147.243.128.26 ip4:147.243.1.153 ip4:147.243.1.47 ip4:147.243.1.48 -all
.Parameters en acties bepalen welke hosts e-mail kunnen verzenden voor mijn domein. Hieronder worden alle mogelijke parameters toegelicht:
all
: deze parameter komt overeen met elke host, en wordt aan het einde van het SPF record geplaatst als een "catch all" voor elke afzender die niet overeenstemt met alle andere voorgaande parameters in het SPF record;ip4
: deze parameter komt overeen met één enkel IPv4 adres of een IPv4 netwerkbereik;ip6
: deze parameter komt overeen met één enkel IPv6 adres of een IPv6 netwerkbereik;a
: deze parameter komt overeen met een host- of domeinnaam (DNS A record). Het IP adres waarnaar de naam in de DNS wordt omgezet, wordt vergeleken met het IP adres van de afzender. Deze methode is handig voor het matchen van een IP adres van een webserver op basis van domeinnaam;mx
: deze parameter komt overeen met de DNS MX records voor het domein. Deze methode is handig wanneer de uitgaande e-mail door dezelfde servers wordt verwerkt als voor inkomende e-mail;ptr
: deze parameter gebruikt reverse DNS query's om het IP adres van de verzender om te zetten naar hostnamen. Deze methode wordt over het algemeen niet aanbevolen vanwege de DNS belasting die het veroorzaakt;exists
: deze parameter controleert of het domein in DNS bestaat;include
: deze parameter controleert of het IP adres overeenstemt met dat in een SPF record van een ander domein. Dit wordt vaak toegepast wanneer uitgaande e-mail vanaf of via een cloudservice verloopt.Zoals vermeld, parameters en acties bepalen welke hosts e-mail kunnen verzenden voor mijn domein. Acties vertellen de ontvangende server wat te doen als een overeenstemmende parameter is gevonden. Hieronder worden alle mogelijke acties toegelicht:
+
: Deze actie betekent dat het bericht ontvangen mag worden. Dit is de standaardwaarde als er geen expliciete actie voor een parameter is opgegeven;-
: Deze actie betekent dat het bericht niet ontvangen mag worden (e-mail van onbevoegde hosts moet worden afgewezen). Deze actie wordt vaak op het eind van het SPF record in combinatie met de parameter all
toegepast;~
: Deze actie staat voor "SoftFail", wat betekent dat het bericht ontvangen mag worden, maar als "waarschijnlijk spam" wordt gemarkeerd . Ook deze actie wordt vaak op het eind van het SPF-record in combinatie met de parameter all
toegepast, als alternatief voor -all
;?
: Deze actie staat voor "Neutral", wat betekent dat ongeacht het resultaat het bericht ontvangen mag worden.Om mijn SPF-record te testen gebruik ik MXToolbox. Geef ik enkel mijn domeinnaam in, dan wordt o.a. de syntax gecontroleerd. Geef ik mijn domeinnaam in combinatie met een IP-adres in, dan wordt gecontroleerd of het IP-adres voor mijn domeinnaam mag verzenden.