SPF, DKIM en DMARCBij de oorspronkelijke opzet van mail protocollen is er nooit aan misbruik gedacht. Iedereen kan elke willekeurige naam als afzender invullen. Als het jou niet lukt is dat omdat sommige mailcliënten dat niet toelaten. Het mailprotocol laat het wel toe. Daarom zijn er later protocollen bedacht die de authenticiteit van de mail moeten garanderen. De protocollen die op dit moment in gebruik zijn, zijn SPF, DKIM en DMARC.
Zie ook:
mailcontrole met spf, dkim en dmarc uitgelegd
SPFBij een SPF beveiliging moet een domeineigenaar in zijn DNS een TXT record opnemen die aangeeft welke IP adressen namens dat domein mail mogen versturen. Een mailserver die mail ontvangt kijkt eerst of er een SPF instelling voor dat domein bestaat en zo ja, controleert hij of hij verbonden is met een IP adres uit dat lijstje.
Een TXT record ziet er als volgt uit:
“v=spf1 a:xxx.synology.me mx ip4:xxx ipv6:xxx include:xxx -all”
Het record begint altijd met "
v=spf1” om aan geven dat de spf info in dit TXT record staat. De toegestane IP adressen kun je vervolgens op verschillende manieren definiëren.
- IPv4: of IPv6: Dit zijn expliciete IP adressen of reeksen van IP adressen
- A: Dit is een domeinnaam en de mailserver haalt zelf de adressen uit het A of AAA record
- MX: De mailserver haalt het ip adres uit het MX record
- include: De mailserver haalt het hele spf record op dat het domein achter de include publiceert. (als die er niet is, wordt er een fout gegenereerd)
Bovenstaande definities van IP adressen kunnen gecombineerd worden, of weggelaten worden. De volgorde is niet belangrijk. In de meeste gevallen is alleen een MX voldoende. Als je een fixed IP adres hebt versnelt het de boel als je die ook invult omdat er dan geen verdere dns lookup nodig is.
Het spf record eindigt altijd met “
all”. Voor de “
all” komt een symbool die aangeeft wat te doen als er geen match met een IP adres gevonden is.
+all : Toch goedkeuren. (niet erg zinvol, behalve in testsituaties)
-all : Een fail. Een mailserver mag deze mail verwerpen. Mail Server doet dat, maar veel mailservers gooien hem niet weg, maart plaatsen de mail in de spam folder.
~all : Een soft fail. Dit is ook een fail, maar je geeft ermee aan dat hij minder streng aangepakt mag worden. Veel mailservers gebruiken dit alleen in de bepaling van de spamscore. Ik zou hier mee beginnen om geen mail te verliezen door configuratiefouten.
Zie voor meer uitgebreidere uitleg over de spf syntax b.v. hier:
dmarcian.com Of
open-spf.orgSPF en RelayserverHet gebruik van een relayserver geeft problemen met het spf record omdat de ontvangende mailserver niet jouw IP adres ziet, maar het IP adres van de relayserver. Je moet dus dat IP adres in je spf record opnemen. Omdat zo’n adres onverwacht kan veranderen, kun je kijken of die relayserver niet zelf een spf record publiceert. Zo ja, dan neem je dat record op via een “
include:”.
Omdat ik zelf Ziggo gebruik, neem ik dat even als voorbeeld. Het domein “
ziggo.nl” moet zelf ook een spf publiceren voor alle mensen met een ziggo.nl adres. Je voegt dus “
include:ziggo.nl” toe aan je eigen spf record om op die manier het spf record van ziggo op te nemen in je eigen record. Op die manier weet je zeker dat als er IP adressen veranderen van ziggo mailservers, deze ook in je eigen spf record meegenomen worden.
Ziggo gebruikt zelf ook een heleboel “
include:” opdrachten van firma’s die in hun naam mail versturen. Al die domeinen zouden dan ook mail in jouw naam kunnen sturen. Nu heeft de ziggo smpt server ook een eigen spf record, waar alleen de IP adressen van hun eigen smpt servers op staan. Je kunt dus ook “
include:smtp.ziggo.nl” opnemen.
Je zult zelf moeten uitzoeken of een domein een spf record publiceert. Dat doe je via het
nslookup commando. Opvragen van het ziggo record doe je b.v. met:
nslookup -q=txt ziggo.nl
Het leerzaamst is om zelf diverse spf records van andere domeinen te bekijken via het nslookup commando.
Het is raadzaam om altijd een spf record te publiceren, ook al zet je er alleen "
v=spf1 +all” in. Van veel mailservers krijgt de mail direct al een hoge spamscore als er geen spf record bestaat.
Er zijn veel sites waar je een gepubliceerd spf record kunt valideren op syntax. Twee die een actief record controleren zijn
dmarcanalyzer.com en
mxtoolbox.com. Een die een record vóór deployment test is
vamsoft.comWil je het naadje van de kous weten, dan moet je de
RCF 7208 documentatie bestuderen.
Tot zover heb je nog niets in Mail Server zelf in hoeven te stellen. Anderen kunnen wel al jouw mail valideren. Als je zelf de ontvangen mail wilt valideren, moet je dit aanzetten bij
SPF verificatie inschakelen. Mail Server zal mails met een fail dan weigeren. Wil je ook mail met een soft fail weigeren, dan moet je dit apart aankruisen. Bedenk echter dat er relatief veel firma’s zijn die hun mailbeleid niet in orde hebben. De instelling om ook bij een soft-fail te weigeren zal meer mail bouncen dan je misschien verwacht. Maar ook als je dit uit laat, zal een soft fail nog steeds meetellen in de spamscore berekening van spamassassin.
DKIMDe DKIM beveiliging kun je het beste zien als een markering van echtheid die in de mail achtergelaten wordt. Bij het versturen van de mail wordt er een checksum over de belangrijkste onderdelen van de mail uitgerekend. Vervolgens wordt deze checksum gecodeerd met een privé sleutel die alleen op de mailserver staat. In de mail staat ook waar de openbare sleutel binnen het domein van de ondertekenaar gevonden kan worden. Omdat alleen de ondertekenaar de privé sleutel bezit, weet je zeker dat de mail van domeinnaam afkomstig is en dat de mail ook niet tussendoor veranderd is.
Om DKIM te kunnen gebruiken kiezen we in mailserver om een nieuwe openbare sleutel te genereren. (En de bijbehorende privé sleutel, die je als gebruiker niet hoeft te weten) Verder moet je een selector definiëren. Dit mag elke willekeurige tekst zijn.
Vervolgens moet je de openbare sleutel in je DNS record publiceren. Daarvoor wordt een subdomein met de naam “
_domainkey” in je domein gebruikt. Zie dit als een sleutelhanger waar je later meerdere sleutels in kunt plaatsen. Binnen dit subdomein gebruik je vervolgens een nieuw subdomein met de naam van de sleutel (De tekst die je bij selector ingevuld hebt.) In het DNS systeem van de Synology DNS server ziet het er als volgt uit:
(Bij een andere hosting provider zal dit er anders uit zien.)
Je kunt de twee geneste subdomeinen dus in één stap aanmaken. Als inhoud van het TXT record vul je vervolgens in:
"v=DKIM1; k=rsa; h=sha256; p=
Daarna kopieer je de openbare sleutel die Mail Server aangemaakt heeft en plakt hem zonder spatie achter het
p= symbool. Tenslotte sluit je af met een dubbele quote. Dit sla je nu op binnen het DNS systeem van je domeinnaam.
Als je meerdere mailservers hebt die jouw mail kunnen versturen, moet je elke server een eigen selector geven en aan in je “
_domainkey” subdomein toevoegen. Dat is minder werk dan de privé key op te zoeken en naar die andere mailserver te kopiëren. Als je een nieuwe openbare sleutel aanmaakt is het verstandig om die niet in de oude selector te zetten, maar hiervoor een nieuwe selector aan te maken en de oude selector nor enige tijd actief te laten. Op die manier is reeds verstuurde mail nog steeds controleerbaar met de bijbehorende sleutel uit die oude selector.
Als je meerdere domeinnamen gebruikt moet je het
_domainkey subdomein voor elk domein gebruiken en overal dezelfde selector plaatsen.
off-topic: Grote bedrijven die het versturen van mail uitbesteden en toch een dkim ondertekening op hun eigen naam willen hebben, maken een CNAME record aan voor de domainkey, die naar de domainkey van het versturende bedrijf wijst. Op die manier kan de verzender ondertekenen met de naam van de opdrachtgever zonder dat de opdrachtgever de publieke sleutel zelf hoeft te publiceren.
DMARCBij de normale SPF beveiliging wordt gekeken naar het SPF record van de verzendende mailserver, die anders kan zijn dan de afzender die de ontvanger ziet. Dit is zo gedaan om mail via een externe partij te kunnen laten versturen. Bij DKIM kan elke mailserver ook zijn ondertekening in de mail zetten. Als de mail via verschillende servers loopt, kunnen zelfs meerdere partijen de mail ondertekenen.
DMARC combineert de SPF en de DKIM controle op een strengere manier. Dit protocol eist dat de controle altijd gedaan moet worden via de domeinnaam die de ontvanger als afzender ziet. Voor Mail Server betekent dit, dat je eigenlijk niets hoeft in te stellen, zolang je DKIM maar aan hebt staan. Het kruisje bij DMARC betekend alleen dat ook ontvangen mail via dit protocol gecontroleerd moet worden.
Toch zijn we niet klaar, want je moet de buitenwereld wel laten weten dat jij wilt dat je mail gecontroleerd wordt. Dat doe je door een TXT record in een “
_dmarc” subdomein van je domein aan te maken met de volgende tekst”
"v=DMARC1; p=none; rua=mailto:administrator@xxx.synology.me”
Het mailadres mag je ook weglaten, maar als je dat invult krijg je dagelijks mailtjes met resultaten over verstuurde mail. Dat maakt het voor jezelf beter te controleren of alles naar behoren werkt. Als je na een aantal weken denkt dat alles goed werkt, vervang je het woord “
none” door “
quarantaine” of “
reject”. Zolang hij op
none staat, zal de ontvanger nog niets met die mail doen bij een fail. Op het moment dat hij op
reject staat, mag de ontvanger de mail gewoon weggooien bij een fail. Hoewel de meeste mailservers het in de spamfolder zullen zetten.
Zie voor nadere info over wat je nog meer kunt instellen op
dmarcian.com of op
dmarc.orgTenslotte: Op
mail-tester.com kun je een uniek mailadres ophalen om een daadwerkelijk mailtje te sturen ter controle op 'spammyness'.
ADSPDit is de Author Domain Signing Practices. Het is een voorloper van DMARC. Het is een aanvulling op DKIM waarbij je via je domein kunt aangeven dat al je mail ook daarwerkelijk DKIM ondertekend moet zijn. Lees meer hierover op:
powerdmarc.com op op
dkim.orgHet komt er op neer dat je het volgende TXT record opneemt in je DNS.
_adsp._domainkey.yourdomain.com. IN TXT "dkim=xxxxxx"
Vervang hier "yourdomain.com" door je eigen domein en "xxxxx" door "none", "all" of "discardable".
unknown: doe niets. Dit is hetzelfde als geen record definieren
all: eis dat alle mail van een DKIM handtekening is voorzien.
discardable: gooi alle mail direct weg als er geen of geen geldige DKIM hantekening in zit.