E-mailbeveiliging met SPF, DKIM en DMARC
Leer hoe je je domein beschermt tegen e-mailspoofing met SPF-, DKIM- en DMARC-records. Stapsgewijze handleiding voor dashboard- en API-configuratie op DNScale.
E-mailspoofing stelt aanvallers in staat berichten te versturen die afkomstig lijken te zijn van jouw domein. Zonder goede authenticatie kan iedereen een e-mail sturen die beweert van ceo@jouwdomein.com te komen. SPF, DKIM en DMARC zijn DNS-gebaseerde standaarden die ontvangende mailservers helpen legitieme e-mails te verifiëren.
Wat je leert
- Hoe SPF geautoriseerde mailservers declareert
- Hoe DKIM e-mails cryptografisch ondertekent
- Hoe DMARC beleid definieert voor mislukte authenticatie
- Het instellen van alle drie via het DNScale-dashboard en de API
- Het testen en valideren van je configuratie
SPF (Sender Policy Framework)
Wat SPF doet
SPF laat je specificeren welke IP-adressen en mailservers e-mail mogen versturen voor je domein. Ontvangende servers controleren je SPF-record om te verifiëren dat de afzender geautoriseerd is.
SPF-recordsyntax
Een SPF-record is een TXT-record op je domeinapex:
v=spf1 [mechanisms] [qualifier]all| Component | Beschrijving |
|---|---|
v=spf1 | Versie-identifier (verplicht) |
include:domain | Sta servers toe die geautoriseerd zijn door het SPF van een ander domein |
a | Sta het IP van het A-record van het domein toe |
mx | Sta de MX-servers van het domein toe |
ip4:x.x.x.x | Sta een specifiek IPv4-adres of -bereik toe |
ip6:x::x | Sta een specifiek IPv6-adres of -bereik toe |
~all | Soft fail voor ongeautoriseerde afzenders |
-all | Hard fail voor ongeautoriseerde afzenders |
Veelvoorkomende SPF-voorbeelden
Google Workspace:
v=spf1 include:_spf.google.com ~allMicrosoft 365:
v=spf1 include:spf.protection.outlook.com ~allMeerdere providers:
v=spf1 include:_spf.google.com include:spf.protection.outlook.com ~allEigen mailserver:
v=spf1 ip4:203.0.113.5 mx ~allSPF best practices
- Begin met
~all(soft fail), ga over naar-allna testen - Blijf onder 10 DNS-lookups (SPF-limiet)
- Neem alle verzendbronnen op: transactionele e-mail, marketingplatforms, enz.
DKIM (DomainKeys Identified Mail)
Wat DKIM doet
DKIM voegt een digitale handtekening toe aan uitgaande e-mails. Je mailserver ondertekent elke e-mail met een privésleutel en je publiceert de bijbehorende publieke sleutel in DNS. Ontvangende servers gebruiken deze publieke sleutel om de handtekening te verifiëren, wat bewijst dat de e-mail niet is gewijzigd en van een geautoriseerde afzender komt.
Hoe DKIM werkt
- Je mailserver genereert een cryptografische handtekening met een privésleutel
- De handtekening wordt toegevoegd aan de headers van de e-mail
- Ontvangende servers zoeken je DKIM-publieke sleutel op in DNS
- Ze verifiëren dat de handtekening overeenkomt met de e-mailinhoud
- Als geldig, slaagt de e-mail voor DKIM-authenticatie
DKIM-recordsyntax
Een DKIM-record is een TXT-record op selector._domainkey.jouwdomein.com:
selector._domainkey.jouwdomein.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCS..."| Tag | Beschrijving |
|---|---|
v=DKIM1 | Versie-identifier |
k=rsa | Sleuteltype (meestal RSA) |
p=... | Publieke sleutel (base64-gecodeerd) |
t=s | (Optioneel) Strikte modus - exacte domeinovereenkomst vereist |
t=y | (Optioneel) Testmodus |
DKIM-selectors
De selector is een naam die identificeert welke sleutel moet worden gebruikt. Dit maakt het volgende mogelijk:
- Sleutelrotatie zonder downtime
- Verschillende sleutels voor verschillende maildiensten
- Meerdere sleutels tegelijkertijd actief
Veelvoorkomende selectorpatronen:
googlevoor Google Workspaceselector1,selector2voor Microsoft 365k1,k2,k3voor aangepaste configuratiesmailjet,sendgridvoor diensten van derden
Je DKIM-sleutels verkrijgen
DKIM-sleutels worden gegenereerd door je e-mailprovider. Hier vind je ze:
Google Workspace:
- Admin Console → Apps → Google Workspace → Gmail
- E-mail authenticeren → Nieuw record genereren
- Kopieer de TXT-recordwaarde
Microsoft 365:
- Microsoft 365 Defender → E-mail & samenwerking → Beleidsregels
- DKIM → Selecteer domein → DKIM-sleutels aanmaken
- Kopieer beide selector1- en selector2-records
Diensten van derden (SendGrid, Mailjet, enz.):
- Controleer het dashboard van je provider voor DNS-instellingen
- Ze leveren de selectornaam en publieke sleutel
DKIM-recordvoorbeelden
Google Workspace:
google._domainkey.jouwdomein.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."Microsoft 365:
selector1._domainkey.jouwdomein.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNA..."
selector2._domainkey.jouwdomein.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNA..."Aangepast/derden:
mail._domainkey.jouwdomein.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3..."DKIM best practices
- Gebruik 2048-bit sleutels - 1024-bit sleutels zijn steeds kwetsbaarder
- Roteer sleutels periodiek - Minstens jaarlijks voor de veiligheid
- Houd privésleutels veilig - Stel ze nooit bloot in DNS of logs
- Gebruik unieke selectors - Verschillende selectors voor elke dienst
- Test voor het afdwingen van DMARC - Zorg dat DKIM slaagt voor
p=reject
DMARC (Domain-based Message Authentication)
Wat DMARC doet
DMARC bouwt voort op SPF (en DKIM) om het volgende te bieden:
- Een beleid dat ontvangers vertelt wat te doen met mislukte e-mails
- Rapportage zodat je authenticatieresultaten kunt monitoren
DMARC-recordsyntax
Een DMARC-record is een TXT-record op _dmarc.jouwdomein.com:
v=DMARC1; p=policy; [optionele tags]Verplichte tags:
| Tag | Beschrijving |
|---|---|
v=DMARC1 | Versie-identifier |
p=none|quarantine|reject | Beleid voor mislukte e-mails |
Optionele tags:
| Tag | Beschrijving |
|---|---|
rua=mailto:adres | Bestemming voor samenvattende rapporten |
ruf=mailto:adres | Bestemming voor forensische rapporten |
pct=100 | Percentage waarop beleid wordt toegepast (standaard 100) |
sp=policy | Subdomeinbeleid |
DMARC-beleidsopties
| Beleid | Actie | Wanneer te gebruiken |
|---|---|---|
p=none | Alleen monitoren | Initiële configuratie |
p=quarantine | Naar spam sturen | Tussentijds |
p=reject | Volledig blokkeren | Volledige bescherming |
DMARC-voorbeelden
Monitormodus:
v=DMARC1; p=none; rua=mailto:dmarc-reports@jouwdomein.comQuarantainemodus:
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@jouwdomein.com; pct=100Afwijsmodus:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@jouwdomein.comAanbevolen uitrol
- Week 1-2:
p=noneom te monitoren - Week 3-4: Rapporten beoordelen, problemen oplossen
- Week 5-6:
p=quarantinemetpct=25 - Week 7-8: Verhoog naar
pct=100 - Week 9+: Overgaan naar
p=reject
Configuratie via het DNScale-dashboard
SPF-record aanmaken
- Log in op dnscale.eu
- Selecteer je domein
- Klik op Add Record
- Configureer:
- Name: Laat leeg (apex)
- Type: TXT
- Content:
v=spf1 include:_spf.google.com ~all - TTL: 3600
- Klik op Create Record
DKIM-record aanmaken
- Haal je DKIM-publieke sleutel op bij je e-mailprovider (zie "Je DKIM-sleutels verkrijgen" hierboven)
- Klik op Add Record
- Configureer:
- Name:
google._domainkey(of de selector van je provider) - Type: TXT
- Content:
v=DKIM1; k=rsa; p=MIIBIjANBgkq...(je publieke sleutel) - TTL: 3600
- Name:
- Klik op Create Record
Opmerking: Voor Microsoft 365 moet je twee records aanmaken (selector1 en selector2).
DMARC-record aanmaken
- Klik op Add Record
- Configureer:
- Name:
_dmarc - Type: TXT
- Content:
v=DMARC1; p=none; rua=mailto:dmarc@jouwdomein.com - TTL: 3600
- Name:
- Klik op Create Record
Configuratie via de DNScale API
Authenticatie
export DNSCALE_API_KEY="your-api-key"Zone-ID ophalen
curl -s "https://api.dnscale.eu/v1/zones" \
-H "Authorization: Bearer $DNSCALE_API_KEY" | jq '.data.zones[] | {id, name}'SPF-record aanmaken
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "@",
"type": "TXT",
"content": "v=spf1 include:_spf.google.com ~all",
"ttl": 3600
}'DKIM-record aanmaken
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "google._domainkey",
"type": "TXT",
"content": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
"ttl": 3600
}'Vervang google._domainkey door je selector en de publieke sleutel door je daadwerkelijke DKIM-sleutel.
DMARC-record aanmaken
curl -X POST "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "_dmarc",
"type": "TXT",
"content": "v=DMARC1; p=none; rua=mailto:dmarc@jouwdomein.com",
"ttl": 3600
}'Records verifiëren
curl -s "https://api.dnscale.eu/v1/zones/{zone_id}/records" \
-H "Authorization: Bearer $DNSCALE_API_KEY" | jq '.data.records[] | select(.type == "TXT")'Testen en validatie
Online tools
- MXToolbox SPF Check
- MXToolbox DKIM Check
- MXToolbox DMARC Check
- DMARC Analyzer
- Mail Tester - Stuur een test-e-mail om alle authenticatie te controleren
Opdrachtregel
# SPF controleren
dig TXT jouwdomein.com +short
# DKIM controleren (vervang 'google' door je selector)
dig TXT google._domainkey.jouwdomein.com +short
# DMARC controleren
dig TXT _dmarc.jouwdomein.com +shortEen test-e-mail versturen
De beste manier om alles te verifiëren is een test-e-mail te sturen en de headers te controleren:
- Stuur een e-mail naar een Gmail-account
- Open de e-mail → Klik op de drie puntjes → "Origineel weergeven"
- Zoek naar:
spf=passdkim=passdmarc=pass
Samenvatting
| Record | Naam | Type | Voorbeeld |
|---|---|---|---|
| SPF | @ | TXT | v=spf1 include:_spf.google.com ~all |
| DKIM | selector._domainkey | TXT | v=DKIM1; k=rsa; p=MIIBIjAN... |
| DMARC | _dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@example.com |
Hoe ze samenwerken:
- SPF verifieert dat de verzendende server geautoriseerd is
- DKIM verifieert dat de e-mailinhoud niet is gewijzigd
- DMARC vertelt ontvangers wat te doen wanneer SPF of DKIM mislukt
Aanbevolen implementatievolgorde:
- Stel eerst SPF in (het eenvoudigst)
- Configureer DKIM met je e-mailprovider
- Voeg DMARC toe in monitormodus (
p=none) - Beoordeel rapporten, los problemen op
- Verscherp DMARC geleidelijk (
p=quarantine→p=reject)