DMARC im Überwachungsmodus veröffentlichen
Lege einen einzigen TXT-Eintrag unter _dmarc der Domain in deiner From-Adresse an. p=none ändert nichts an der Zustellung, und rua bittet Empfänger um Sammelberichte, die zeigen, welche Server Mails im Namen deiner Domain senden und ob sie SPF oder DKIM mit Alignment bestehen. Gehen die Berichte an eine andere Domain, muss diese einen Eintrag veröffentlichen, der sie autorisiert.
; DMARC record for example.com, monitoring only
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com"
; Only if rua points to another domain, for example rua=mailto:reports@example.net,
; example.net publishes:
example.com._report._dmarc.example.net. TXT "v=DMARC1"
Erst quarantine, dann reject
Wenn die Berichte zeigen, dass alle legitimen Quellen bestehen, wechsle zu p=quarantine, beobachte die Berichte erneut und gehe dann zu p=reject. RFC 7489 bot pct an, um die Richtlinie nur auf einen Teil der fehlschlagenden Mails anzuwenden. RFC 9989, das sie ersetzt, streicht pct, weil Teilwerte uneinheitlich angewendet wurden, und führt t=y ein, das Empfänger bittet, eine Stufe unter der veröffentlichten Richtlinie anzuwenden. Empfänger, die noch RFC 7489 folgen, ignorieren t=y. Setze deshalb während des Tests zusätzlich pct=0; das fordert dort dieselbe um eine Stufe mildere Behandlung an. Entferne beide Tags, um die Richtlinie durchzusetzen.
; Publish one version at a time, in this order, after p=none
; 1. Quarantine in test mode (t=y, plus pct=0 for RFC 7489 receivers), then in full
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; t=y; pct=0; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"
; 2. Reject in test mode, then in full
_dmarc.example.com. TXT "v=DMARC1; p=reject; t=y; pct=0; rua=mailto:dmarc-reports@example.com"
_dmarc.example.com. TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
Ein SPF-Eintrag pro Domain
Ein Name darf nur einen TXT-Eintrag tragen, der mit v=spf1 beginnt; bei zweien schlägt SPF mit einem permanenten Fehler fehl. Fasse alle Absender in einem Eintrag zusammen. include: prüft den eigenen Eintrag eines Anbieters, und redirect= übergibt die ganze Richtlinie an eine andere Domain, was hilft, wenn mehrere Domains eine Richtlinie teilen. redirect= wird ignoriert, wenn der Eintrag zusätzlich einen all-Term enthält.
; Before: two SPF records on one name (permerror)
example.com. TXT "v=spf1 include:_spf.mailhost.example ~all"
example.com. TXT "v=spf1 include:spf.newsletter.example ~all"
; After: one record
example.com. TXT "v=spf1 include:_spf.mailhost.example include:spf.newsletter.example ~all"
; Another domain that uses the same policy
example.org. TXT "v=spf1 redirect=example.com"
Höchstens zehn DNS-Abfragen
SPF erlaubt höchstens zehn Terme, die eine DNS-Abfrage brauchen, gezählt über alle verschachtelten include: include, a, mx, ptr, exists und redirect. Einer mehr, und SPF schlägt mit einem permanenten Fehler fehl. Entferne include für Dienste, die du nicht mehr nutzt, ersetze a und mx durch ip4- oder ip6-Bereiche, die du kontrollierst, streiche ptr und verlege einen Massenversender auf eine Subdomain mit eigenem SPF-Eintrag. Die Adressen eines Anbieters in deinen Eintrag zu kopieren spart ebenfalls Abfragen, doch die Kopie veraltet, sobald der Anbieter sie ändert. Dieser Checker zählt nur die Terme der obersten Ebene.
; One lookup each: include, a, mx, ptr, exists, redirect (plus every lookup inside an include)
; No lookup: ip4, ip6, all
; Before: 4 lookups in the top-level record alone
example.com. TXT "v=spf1 a mx include:_spf.mailhost.example include:spf.oldtool.example ~all"
; After: fixed address, unused service removed, bulk mail on its own subdomain
example.com. TXT "v=spf1 ip4:192.0.2.10 include:_spf.mailhost.example ~all"
news.example.com. TXT "v=spf1 include:spf.newsletter.example ~all"
~all oder -all mit Bedacht wählen
Beende den Eintrag mit ~all (softfail) oder -all (fail), nie mit +all, das jeden Server bestehen lässt. -all ist das strengere Signal, doch ein Empfänger, der SPF früh prüft, kann dann weitergeleitete Mails ablehnen, bevor DMARC ihre gültige DKIM-Signatur sieht. Mit einer durchgesetzten DMARC-Richtlinie überlässt ~all die Entscheidung DMARC. Eine Domain, die keine Mails sendet, kann v=spf1 -all veröffentlichen.
; Choose one ending for example.com, not both
example.com. TXT "v=spf1 include:_spf.mailhost.example ~all"
example.com. TXT "v=spf1 include:_spf.mailhost.example -all"
; A domain that sends no mail
example.net. TXT "v=spf1 -all"
DKIM an deiner From-Domain ausrichten
DMARC besteht, wenn SPF oder DKIM für eine Domain besteht, die zur From-Adresse passt (Alignment). Viele Dienste signieren standardmäßig mit ihrer eigenen Domain; das besteht DKIM, aber nicht das Alignment. Aktiviere in jedem Dienst die Signatur mit deiner eigenen Domain, sodass sie d=example.com trägt, und veröffentliche den Schlüssel oder CNAME, den dir der Dienst nennt, unter seinem Selektor. Relaxed Alignment, die Voreinstellung, akzeptiert jede Subdomain derselben Organisationsdomain; adkim=s und aspf=s verlangen eine exakte Übereinstimmung.
; Key for a sending service, selector s1: a CNAME or a TXT record, as the service says
s1._domainkey.example.com. CNAME s1.dkim.mailhost.example.
s1._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC..."
; Aligned signature in a delivered message: d= matches the From domain
From: news@example.com
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=s1; ...
Eine DNS-Änderung kann so lange wie die TTL des alten Eintrags brauchen, bis sie jeden Resolver erreicht. Führe den Checker danach erneut für die Domain deiner From-Adresse aus, denn er liest genau den eingegebenen Hostnamen.