Los informes agregados de DMARC son archivos XML que le envían los proveedores de buzones, normalmente una vez al día, y que listan todas las fuentes que enviaron correo afirmando ser su dominio y si pasaron SPF, DKIM y la alineación. Leerlos es la forma de encontrar a todos los remitentes legítimos, corregir los que fallan y descubrir quién le está suplantando, para poder pasar de p=none a p=reject sin bloquear correo real.
Empiece aquí. Esta guía supone que ya publica un registro DMARC. Si no es así, siga primero la guía para autenticar un dominio de envío y vuelva cuando empiecen a llegar los informes.
La versión corta
- Pida informes. Añada una dirección rua a su registro DMARC mientras la política sea p=none.
- Espere y recopile. Reúna de dos a cuatro semanas de informes, incluido cualquier envío mensual.
- Clasifique las fuentes. Marque cada IP de origen como legítima y alineada, legítima pero con fallos, o desconocida.
- Corrija lo que falla. Dé a cada servicio legítimo una firma DKIM o un Return-Path alineados.
- Aplique por etapas. Quarantine con un porcentaje bajo, auméntelo y luego pase a reject.
El registro DMARC que solicita informes
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; adkim=r; aspf=r"
| Etiqueta | Significado |
|---|---|
p | Política para el correo que falla: none (monitorear), quarantine o reject |
rua | Dónde enviar los informes agregados, como una o más direcciones mailto: |
adkim, aspf | Modo de alineación: r para relajado (puede coincidir un subdominio), s para estricto (coincidencia exacta) |
sp | Política para los subdominios si es distinta de p |
pct | Porcentaje del correo que falla al que se aplica la política |
Use un buzón dedicado. Los informes son numerosos y voluminosos. Envíelos a una dirección dedicada o a un servicio de procesamiento de informes, no a una persona.
Enviar informes a otro dominio
Si la dirección rua está en un dominio distinto del que se informa, ese otro dominio debe publicar un registro que lo permita. De lo contrario, los proveedores no enviarán informes. Para los informes sobre example.com que van a reports.example.net:
example.com._report._dmarc.reports.example.net. 3600 IN TXT "v=DMARC1"
Qué contiene un informe
Los informes llegan como archivo adjunto, normalmente comprimido en gzip o zip. Al abrir uno encontrará tres partes: información sobre quien envía el informe, la política que encontró el proveedor y una lista de filas, una por cada combinación de IP de origen y resultado.
<feedback>
<report_metadata>
<org_name>google.com</org_name>
<report_id>1234567890</report_id>
<date_range><begin>1759708800</begin><end>1759795199</end></date_range>
</report_metadata>
<policy_published>
<domain>example.com</domain><adkim>r</adkim><aspf>r</aspf><p>none</p><pct>100</pct>
</policy_published>
<record>
<row>
<source_ip>203.0.113.10</source_ip>
<count>1250</count>
<policy_evaluated><disposition>none</disposition><dkim>pass</dkim><spf>pass</spf></policy_evaluated>
</row>
<identifiers><header_from>example.com</header_from></identifiers>
<auth_results>
<dkim><domain>example.com</domain><selector>mail1</selector><result>pass</result></dkim>
<spf><domain>bounce.example.com</domain><result>pass</result></spf>
</auth_results>
</record>
</feedback>
| Campo | Qué le indica |
|---|---|
org_name | Qué proveedor de buzones envió el informe |
date_range | El período cubierto, como marcas de tiempo Unix |
policy_published | La política DMARC que vio el proveedor, para que pueda confirmar que su registro está activo |
source_ip y count | El servidor de envío y cuántos mensajes envió en el período |
policy_evaluated | El resultado que cuenta para DMARC: dkim y spf aquí significan pass o fail alineado |
auth_results | Los resultados sin procesar de SPF y DKIM y los dominios que autenticaron, que pueden diferir del dominio del From |
header_from | El dominio de la dirección From visible |
Dos resultados distintos. Dentro de policy_evaluated, pass significa que la comprobación pasó y estaba alineada. Dentro de auth_results, pass significa solo que la comprobación pasó para el dominio que usara. Una fuente puede pasar en auth_results y fallar en policy_evaluated. Esa diferencia es un problema de alineación.
Clasifique cada fuente en uno de tres grupos
| Grupo | Qué ve | Qué hacer |
|---|---|---|
| Legítima y alineada | Un servicio conocido, con DKIM o SPF alineado en policy_evaluated | Nada. Manténgalo así |
| Legítima pero con fallos | Un servicio conocido cuyo auth_results pasa pero cuyo policy_evaluated falla | Configure DKIM alineado o un Return-Path personalizado para ese servicio |
| Desconocida | Una IP que no reconoce, a menudo con muchos fallos | Investigue: un sistema olvidado, un reenviador o un suplantador. No la autorice hasta saber qué es |
Cómo identificar una fuente
- DNS inverso:
dig -x 203.0.113.10 +shortsuele nombrar al proveedor. - Dominios de autenticación: los dominios SPF y DKIM de auth_results suelen revelar el servicio.
- Su propio inventario: liste todas las herramientas que envían con su dominio: plataforma de marketing, helpdesk, CRM, sistema de facturación, formularios web, herramientas de RR. HH. y servidores.
- Volumen y patrón: un recuento pequeño y constante de un servicio conocido es normal; una ráfaga repentina desde una IP desconocida es sospechosa.
Resuma los informes con un script breve
Para una primera mirada a una carpeta de informes descomprimidos, este script totaliza los mensajes por IP de origen y resultado DMARC:
import glob
import xml.etree.ElementTree as ET
from collections import defaultdict
totals = defaultdict(int)
for path in glob.glob("reports/*.xml"):
for rec in ET.parse(path).getroot().iter("record"):
row = rec.find("row")
ip = row.findtext("source_ip")
ev = row.find("policy_evaluated")
key = (ip, ev.findtext("dkim"), ev.findtext("spf"))
totals[key] += int(row.findtext("count"))
for (ip, dkim, spf), n in sorted(totals.items(), key=lambda x: -x[1]):
print(f"{ip:18} dkim={dkim:5} spf={spf:5} messages={n}")
Corregir los fallos de alineación
| Patrón en el informe | Causa | Solución |
|---|---|---|
| SPF pasa, DMARC falla | SPF autenticó el dominio del proveedor, no el suyo | Use un Return-Path personalizado en su propio dominio |
| DKIM pasa, DMARC falla | La firma usa el dominio del proveedor en d= | Firme con su propio dominio: publique el selector DKIM de ese servicio |
| Ambos fallan para un servicio conocido | El servicio no está configurado para su dominio | Complete su autenticación de dominio |
| Falla solo a través de un reenviador | El reenvío rompió SPF, y DKIM fue alterado | Espere una pequeña cola. Asegúrese de que DKIM esté presente y firme el cuerpo |
| Falla en un subdominio | El subdominio no tiene registros propios | Publique SPF y DKIM para ese subdominio |
Pase a la aplicación de la política por etapas
Una vez que las fuentes legítimas estén alineadas y solo fallen las desconocidas, aumente la política gradualmente. Espere al menos una semana en cada etapa y lea los informes antes de avanzar.
| Etapa | Registro | Qué hace |
|---|---|---|
| 1 | p=none | Solo monitoreo. Recopila informes |
| 2 | p=quarantine; pct=10 | El correo que falla del 10 por ciento de los mensajes va a spam |
| 3 | p=quarantine; pct=50 | La mitad del correo que falla se pone en cuarentena |
| 4 | p=quarantine | Todo el correo que falla se pone en cuarentena |
| 5 | p=reject; pct=25 | Una cuarta parte del correo que falla se rechaza |
| 6 | p=reject | Todo el correo que falla se rechaza. Conserve la dirección rua |
No se detenga en p=none. Cumple los requisitos mínimos de Gmail, Yahoo y Outlook.com para remitentes masivos, pero no detiene la suplantación. Lo que protege a su dominio y a sus destinatarios es aplicar la política.
Siga monitoreando después de p=reject
- Revise semanalmente al principio y luego cada mes. Las herramientas nuevas que envíen con su dominio aparecerán como fallos.
- Añada un paso al proceso de incorporación: cualquier sistema nuevo que envíe correo con su dominio se autentica antes de entrar en producción.
- Proteja los dominios aparcados: publique p=reject y un registro SPF vacío en los dominios desde los que no envía.
- Vigile la preparación para BIMI: una política DMARC aplicada es un requisito previo si más adelante quiere que su logotipo aparezca en la bandeja de entrada.
¿Quiere una segunda opinión sobre sus informes? Envíenos un informe de muestra y la lista de servicios que envían con su dominio, y le ayudaremos a determinar qué corregir.
Lecturas adicionales y fuentes
Preguntas frecuentes
¿Qué es un informe agregado de DMARC?
Es un archivo XML, normalmente comprimido, que un proveedor de buzones envía a la dirección rua de su registro DMARC, por lo general una vez al día. Resume el correo que el proveedor vio como procedente de su dominio: la IP de envío, cuántos mensajes y si SPF, DKIM y DMARC pasaron. No contiene el contenido de los mensajes.
¿Por qué no recibo informes DMARC?
Compruebe que la dirección rua es correcta y está escrita con el prefijo mailto:, que el buzón acepta archivos adjuntos grandes y que ha esperado al menos un día. Si la dirección de informes está en otro dominio, ese dominio debe publicar un registro de autorización. No todos los proveedores envían informes, y los dominios pequeños pueden recibir pocos.
¿Cuál es la diferencia entre rua y ruf?
La etiqueta rua solicita informes agregados, que son resúmenes. La etiqueta ruf solicita informes forenses o de fallos sobre mensajes individuales que fallaron. La mayoría de los grandes proveedores no envían informes forenses, porque pueden contener datos personales, así que base su planificación en los informes agregados.
¿Puedo leer los informes DMARC sin una herramienta?
Sí para un puñado de archivos, porque son XML sin formato. Para cualquier cantidad mayor, use un servicio de procesamiento de informes o un script breve que totalice los resultados por fuente, ya que incluso un dominio modesto recibe decenas de informes al día.
¿Qué significa un fallo de alineación?
DMARC solo pasa cuando SPF o DKIM pasan y el dominio que autenticaron coincide con el dominio visible del From. Si una fuente pasa SPF para el dominio del proveedor de servicios pero su dominio del From es distinto, DMARC falla aunque SPF haya pasado. La solución es autenticar con su propio dominio, usando un Return-Path personalizado o una firma DKIM con su dominio.
¿Cuánto tiempo debo permanecer en p=none?
El suficiente para ver a todos los remitentes legítimos, lo que suele ser de dos a cuatro semanas y debe incluir un ciclo de fin de mes si envía correo mensual, como facturas. Permanecer en p=none para siempre no protege nada, así que fije una fecha para avanzar.
¿Qué hace la etiqueta pct?
La etiqueta pct aplica su política solo a un porcentaje de los mensajes que fallan, por ejemplo pct=25. Le permite desplegar quarantine o reject de forma gradual. La compatibilidad es común pero no universal, así que trátela como un control flexible y siga vigilando los informes.
¿p=reject romperá mi correo?
Bloqueará cualquier mensaje que falle DMARC, que es precisamente el objetivo. El correo legítimo solo se rompe cuando un remitente real no está autenticado y alineado. Por eso primero se recopilan informes, se corrigen todas las fuentes legítimas y se avanza por etapas.
¿Qué pasa con el correo reenviado y las listas de correo?
El reenvío suele romper SPF porque el reenviador no está en su registro, y las listas pueden modificar el mensaje y romper DKIM. Ayudan a los receptores a decidir una firma DKIM que sobreviva y los encabezados ARC que añade el reenviador. Espere una pequeña cola de fallos por reenvío incluso en una configuración sana.
¿Necesitan los subdominios su propio registro DMARC?
Un registro DMARC en su dominio principal también cubre los subdominios a menos que lo sobrescriba. La etiqueta sp fija una política para los subdominios, y un registro en un subdominio prevalece sobre ambos. Los subdominios sin uso son un objetivo de suplantación, así que una política estricta para ellos es una victoria rápida.