Waarom e-mail dit überhaupt nodig heeft
Hier is de ongemakkelijke waarheid over e-mail: het is begin jaren tachtig ontworpen voor een klein netwerk van mensen die elkaar vertrouwden. Standaard kan iedereen een mail sturen die zegt dat hij van [email protected] komt. Er zit niets in het basisprotocol dat dat tegenhoudt.
SPF, DKIM en DMARC zijn later toegevoegd om dat op te lossen. Samen laten ze de ontvangende kant, zoals Gmail, Outlook of Yahoo, één vraag beantwoorden: komt deze mail echt van het domein waar hij zegt vandaan te komen? Is het antwoord nee, dan gaat de mail naar spam of wordt hij geweigerd. En als je eigen domein ze niet heeft ingesteld, kunnen je echte mails als nep worden behandeld.
Een snelle vergelijking helpt:
- SPF is de gastenlijst: welke servers mogen e-mail versturen namens jouw domein.
- DKIM is het lakzegel: een handtekening die bewijst dat de mail onderweg niet is aangepast.
- DMARC zijn de instructies voor de uitsmijter: wat er moet gebeuren als een mail de controles niet doorstaat, en wie dat te horen krijgt.
SPF: de gastenlijst
SPF (Sender Policy Framework) is één regel tekst die je publiceert in de DNS van je domein. Er staan de servers en diensten in die namens jou e-mail mogen versturen. Als Gmail een mail van jouw domein ontvangt, zoekt het die lijst op en controleert het of de verzendende server erop staat.
Een typisch SPF-record ziet er zo uit:
v=spf1 include:_spf.google.com include:sendgrid.net ~allVan links naar rechts gelezen:
v=spf1: ‘dit is een SPF-record’.include:_spf.google.com: Google Workspace mag namens mij mailen.include:sendgrid.net: SendGrid ook (bijvoorbeeld voor de mails van mijn app).~all: al het andere ben ik waarschijnlijk niet, dus behandel het met argwaan. (-allbetekent ‘dit ben ik zeker niet, weiger het’.)
Er geldt ook een limiet van 10 DNS-lookups binnen één SPF-record. Elke include: telt mee, en de includes daarbinnen ook. Gebruik je veel diensten, dan kun je die limiet ongemerkt overschrijden, en dan faalt SPF voor iedereen.
DKIM: het lakzegel
SPF controleert waar een mail vandaan kwam. DKIM (DomainKeys Identified Mail) controleert of er onderweg niet met de mail zelf is geknoeid. Je e-maildienst ondertekent elk uitgaand bericht met een privésleutel die alleen hij kent. De bijbehorende publieke sleutel publiceer jij in je DNS. De ontvangende server gebruikt die publieke sleutel om de handtekening te controleren.
Heeft iemand de mail onderweg veranderd, al is het maar één woord in de tekst, dan klopt de handtekening niet meer. Net als het lakzegel op een ouderwetse brief: is het zegel verbroken, dan weet je dat iemand hem heeft opengemaakt.
Een DKIM-record wordt gepubliceerd onder een speciale naam, bijvoorbeeld google._domainkey.yourdomain.com, en de waarde ziet er ongeveer zo uit:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1...Het goede nieuws: dit schrijf je nooit zelf. Je e-mailprovider genereert het en jij kopieert het gewoon naar je DNS. Het woord vóór ._domainkey (hier google) heet de selector. Daarmee kun je meerdere sleutels hebben, één per dienst.
DMARC: de instructies voor de uitsmijter
SPF en DKIM geven de ontvangende server feiten. DMARC (Domain-based Message Authentication, Reporting and Conformance) vertelt hem wat hij met die feiten moet doen. Het voegt ook één belangrijke regel toe, alignment genoemd: het domein dat voor SPF of DKIM slaagt, moet overeenkomen met het domein dat de lezer echt in de ‘Van’-regel ziet. Zonder die regel zou een oplichter voor SPF kunnen slagen met zijn eigen domein en ondertussen het jouwe laten zien.
Een DMARC-record staat op _dmarc.yourdomain.com en ziet er zo uit:
v=DMARC1; p=none; rua=mailto:[email protected]p=none: alleen meekijken, nog niets blokkeren. Perfect om mee te beginnen.p=quarantine: mails die zakken naar spam sturen.p=reject: mails die zakken helemaal weigeren. De sterkste bescherming.rua=mailto:...: waar ontvangers je dagelijkse samenvattende rapporten naartoe moeten sturen.
Die rapporten zijn de verborgen parel. Ze laten je elke server zien die e-mail verstuurt met jouw domein, inclusief diensten die je was vergeten en iedereen die zich als jou probeert voor te doen.
Stap voor stap instellen
Stel dat myshop.com van jou is, je Google Workspace gebruikt voor je mailbox en een dienst als SendGrid of Mailgun voor orderbevestigingen. Dit is de volgorde die ik zou aanhouden:
- Maak een lijst van alles wat mailt namens jouw domein: je mailboxprovider, je website of app, je nieuwsbrieftool, je helpdesk, je factuursoftware. Dit is de stap die mensen overslaan, en precies de stap die later de meeste problemen oplevert.
- Maak één SPF-record aan in je DNS (een TXT-record op
myshop.com) waarin ze allemaal staan, eindigend op~all. - Zet DKIM aan in elke dienst. Elke dienst geeft je een record om in je DNS te plakken. Klik daarna in die dienst op ‘verifiëren’ of ‘start authenticating’.
- Voeg een DMARC-record met
p=nonetoe, met een adres voor de rapporten, op_dmarc.myshop.com. - Wacht een à twee weken en lees de rapporten. Los alles op wat legitiem is maar toch zakt.
- Scherp het beleid aan naar
p=quarantine, en later naarp=reject, zodra je zeker weet dat al je echte mail slaagt.
Zo controleer je ze bij elke mail die je ontvangt
Je hebt er geen tools voor nodig. Je e-mailapp laat de resultaten al zien:
- Gmail: open de mail, klik op de drie puntjes en dan op Origineel weergeven. Bovenaan zie je regels als
SPF: PASS,DKIM: PASSenDMARC: PASS. - Outlook: open het bericht, ga naar Beeld en dan Berichtdetails weergeven (of Berichtbron), en zoek naar de header
Authentication-Results. - Apple Mail: Weergave, dan Bericht, dan Alle headers.
Een echte header ziet er ongeveer zo uit:
Authentication-Results: mx.google.com;
dkim=pass header.d=myshop.com;
spf=pass smtp.mailfrom=myshop.com;
dmarc=pass (p=QUARANTINE) header.from=myshop.comDrie keer geslaagd en de domeinen kloppen: die mail is echt. Zie je fail, of komen de domeinen niet overeen met de afzender die je ziet, wees dan voorzichtig. Dat is een van de alarmsignalen die ik behandel in een phishingmail herkennen.
Stel je je eigen domein in? Een snelle manier om te testen is een mail sturen naar een tijdelijke inbox en naar een Gmail-adres, en dan de headers van de Gmail-kopie bekijken. Dat kost je twee minuten en je ziet precies wat de buitenwereld ziet.
Veelvoorkomende problemen en snelle oplossingen
- ‘SPF: softfail’ of ‘neutral’: de server die de mail verstuurde, staat niet in je SPF-record. Voeg de dienst toe met de
include:die hij je geeft. - ‘SPF permerror’: meestal twee SPF-records, of meer dan 10 lookups. Voeg ze samen tot één record en haal diensten weg die je niet meer gebruikt.
- ‘DKIM: fail’ na het aanpassen van een sjabloon: iets heeft de mail herschreven nadat hij was ondertekend (sommige doorstuurdiensten en automatische e-mailvoetteksten doen dat). Verstuur direct en test opnieuw.
- DMARC faalt terwijl SPF slaagt: alignment. SPF slaagde voor het domein van je verzenddienst, niet voor het jouwe. Zet in die dienst DKIM aan met je eigen domein, of stel een eigen return-path-domein in.
- Mails gaan nog steeds naar spam terwijl alles slaagt: authenticatie bewijst wie je bent, niet dat mensen je mail willen ontvangen. Inhoud, verzendreputatie en het aantal klachten tellen ook mee. Daar heb ik meer over geschreven in waarom app-mails in de spam belanden.
Heb je ze echt alle drie nodig?
Ja. Sinds 2024 eisen Gmail en Yahoo SPF, DKIM en een DMARC-record van iedereen die grotere hoeveelheden e-mail verstuurt, en ook kleine afzenders komen veel beter aan met alle drie op orde. Belangrijker nog: DMARC met p=reject is wat oplichters tegenhoudt om in jouw naam nepmails naar je eigen klanten te sturen.
Het instellen kost je een middag. Daarna beschermt het je domein in stilte, elke dag weer. Heb je een domein en schuif je dit al een tijdje voor je uit? Dan is dit je teken. Begin vandaag met p=none. Aanscherpen kan later altijd nog.