Publica DMARC en modo de supervisión
Añade un único registro TXT en _dmarc del dominio de tu dirección From. p=none no cambia la entrega, y rua pide a los receptores informes agregados que muestran qué servidores envían correo en nombre de tu dominio y si pasan SPF o DKIM con alineación. Si los informes van a otro dominio, ese dominio debe publicar un registro que los autorice.
; 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"
Pasa a quarantine y luego a reject
Cuando los informes muestren que todas las fuentes legítimas pasan, cambia a p=quarantine, vuelve a revisar los informes y después pasa a p=reject. RFC 7489 ofrecía pct para aplicar la política a una parte del correo que falla. RFC 9989, que la sustituye, elimina pct porque los valores parciales se aplicaban de forma desigual, y añade t=y, que pide a los receptores aplicar un nivel por debajo de la política publicada. Los receptores que aún siguen RFC 7489 ignoran t=y, así que añade también pct=0 durante la prueba: les pide el mismo tratamiento un nivel por debajo. Quita ambas etiquetas para aplicar la política.
; 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 solo registro SPF por dominio
Un nombre solo puede tener un registro TXT que empiece por v=spf1; con dos, SPF falla con un error permanente. Reúne todos los remitentes en un solo registro. include: consulta el registro propio de un proveedor, y redirect= delega toda la política en otro dominio, algo útil cuando varios dominios comparten una política. redirect= se ignora si el registro también contiene un término 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"
No superes las diez consultas DNS
SPF admite como máximo diez términos que requieren una consulta DNS, contando todos los include anidados: include, a, mx, ptr, exists y redirect. Uno más y SPF falla con un error permanente. Quita los include de servicios que ya no usas, sustituye a y mx por rangos ip4 o ip6 que controles, elimina ptr y lleva a un remitente masivo a un subdominio con su propio registro SPF. Copiar las direcciones de un proveedor en tu registro también ahorra consultas, pero la copia queda desfasada cuando el proveedor las cambia. Este verificador solo cuenta los términos del nivel superior.
; 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"
Elige ~all o -all con cuidado
Termina el registro con ~all (softfail) o -all (fail), nunca con +all, que deja pasar a cualquier servidor. -all es la señal más estricta, pero un receptor que comprueba SPF pronto puede rechazar entonces correo reenviado antes de que DMARC vea su firma DKIM válida. Con una política DMARC aplicada, ~all deja la decisión a DMARC. Un dominio que no envía correo puede publicar 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"
Alinea DKIM con tu dominio From
DMARC pasa cuando SPF o DKIM pasan para un dominio alineado con la dirección From. Muchos servicios firman por defecto con su propio dominio, lo que pasa DKIM pero no la alineación. Activa en cada servicio la firma con tu propio dominio, para que la firma lleve d=example.com, y publica la clave o el CNAME que te dé el servicio bajo su selector. La alineación relajada, la predeterminada, acepta cualquier subdominio del mismo dominio organizativo; adkim=s y aspf=s exigen una coincidencia exacta.
; 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; ...
Un cambio de DNS puede tardar lo que dure el TTL del registro anterior en llegar a todos los resolvers. Después vuelve a ejecutar el verificador con el dominio de tu dirección From, porque lee exactamente el nombre de host que introduces.