SPF-record voor je domein instellen

18 augustus, 2014
Handleidingen
E mail, DNS, SPF, Anti Spam

Het Sender Policy Framework (SPF) stelt je in staat om via DNS aan te geven welke (mail)servers namens een domeinnaam e-mailberichten mogen verzenden. Het doel hiervan is om berichten afkomstig van deze legitieme mailservers te verheffen boven berichten die afkomstig zijn van andere servers.

Zo kan tot op zekere hoogte voorkomen worden dat legitieme e-mailberichten automatisch in de map voor ongewenste e-mail (spam) van gebruikers terechtkomen. Uiteindelijk is het echter aan de ontvangende mailserver om te bepalen welke actie het onderneemt op basis van de SPF-gegevens.

Een mailserver die SPF ondersteunt, zal bij de ontvangst van een e-mailbericht het SPF-record opvragen voor de domeinnaam die als afzender ingesteld staat. Voor een e-mail die afkomstig is van jan@example.com, zal het de nameservers van example.com naar een bijbehorend SPF-record vragen. Bestaat deze, dan zal het controleren of het IP-adres van de verzendende mailserver overeenkomt met één van de parameters. Is dat het geval, dan weet de ontvangende mailserver dat de verzendende mailserver toestemming heeft om namens deze domeinnaam e-mailberichten te verspreiden.

Deze interactie tussen de mailserver en het SPF-record kan tot één van de de onderstaande resultaten leiden:

ResultaatBeschrijvingBeoogde actie
PassHet SPF-record geeft aan dat de host toestemming heeft om te verzendenaccepteren
FailHet SPF record geeft aan dat de host GEEN toestemming heeft om te verzendenafwijzen
SoftFailHet SPF record geeft aan dat de host GEEN toestemming heeft om te verzenden (minder agressief)accepteren + markeren
NeutralHet SPF record geeft expliciet aan dat niks over de validiteit kan worden gezegdaccepteren
NoneDe domeinnaam beschikt niet over een SPF-record, of deze leidt niet tot een resultaataccepteren
PermErrorEen permanente fout is opgetreden (bv. vanwege een verkeerd opgemaakte SPF-record)niet gespecificeerd
TempErrorEen tijdelijk fout is opgetreden in de overdracht van SPF-gegevensaccepteren of afwijzen

Benodigdheden

Anatomie van een SPF-record

Een SPF-record bestaat uit één regel, en begint altijd met versie-informatie. Hiermee wordt aangeduid dat het om een SPF-record gaat:

v=spf1

De regel wordt van links naar rechts gelezen. Na de versie-informatie volgen één of meerdere mechanisms, of parameters, eventueel gevolgd door een dubbele punt en de bijbehorende waarde zoals een IP-adres of hostnaam. Elk mechanism wordt voorafgegaan door een qualifier.

De zes mogelijke mechanisms zijn:

MechanismeBetekenis
ip4IPv4-adres
ip6IPv6-adres
aGelijk aan A- of AAAA-record van domein
mxGelijk aan MX-record(s) van domein
ptrGelijk aan PTR-record van domein
existsControle van het bestaan van een domein
includeHet SPF-record van een ander domein insluiten
allAlle (overige) hosts

De vier mogelijke qualifiers zijn:

De standaard (default) qualifier is + (Pass). Wanneer geen qualifier aan een mechanisme zoals ip4 wordt toegevoegd, staat dit dus gelijk aan +ip4.

Door bovenstaande mechanisms en qualifiers met elkaar te combineren, kunnen regels opgesteld worden. Een voorbeeld:

v=spf1 a mx -all

Deze regel, waarin "a" en "mx" gelijk staan aan "+a" en "+mx", bepaalt dat de (mail)servers die in de DNS van deze domeinnaam als A- of MX-record voorkomen, toestemming hebben om namens dit domein e-mail te verzenden (Pass). De "-all" parameter geeft we dat andere servers geen toestemming hebben (Fail). Deze vinden we altijd aan de rechterzijde van de regel, omdat hij alle servers aanduidt die niet aan de eerdere parameters voldoen.

Zonder voor "a" of "mx" verdere waarden op te geven, wordt ervan uitgegaan dat het de A- en MX-record(s) zijn van de domeinnaam waarvan we het SPF-record bekijken. We kunnen de waarden echter ook als volgt expliciet maken, of de mechanisms aan de records van andere domeinen koppelen:

v=spf1 a:domeinnaam1.nl mx:domeinnaam2.nl -all

Een SPF-record opstellen

Voordat je een SPF-record kunt gaan opstellen, moet je precies weten welke (mail)servers namens de domeinnaam e-mailberichten versturen. Dat kan een eigen webserver mailserver zijn, maar ook een SMTP-server van een internetprovider of e-mail marketing dienstverlener. Indien je ze niet (allemaal) kunt achterhalen, is het niet verstandig om de Fail-operator te gebruiken in combinatie met het "all"-mechanisme. SoftFail (~) is dan een geschikter alternatief.

De eenvoudigste manier om te achterhalen welke servers en bijbehorende IP-adressen gebruikt worden voor het verzenden van een e-mail vanaf je domeinnaam, is het naar jezelf (laten) versturen van een e-mailbericht, via je website, de SMTP-server van je hosting- en/of internetprovider, een webmail-interface, en eventuele andere kanalen waarlangs e-mails worden verzonden. Vervolgens inspecteer je de berichtheaders, lettende op de "Received"-header. Hier staat het server- of IP-adres van de verzendende mailserver, dat je vervolgens in de parameters van je SPF-record kunt verwerken.

Combineer dan één voor één, van links naar rechts, de serveradressen met de bijbehorende mechanismen en qualifiers, en eindig met het "all"-mechanisme om aan te geven hoe strict gereageerd moet worden op e-mailberichten niet afkomstig van de inbegrepen mailservers. Nog een paar voorbeelden:

v=spf1 ip4:192.168.0.1/16 -all

Hier wordt bepaald dat e-mail alleen verzonden mag worden vanaf de IP-adressen 192.168.0.1 tot en met 192.168.255.255.

Deel je een web- en/of mailserver met meerdere van je domeinnamen, dan kun je bijvoorbeeld alle gebruikt mailservers configureren voor één (hoofd)domein, en hier in de SPF-records van de andere domeinen naar verwijzen middels het include-mechanisme. Wijzigingen in het SPF-record van het hoofddomein (domein1.nl) worden dan automatisch verwerkt bij de andere domeinen (domein2.nl). Het SPF-record voor domein2.nl wordt dan:

v=spf1 include:domeinnaam1.nl ~all

Zodra je alle parameters in je SPF-record verwerkt hebt, sla je de volledige regel op in een TXT-record in de DNS-instellingen van je domeinnaam. Sommige nameservers ondersteunen ter aanvulling op TXT ook een expliciet SPF-veld. Gezien de beperkte ondersteuning is het echter verstandig om je SPF-record tenminste in een TXT-veld op te nemen, en eventueel daarnaast ook in een SPF-veld, indien beschikbaar.

Zodra een SPF-record is opgeslagen, kun je deze eventueel controleren op geldigheid bij MxToolBox. Webmailproviders zoals Google Mail, evenals vele anti-spam filters, tonen de resultaten van een SPF-controle in de berichtheaders, en bieden op die manier ook inzicht in de geldigheid en het resultaat van de ingestelde regels. Zie ook de SPF Record Wizard van Microsoft, waarmee SPF-regels via een interface samengesteld kunnen worden.