Publier DMARC en mode surveillance
Ajoutez un seul enregistrement TXT sur _dmarc du domaine de votre adresse From. p=none ne change rien à la distribution, et rua demande aux destinataires des rapports agrégés qui montrent quels serveurs envoient des e-mails au nom de votre domaine et s’ils passent SPF ou DKIM avec alignement. Si les rapports partent vers un autre domaine, celui-ci doit publier un enregistrement qui les autorise.
; 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"
Passer à quarantine, puis à reject
Quand les rapports montrent que toutes les sources légitimes passent, passez à p=quarantine, surveillez de nouveau les rapports, puis passez à p=reject. La RFC 7489 proposait pct pour appliquer la politique à une partie du courrier en échec. La RFC 9989, qui la remplace, supprime pct parce que les valeurs partielles étaient appliquées de façon inégale, et ajoute t=y, qui demande aux destinataires d’appliquer un niveau en dessous de la politique publiée. Les destinataires qui suivent encore la RFC 7489 ignorent t=y : ajoutez donc aussi pct=0 pendant le test, ce qui leur demande le même traitement d’un niveau inférieur. Retirez les deux balises pour appliquer la politique.
; 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"
Un seul enregistrement SPF par domaine
Un nom ne peut porter qu’un seul enregistrement TXT commençant par v=spf1 ; avec deux, SPF échoue avec une erreur permanente. Regroupez tous les expéditeurs dans un seul enregistrement. include: consulte l’enregistrement propre d’un fournisseur, et redirect= confie toute la politique à un autre domaine, ce qui est utile quand plusieurs domaines partagent une politique. redirect= est ignoré si l’enregistrement contient aussi un terme all.
; 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"
Pas plus de dix requêtes DNS
SPF autorise au plus dix termes qui demandent une requête DNS, en comptant chaque include imbriqué : include, a, mx, ptr, exists et redirect. Un de plus et SPF échoue avec une erreur permanente. Retirez les include des services que vous n’utilisez plus, remplacez a et mx par des plages ip4 ou ip6 que vous contrôlez, supprimez ptr et déplacez un expéditeur de masse vers un sous-domaine doté de son propre enregistrement SPF. Copier les adresses d’un fournisseur dans votre enregistrement économise aussi des requêtes, mais la copie devient obsolète quand le fournisseur les change. Ce vérificateur ne compte que les termes du niveau supérieur.
; 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"
Choisir ~all ou -all avec soin
Terminez l’enregistrement par ~all (softfail) ou -all (fail), jamais par +all, qui laisse passer n’importe quel serveur. -all est le signal le plus strict, mais un destinataire qui vérifie SPF tôt peut alors rejeter un e-mail transféré avant que DMARC ne voie sa signature DKIM valide. Avec une politique DMARC appliquée, ~all laisse la décision à DMARC. Un domaine qui n’envoie pas d’e-mails peut publier v=spf1 -all.
; 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"
Aligner DKIM sur votre domaine From
DMARC passe quand SPF ou DKIM passe pour un domaine aligné sur l’adresse From. Beaucoup de services signent par défaut avec leur propre domaine, ce qui passe DKIM mais pas l’alignement. Activez dans chaque service la signature avec votre propre domaine, pour que la signature porte d=example.com, et publiez la clé ou le CNAME que le service vous indique sous son sélecteur. L’alignement souple, celui par défaut, accepte tout sous-domaine du même domaine organisationnel ; adkim=s et aspf=s exigent une correspondance exacte.
; 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; ...
Une modification DNS peut mettre la durée du TTL de l’ancien enregistrement à atteindre tous les résolveurs. Relancez ensuite le vérificateur sur le domaine de votre adresse From, car il lit exactement le nom d’hôte saisi.