From internet
Mailstandaarden van internet.nl: SPF, DKIM, DMARC, STARTTLS, DANE. Anti-spoofing, mailserver-beveiliging, e-mailbeveiliging.
npx claudepluginhub developer-overheid-nl/skills-marketplace --plugin internetThis skill is limited to using the following tools:
> **CONCEPT — Let op:** Deze skill is geen officieel product van internet.nl. De beschrijvingen zijn informatieve samenvattingen — niet de officiële standaarden zelf. De testcriteria op [internet.nl](https://internet.nl) en de definities op [forumstandaardisatie.nl](https://www.forumstandaardisatie.nl/open-standaarden) zijn altijd leidend. Overheidsorganisaties die generatieve AI inzetten diene...
Monitors deployed URLs for regressions after deploys, merges, or upgrades by checking HTTP status, console errors, network failures, performance (LCP/CLS/INP), content, and API health.
Share bugs, ideas, or general feedback.
CONCEPT — Let op: Deze skill is geen officieel product van internet.nl. De beschrijvingen zijn informatieve samenvattingen — niet de officiële standaarden zelf. De testcriteria op internet.nl en de definities op forumstandaardisatie.nl zijn altijd leidend. Overheidsorganisaties die generatieve AI inzetten dienen te voldoen aan het Overheidsbreed standpunt voor de inzet van generatieve AI. Zie onze verantwoording en DISCLAIMER.md.
Gebruik deze skill wanneer een gebruiker vraagt over mailstandaarden die internet.nl test,
zoals SPF, DKIM, DMARC, STARTTLS of DANE. Genereer correcte DNS-records en diagnostische
commando's. Verwijs naar /inet-toolbox voor stap-voor-stap implementatiegidsen.
Internet.nl test e-maildomeinen op de volgende standaarden. Alle standaarden staan op de pas-toe-of-leg-uit-lijst van Forum Standaardisatie.
Deze drie standaarden werken samen om e-mailspoofing tegen te gaan:
Afzender -> SPF controle (IP-adres) ----+
-> DKIM controle (handtekening) +-> DMARC beleid -> leveren / weigeren / quarantaine
|
+-> Rapportage naar domeineigenaar
Wat: Een DNS TXT-record dat specificeert welke mailservers e-mail mogen versturen namens een domein.
Wat test internet.nl:
-all (fail) of ~all (softfail)DNS-record formaat:
example.nl. IN TXT "v=spf1 mx a:mail.example.nl ip4:192.0.2.0/24 ip6:2001:db8::/32 include:_spf.google.com -all"
Mechanismen:
| Mechanisme | Betekenis |
|---|---|
mx | MX-records van het domein zijn geautoriseerd |
a | A/AAAA-record van het domein is geautoriseerd |
a:host | A/AAAA van specifieke host |
ip4:range | IPv4-adres of -bereik |
ip6:range | IPv6-adres of -bereik |
include:domein | Neem SPF-beleid van ander domein over |
redirect=domein | Gebruik SPF-record van ander domein |
Qualifiers:
| Qualifier | Betekenis | Aanbevolen |
|---|---|---|
+ (default) | Pass | Impliciet; gebruik -all als eindregel |
- | Fail (hard) | Ja, als eindregel (-all) |
~ | Softfail | Acceptabel |
? | Neutral | Nee |
Testen:
# SPF-record opvragen
dig TXT example.nl +short | grep "v=spf1"
# SPF-validatie simuleren (aantal lookups tellen)
dig TXT example.nl +short
# Tel elke include, a, mx, redirect als 1 lookup (max 10)
Wat: Een mechanisme dat e-mail voorziet van een cryptografische handtekening via een DNS-publicsleutel. De ontvangende mailserver verifieert de handtekening.
Wat test internet.nl:
Let op: Internet.nl controleert alleen of een DKIM-record bestaat; de sleutellengte wordt niet getest. Best practice is minimaal 2048-bit RSA.
DNS-record formaat:
selector._domainkey.example.nl. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhki..."
Selector: Een naam die de verzendende server meestuurt in de DKIM-Signature header
(bijv. google, selector1, default). Hiermee kan de ontvanger de juiste publieke
sleutel vinden in DNS.
Sleutel genereren:
# RSA 2048-bit sleutelpaar genereren
openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem
# Publieke sleutel voor DNS (zonder headers, op 1 regel)
openssl rsa -in dkim_private.pem -pubout -outform DER | base64 -w0
Testen:
# DKIM-sleutel opvragen (vervang 'selector' door de echte selector)
dig TXT selector._domainkey.example.nl +short
# Veelgebruikte selectors proberen
for sel in google default selector1 selector2 dkim mail; do
echo "=== $sel ==="
dig TXT "${sel}._domainkey.example.nl" +short
done
Wat: Een DNS TXT-record dat aangeeft wat ontvangers moeten doen als SPF en/of DKIM niet slagen, en waar rapportages naartoe moeten.
Wat test internet.nl:
_dmarc.example.nlquarantine of reject (niet none voor productie)Implementatiepad: Start met
p=noneom rapportages te verzamelen, schakel daarna over naarquarantineen uiteindelijkreject. Internet.nl scoort alleenquarantineofrejectals voldoende.
DNS-record formaat:
_dmarc.example.nl. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.nl; ruf=mailto:dmarc-forensic@example.nl; adkim=s; aspf=s; pct=100"
Parameters:
| Tag | Betekenis | Waarden |
|---|---|---|
p | Beleid | none / quarantine / reject |
sp | Beleid voor subdomeinen | none / quarantine / reject |
rua | Aggregaat rapportage-adres | mailto:adres@example.nl |
ruf | Forensisch rapportage-adres | mailto:adres@example.nl |
adkim | DKIM alignment | r (relaxed) / s (strict) |
aspf | SPF alignment | r (relaxed) / s (strict) |
pct | Percentage berichten waarop beleid wordt toegepast | 0-100 |
Gefaseerde uitrol:
; Fase 1: Monitor (alleen rapportage, geen actie)
_dmarc.example.nl. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.nl"
; Fase 2: Quarantine op 10% (test impact)
_dmarc.example.nl. IN TXT "v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@example.nl"
; Fase 3: Quarantine op 100%
_dmarc.example.nl. IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@example.nl"
; Fase 4: Reject (volledige bescherming)
_dmarc.example.nl. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.nl; adkim=s; aspf=s"
Testen:
# DMARC-record opvragen
dig TXT _dmarc.example.nl +short
Wat: STARTTLS versleutelt SMTP-verkeer tussen mailservers.
Wat test internet.nl:
Testen:
# MX-records opvragen
dig MX example.nl +short
# STARTTLS testen op MX-server
openssl s_client -connect mx.example.nl:25 -starttls smtp </dev/null 2>/dev/null | \
grep -E '(Protocol|Cipher|Verify)'
Wat: DANE koppelt TLS-certificaten aan DNS via TLSA-records, beveiligd met DNSSEC. Hiermee wordt de vertrouwensketen versterkt: niet alleen CA's, maar ook DNS verifieert het certificaat.
Vereist: DNSSEC moet actief zijn op het domein.
Wat test internet.nl:
DNS-record formaat:
_25._tcp.mx.example.nl. IN TLSA 3 1 1 <sha256-hash-van-publieke-sleutel>
TLSA-parameters:
| Veld | Waarde | Betekenis |
|---|---|---|
| Certificate Usage | 3 | DANE-EE (End Entity, aanbevolen voor mail) |
| Selector | 1 | SubjectPublicKeyInfo (publieke sleutel) |
| Matching Type | 1 | SHA-256 hash |
TLSA-hash genereren:
# Hash van het certificaat van de mailserver
openssl s_client -connect mx.example.nl:25 -starttls smtp </dev/null 2>/dev/null | \
openssl x509 -pubkey -noout | \
openssl pkey -pubin -outform DER | \
openssl dgst -sha256 -binary | xxd -p -c 32
Testen:
# TLSA-record opvragen
dig TLSA _25._tcp.mx.example.nl +short
# Controleer DNSSEC op MX-domein
dig MX example.nl +dnssec +short
| Repository | Beschrijving | Licentie |
|---|---|---|
| Internet.nl | Testsuite broncode | Apache-2.0 (code), CC-BY-4.0 (vertalingen) |
| toolbox-wiki | Implementatiegidsen | CC-BY-4.0 |
| Probleem | Oorzaak | Oplossing |
|---|---|---|
SPF permerror | Meer dan 10 DNS-lookups | Verminder include-verwijzingen, gebruik ip4/ip6 direct |
| DKIM-verificatie faalt | Verkeerde selector of verlopen sleutel | Controleer selector in e-mailheaders, vergelijk met DNS |
DMARC p=none is onvoldoende | Fase 1 monitoring nog actief | Verschuif naar p=quarantine of p=reject |
| STARTTLS niet aangeboden | Mailserver niet geconfigureerd | Schakel TLS in op de mailserver |
| DANE TLSA mismatch | Certificaat vernieuwd zonder TLSA-update | Werk TLSA-record bij met hash van nieuw certificaat |
Zie reference.md voor server-specifieke configuratie (Postfix, Exchange), key rotation-procedures en DMARC-rapportage-analyse.