En otras oportunidades hablamos de spam, envios de mails masivos y otros tantos, pero se nos pasó un tema interezante que puso de moda (y exige) las empresas Hotmail y Gmail, hablamos de la Seguridad en Servidores de Emails implementando SPF – DMARC y DKIM. No es spooiler pero si vas hasta el final….. hay yapa!
SPF, DKIM y DMARC: qué son, para qué sirven y buenas prácticas
El correo electrónico sigue siendo uno de los principales vectores de ataque: phishing, spoofing, fraude CEO, malware, etc. Tal vez pensas que si el usuario entra a tu servidor de correo electrónico con usuario y contraseña ya alcanza, pero lo sierto es que NO!. Para combatir esto males actuales y no tanto…existen tres mecanismos fundamentales de autenticación:
- SPF
- DKIM
- DMARC
Aunque suelen mencionarse juntos, no hacen lo mismo. Se complementan. Vamos a ver sobre ellos:
SPF (Sender Policy Framework)
SPF es un «Registro DNS» que indica qué servidores están autorizados a enviar correo en nombre de tu dominio. Cuando otro servidor recibe un email que proviene de tu servidor, verifica si la IP que lo envió está autorizada en el registro SPF del dominio del remitente. Te lo acabo de contar! entonces el registro DNS ¿Dónde lo deberias tener configurado? En un registro TXT de tu servidor DNS (si es un hosting seguramente tendras una forma de administrar esos DNS)
Ejemplo de registro SPF:
v=spf1 ip4:200.58.120.10 include:_spf.google.com -all
¿Que significa cada parte del registro SPF?
v=spf1 → versión
ip4: → IP permitida
include: → autoriza a otro proveedor
-all → rechazar todo lo que no esté listado
¿Qué problema resuelve SPF?
Evita que cualquiera pueda enviar correos falsificando tu dominio desde cualquier servidor. Un dato historico pero no menos importante es que para el año 2000 el 50% del trafico de correo electrónico recibido era SPAM. El señor Men Weng Wong viendo que SMTP (protocolo de salida) dejaba enviar correos poniendo en el FROM cualquier remitente se puso a trabajar y salio la version SPF clasica en el 2003, o sea tres años despues, pero peor aun! se hizo de uso estandar y oficial recien en el 2013 con la RFC 7208 (estamos en el 2026 y hay proveedores poco serios que aun no lo implementan).
Limitaciones de SPF
- Solo valida el servidor que envía.
- No protege el contenido.
- Puede romperse con reenvíos.
- No impide el phishing con dominios similares (ej: micr0soft.com).
DKIM – DomainKeys Identified Mail
DKIM agrega una firma criptográfica al mensaje. Esta clave le permite al servidor receptor puede validar que:
- El mensaje no fue modificado.
- Realmente fue firmado por el dominio que dice enviarlo.
¿Cómo funciona DKIM?
El servidor de origen que implementa dmarc necesita 2 claves (una publica y otra privada). Luego el servidor que envia el correo lo firma con una clave privada y en el DNS del dominio dejará la clave pública para control. Cuando el mail llega al destino, el servidor receptor valida la firma.
¿Dónde se configura?
En DNS, con un registro TXT similar a:
mail._domainkey.midominio.com
El valor del registro es:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3…numero largo segun la seguridad utilizada.
v=DKIM1 → versión
k=rsa: → Clave
p: → Clave pública calculada
¿Qué problema resuelve DKIM?
- Garantiza integridad del mensaje.
- Reduce falsificación.
- Mejora reputación de envío.
IMPORTANTE: A partir del 5 de mayo se hizo de caracter paulatino y obligatorio la implementación de dkim para llegar con correos hacia OUTLOOK, HOTMAIL, LIVE (Microsoft). Al día de la fecha es mucho más estricto (ni mejor ni peor) hotmail que gmail.
Limitaciones
- No define qué hacer si falla.
- No impide spoofing por sí solo.
DMARC – Domain-based Message Authentication, Reporting & Conformance
DMARC es la política que une SPF y DKIM y le dice al servidor receptor qué hacer si la autenticación falla. Además, permite recibir reportes.
¿Dónde se configura?
Requiere un registro en el DNS con nombre similar a:
_dmarc.midominio.com
El valor:
v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; pct=100; adkim=s; aspf=s
v=DMARC1 → versión
En la P vamos a poner la «politica que se usará»:
p=none → solo monitoreo
p=quarantine → enviar a spam
p=reject → rechazar
rua=mailto:correo → En el mail que configuras dentro de RUA te llegarán reportes diarios de las empresas con una serie de información que al parecer no a muchos le importa pero si queres ser un Sysadmin Sr tenes que saberlo:
- Qué IP envió correo usando tu dominio
- Si pasó SPF
- Si pasó DKIM
- Si cumplió alineación
- Qué política se aplicó
- Cantidad de mensajes
Recorda que «No incluyen contenido del email»
¿Cómo llegan? Basicamente es un mail (en ingles siempre) que dice en su interior una sarasa de presentación pero lo que importa es el adjunto que generalmente es un archivo XML, previamente comprimidos (zip o gzip) y enviados normalmente cada 24 horas. Si estas haciendo las cosas bien vas a tener una cuenta especifica para recibir estos reportes por que no vas a querer llenar tu casilla de correos.
¿Para qué sirven?
- Detectar spoofing
- Ver servicios legítimos que olvidaste autorizar
- Ver si tu SPF está mal armado
- Analizar reputación
¿Qué problema resuelve dmarc?
- Define acción ante fallas.
- Permite monitorear intentos de spoofing.
- Mejora entregabilidad.
- Es obligatorio para grandes volúmenes de correo
- Permite nada mas y nada menos que contar con un volumen de información de empresas serias que trabajan para CUIDAR TU SERVIDOR y que estes atento para hacer las cosas bien.
ruf=mailto:correo Este valor lamentablemente ya no es muy usado y sirve para recibir INFORMES FORENSES.
¿Qué envían al RUF? Copias parciales o completas de emails que fallaron DMARC que podian incluir:
- Cabeceras completas
- Parte del cuerpo del mensaje
- Información técnica detallada del fallo
Importante: Muchos proveedores grandes ya no envían reportes forenses por temas de privacidad.
Google → no envía forense completo
Microsoft → muy limitado
Yahoo → casi inexistente
Hoy en día, rua es mucho más útil que ruf.
pct=100 Esto es el porcentaje de mensajes al que se le aplica la política DMARC. Cuando tu politica es NONE no sirve para nada, pero si ya estas en CUARENTENA podes ir subiendo de 25% 50% 100% lo cual es una excelente practica.
adkim=r Adkim define qué tan estricta debe ser la coincidencia entre:
- El dominio que firma DKIM
- El dominio visible en el campo From:
el valor r es de relaxed o relajado, y el valor s es de stric o estricto.
Supongamos que el correo viene de From: [email protected] y la firma dkim dice mail.midominio.com si esta en r va a pasar, pero si esta en s no ya que si somos strictos la firma debe ser midominio.com. Importante: Algo que confunde aca es el nombre del servidor por ejemplo smtp.midominio.com (no estamos hablando de esto) sino del from y de la key! AUN MAS IMPORTANTE! hay empresas y entes de gobierno que se dividen por ejemplo organizacion.midominio.com organizacion2.midominio.com organizacion3.midominio.com en donde organizacion y organizacion2 son administradas en una sala de servidores y organizacion3 esta adminsitrada por otras personas. Cuando hay dependencia de personal es muy dificil administrada por lo cual reglas claras son muy necesarias! Si no las tenes es un buen momento de empezar!
Entonces….. te animas a dejar en comentarios (si sos syadmin o si te animas simplemente) una respuesta a: Si administro varios servidores correos que estan dentro de mi arquitectura pero tambien alojados en la nube, que o cuales de los servidores deberian firmar con dkim para darle seguridad, control y gobernanza al correo electrónico? -> si lo pudiste reponder es por que en el laburo te han llamado mucho mucho jajaajajaa
Como les dije esta entrada tiene una YAPITA para que «no te de lo mismo» preguntar estas cosas en alguna IA asi no mas… te voy a enseñar Como montar un Reporteador de dmarc para que tengas información clara y consisa de todo lo que te pasa!
Claramente lo vamos a realizar con docker:
Luego vas a crear una carpeta donde comenzar a trabajar por ejemplo /home/usuario/srv/ y ahi vamos a ejecutar este comando:
git clone https://github.com/patschi/parsedmarc-dockerized.git /home/usuario/srv/parsedmarc-dockerized/
Una vez que clonamos el repositorio vamos a hacer una copia del archivo de configuración:
cp /home/usuario/srv/parsedmarc-dockerized/data/conf/parsedmarc/config.sample.ini \
/home/usuario/srv/parsedmarc-dockerized/data/conf/parsedmarc/config.ini
Ahora vamos a editar el archivo:
nano /home/usuario/srv/parsedmarc-dockerized/data/conf/parsedmarc/config.ini
Ahi vas a tener que editar los datos de imap y poner los de la cuenta «que recibe los reportes dmarc». Luego guardas y listo! Ojo chequea por favor que anden los datos sino te vas a volver loco.
Ahora toca este comando (pero miralo no lo ejecutes):
cat > /home/data/srv/parsedmarc-dockerized/geoipupdate.env <<EOF
GEOIPUPDATE_ACCOUNT_ID=TU_ACCOUNT_ID
GEOIPUPDATE_LICENSE_KEY=TU_LICENSE_KEY
GEOIPUPDATE_FREQUENCY=24
EOF
El comando anterior como ves requiere valores de cuenta y licencia, pero ¿Que es?, para saber de que pais provienen los informes dmarc vamos a utiliar una licencia pero gratuita de MaxMind que se consigue gratis en https://www.maxmind.com/en/geolite2/signup es un poquitin rebuscada! Cualquier cosa avisame.
Ahora vamos a ejecutar:
nano /home/data/srv/parsedmarc-dockerized/docker-compose.yml
y tenes que reemplazar las versiones de kibana por las mas nuevas ya que estamos nos queda actualizada:
docker.elastic.co/elasticsearch/elasticsearch:8.15.0
docker.elastic.co/kibana/kibana:8.15.0
Vas a ver que en el contenedor estan con 7……algo.. cambia esas dos lineas y nada mas!
y ahora si vamos a producir la magia:
docker compose up -d
Una vez que levanta vas a ir a la ip del servidor:9999 y vas a ver al tablero de elastic en acción con estadistica hecha gracias a Paserdmarc y que los tableros de elastic ya tienen preparado para que veas que esta bien y que esta mal.

Tiene unos mapitas re interezantes para ver graficamente los origenes y si hay otro lugar qu eno sea argentina hay que preguntarse si es normal y si esta autorizado.

Espero que te guste y que sigas por el buen camino!! gracias por pasar y leer! Aguante la comunidad sysadmin y devops !!
