DNS, SPF, DKIM, DMARC: Por Qué Tu Correo Va a Spam (y Cómo Los Atacantes Se Hacen Pasar por Ti) Todo lo que necesitas saber sobre los tres protocolos que separan tu correo legítimo de la carpeta de spam — y que separan tu marca de ser usada por estafadores. Introducción Envías un correo importante al cliente.
Todo lo que necesitas saber sobre los tres protocolos que separan tu correo legítimo de la carpeta de spam — y que separan tu marca de ser usada por estafadores.
Envías un correo importante al cliente. Responde dos días después: "disculpa, fue a spam". Envías otro a un lead, y simplemente nunca llega. Y mientras tanto, alguien en internet está enviando correo haciéndose pasar por tu empresa, pidiendo transferencias a tus clientes, y solo lo descubres cuando el cliente llama para reclamar.
Bienvenido al mundo de la autenticación de correo. Un lugar donde tres siglas — SPF, DKIM y DMARC — deciden si existes digitalmente o no.
La buena noticia es que estos tres protocolos resuelven el 95% de los problemas de entregabilidad y de spoofing. La mala noticia es que la absoluta mayoría de los dominios en internet no tienen ni uno de ellos configurado correctamente. Y desde febrero de 2024, Google y Yahoo pasaron a exigir DMARC para remitentes que envían más de 5.000 correos por día.
El protocolo de correo (SMTP) fue creado en 1982 y no tenía ningún mecanismo de autenticación. Literalmente ninguno. Cualquier servidor puede enviar un correo diciendo ser de cualquier dirección.
Durante décadas esto funcionó porque internet era pequeño. Llegó el spam, llegó el phishing, llegó el fraude organizado. La solución no fue reescribir SMTP — fue agregar capas de autenticación por encima, usando DNS:
Los tres trabajan juntos. Solos, tienen agujeros. Combinados, forman defensa razonable.
La autenticación de correo no es "seguridad opcional". Es infraestructura básica. Sin ella: los correos legítimos van a spam, los atacantes pueden hacerse pasar por ti, y Google/Yahoo simplemente rechazan mucho del tráfico de quién no autentica.
Publicas en DNS una lista de servidores autorizados a enviar correo en nombre de tu dominio. El servidor de destino consulta esa lista y verifica si la IP de origen está autorizada.
Un único registro TXT:
empresa.com.br. IN TXT "v=spf1 ip4:200.150.100.10 include:_spf.google.com -all"
Desglosando:
v=spf1 — versiónip4:200.150.100.10 — autoriza esta IPinclude:_spf.google.com — autoriza IPs de Google Workspace-all — cualquier otra IP es rechazadaMecanismos comunes:
| Mecanismo | Qué hace | |---|---| | ip4:1.2.3.4 | IP específica | | ip4:1.2.3.0/24 | Rango de IPs | | a | IP del registro A | | mx | IPs de los MX | | include:dominio.com | Incluye SPF de otro dominio | | redirect=otro.com | Reemplaza con SPF de otro |
Calificadores:
| Sintaxis | Significado | |---|---| | +all | Acepta todo (NUNCA uses) | | -all | Rechaza todo lo que no está en la lista | | ~all | SoftFail — acepta pero marca | | ?all | Neutral (igual a no tener SPF) |
Solo Google Workspace:
"v=spf1 include:_spf.google.com -all"
Solo Microsoft 365:
"v=spf1 include:spf.protection.outlook.com -all"
Híbrido (M365 + servidor propio + marketing + transaccional):
"v=spf1 ip4:200.150.100.10 include:spf.protection.outlook.com include:_spf.mailgun.org include:sendgrid.net -all"
Límite de 10 lookups DNS. Cada include, a, mx, exists cuenta. ¿Lo superaste? SPF se quiebra con permerror y para muchos servidores eso equivale a fallar. El límite es recursivo — si incluyes el SPF de Google, y Google incluye otros, todos cuentan.
Se quiebra con reenvío. El correo reenviado viene de un servidor que no está en tu SPF. Falla.
No protege el "From:" visible. SPF verifica el MAIL FROM (sobre), no el From: que aparece para el usuario. El atacante puede pasar SPF perfectamente y mostrar From: ceo@tuempresa.com.br.
No tiene criptografía. Solo verifica IP. ¿Servidor autorizado comprometido? El atacante envía lo que quiera.
dig TXT empresa.com.br +short
# Herramientas:
# - mxtoolbox.com/spf.aspx
# - dmarcian.com/spf-survey/
# - kitterman.com/spf/validate.html
+all o ?all — anula la proteccióninclude apuntando a dominio inexistenteFirma digital criptográfica en cada correo enviado.
Garantiza autenticidad (vino realmente del dueño de la clave) e integridad (no fue alterado en el camino).
default._domainkey.empresa.com.br. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7VK..."
default.domainkey.empresa.com.br — formato [selector].domainkey.[dominio]v=DKIM1 — versiónk=rsa — algoritmop=... — clave pública en Base64El selector permite tener múltiples claves DKIM activas simultáneamente. Cada servicio usa su propio selector.
Google Workspace: Admin Console → Apps → Gmail → Authenticate email → Generate. Publica el registro que te da.
Microsoft 365: Defender → Email & collaboration → Threat policies → DKIM → activar (usa CNAMEs).
Mailgun, SendGrid, Mailchimp, Amazon SES: todos tienen wizards.
Servidor propio (Postfix con OpenDKIM):
sudo apt install opendkim opendkim-tools
sudo mkdir -p /etc/opendkim/keys/empresa.com.br
cd /etc/opendkim/keys/empresa.com.br
sudo opendkim-genkey -s mail -d empresa.com.br -b 2048
sudo chown opendkim:opendkim mail.private
cat mail.txt # registro DNS para publicar
Header DKIM-Signature agregado a cada correo:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=empresa.com.br; s=default;
h=from:to:subject:date:message-id;
bh=BASE64_HASH_DEL_CUERPO;
b=BASE64_FIRMA
d= — dominio que firmós= — selectorh= — headers firmadosbh= — hash del cuerpob= — firmaSe quiebra con modificación en el camino. Las listas de correo que agregan pie de página invalidan la firma.
Clave débil. Usa 2048 bits como mínimo. RSA 1024 se considera quebrado.
Rotación inexistente. Las buenas prácticas dicen rotar cada 6-12 meses. Casi nadie lo hace.
No protege el From: visible por sí solo — el d= puede ser diferente del From:. Ahí es donde entra DMARC.
dig TXT default._domainkey.empresa.com.br +short
Mejor forma: envía un correo a check-auth@verifier.port25.com y recibe un informe completo.
SPF y DKIM verifican cosas técnicas pero no imponen decisiones. Y ninguno de los dos verifica si el From: visible coincide con el dominio autenticado.
DMARC resuelve:
From: visible coincida con dominio autenticado_dmarc.empresa.com.br. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@empresa.com.br; ruf=mailto:dmarc-forensic@empresa.com.br; fo=1; adkim=s; aspf=s; pct=100"
| Parámetro | Función | |---|---| | v=DMARC1 | Versión | | p= | Política: none, quarantine, reject | | sp= | Política para subdominios | | rua= | Correo para reportes agregados (XML diario) | | ruf= | Correo para reportes forenses | | pct= | % del tráfico que aplica la política | | adkim= | Alineación DKIM: r o s | | aspf= | Alineación SPF: r o s | | fo= | Cuándo generar reportes forenses |
p=none — modo monitoreo. No hace nada, pero envía reportes. Comienza siempre por aquí.
p=quarantine — cuarentena. Los correos que fallan van a spam.
p=reject — rechazo. Los correos que fallan son rechazados en la entrega. El objetivo final.
Relajado (r): los dominios organizacionales coinciden. email.empresa.com.br se alinea con empresa.com.br. Estándar.
Estricto (s): tiene que ser exactamente igual.
Para pasar DMARC, el correo necesita:
MAIL FROM alinearse con el From:, Od= alinearse con el From:Cuando defines rua=, recibes XMLs diarios de Google, Microsoft, Yahoo, etc. con:
Descubres cosas como:
Los XMLs son horribles de leer. Usa servicios que hacen parsing: Postmark DMARC Monitoring (gratuito), Dmarcian, EasyDMARC, Valimail, OnDMARC.
1. Configura SPF y DKIM primero.
2. Comienza con p=none:
"v=DMARC1; p=none; rua=mailto:dmarc@empresa.com.br; fo=1"
3. Monitorea por 2-4 semanas con Dmarcian/Postmark.
4. Migra a p=quarantine con pct=10:
"v=DMARC1; p=quarantine; pct=10; rua=mailto:dmarc@empresa.com.br; fo=1"
5. Aumenta el pct= gradualmente — 25%, 50%, 75%, 100%.
6. Pasa a p=reject:
"v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc@empresa.com.br; ruf=mailto:dmarc-forensic@empresa.com.br; fo=1; adkim=s; aspf=s"
El viaje toma 1-3 meses para hacer con calma. No saltes a reject directamente a menos que quieras pasar la noche explicando al CEO por qué los correos se detuvieron.
p=reject directamentesp= para subdominiosEl atacante envía un correo diciendo From: ceo@empresa.com.br. Sin SPF/DKIM/DMARC, llega normalmente.
Defensa: SPF con -all + DMARC con p=reject.
empresa.com.br tiene DMARC. Pero vendas.empresa.com.br no. El atacante usa el subdominio.
Defensa: siempre sp=reject en el DMARC del principal.
El atacante registra empressa.com.br (dos s), empresa.com.co, empresa-soporte.com. Técnicamente es suyo, pasa todos los checks, parece el tuyo.
Defensa: monitoreo de dominios similares (DomainTools, DNSTwist), capacitación, BIMI, herramientas de protección de marca.
El atacante usa su propio correo pero coloca "Ceo Empresa" en el nombre de visualización. El cliente móvil solo muestra "Ceo Empresa".
Defensa: capacitación + filtros que detectan spoofing de nombre de visualización.
El atacante obtiene acceso a la cuenta legítima (phishing, contraseña filtrada). Todo pasa todos los checks porque es realmente legítimo.
Defensa: MFA, monitoreo de comportamiento anómalo.
El atacante compromete a tu proveedor. Envía correos del servidor real del proveedor, frecuentemente respondiendo threads existentes.
Defensa: vigilancia, capacitación, verificación fuera del canal para solicitudes financieras.
"HSTS del correo". Garantiza entrega via TLS criptografado, impide degradación. La configuración tiene dos partes: registro DNS + página HTTPS en mta-sts.empresa.com.br.
Reportes sobre fallos de TLS en la entrega.
_smtp._tls.empresa.com.br. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@empresa.com.br"
Logo verificado de tu marca apareciendo en la bandeja de entrada del destinatario. Requiere DMARC con p=quarantine o p=reject + logo SVG + idealmente VMC (certificado de pago).
Diferencial visual enorme de credibilidad.
Resuelve el problema de reenvío/listas que quiebran SPF/DKIM. Los servidores intermediarios atestiguan la autenticación original. Implementado automáticamente por los grandes proveedores.
Protege contra falsificación del propio DNS. Firma criptográficamente los registros. Capa extra esencial.
En orden de frecuencia:
Análisis completo:
Terminal:
dig TXT empresa.com.br +short | grep spf
dig TXT default._domainkey.empresa.com.br +short
dig TXT _dmarc.empresa.com.br +short
dig MX empresa.com.br +short
dig -x 200.150.100.10 +short
Headers de correo recibido: Gmail → tres puntitos → "Mostrar original". Busca Authentication-Results::
Authentication-Results: mx.google.com;
spf=pass smtp.mailfrom=sender@empresa.com.br;
dkim=pass header.i=@empresa.com.br header.s=default;
dmarc=pass (p=REJECT) header.from=empresa.com.br
pass en los tres es lo que quieres.
-all, debajo de 10 lookupsp=none — comienza monitoreandop=quarantine gradualmentep=rejectsp=reject para subdominiosLa autenticación de correo parece complicada hasta que lo haces una vez. SPF, DKIM y DMARC juntos resuelven el 95% de los problemas de entregabilidad e impiden el 95% de los ataques de spoofing directo.
No hacer esto, en 2026, es negligencia. Google y Yahoo ya están rechazando masivamente a quién no autentica. En algunos años, enviar correo sin SPF/DKIM/DMARC será tan impensable como modem discado.
Y lo mejor: no es caro. Los tres protocolos son gratuitos, la documentación es abundante, las herramientas de monitoreo tienen tier gratuito, el resultado es inmediato.
El SentinelHub barre exactamente esto: monitorea SPF, DKIM, DMARC, MTA-STS, DNSSEC y todos los registros DNS críticos de tu dominio. Cuando algo cambia — alguien agrega un servicio nuevo y sobrepasa el límite de SPF, alguien elimina accidentalmente el registro DMARC, alguien olvida renovar una clave DKIM — te enteras. En portugués.
Cliente que recibe tu correo en la carpeta de spam es cliente que pierdes confianza. Cliente que recibe correo de estafador haciéndose pasar por ti es cliente que pierdes.
¿Te pareció útil? Comparte con tu equipo de marketing y con el sysadmin que cuida del servidor de correo. Especialmente si todavía envían correos marcados como "[SPAM]" a la propia bandeja.