Implementación de firma DKIM para autenticidad de mensajes salientes

La firma DKIM (DomainKeys Identified Mail) es una pieza clave para demostrar la autenticidad de los mensajes salientes y reducir la suplantación de dominio. En esta guía práctica y técnica abordo desde fundamentos hasta pasos concretos para generar claves, publicar registros DNS y configurar servidores de correo. Incluye ejemplos reales, comandos y buenas prácticas para producción.

Qué es DKIM y por qué importa

DKIM añade una firma criptográfica a ciertos encabezados del mensaje, permitiendo al receptor verificar que el correo fue autorizado por el dominio remitente y que no fue modificado en tránsito. Junto con SPF y DMARC, DKIM mejora la entregabilidad y reduce el riesgo de que tus correos legítimos acaben en spam o sean suplantados.

Cómo funciona DKIM: flujo resumido

  • El servidor remitente firma el correo con una clave privada y añade el encabezado DKIM-Signature.
  • El receptor recupera la clave pública desde el DNS del dominio usando el selector indicado.
  • El receptor verifica la firma: si coincide, el correo se considera autenticado por DKIM.

Para una visión técnica ampliada, la entrada en la Wikipedia sobre DKIM es un buen punto de partida.

Requisitos previos

  • Acceso para crear o editar registros DNS TXT en el dominio (panel del proveedor o API).
  • Acceso administrativo al servidor de correo (Postfix, Exim, Exchange, etc.) o al servicio de envío.
  • Herramientas básicas: OpenSSL, dig/nslookup, y, si usas OpenDKIM, las utilidades incluidas.

Generación de claves DKIM

Recomiendo 2048 bits como mínimo para producción. A continuación, ejemplo con OpenSSL en Linux:

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.pem
# Extraer la clave pública en una sola línea sin cabeceras
openssl rsa -in private.key -pubout | sed -ne '1,999p' | awk 'NF {sub(/-+BEGIN PUBLIC KEY-+/,""); sub(/-+END PUBLIC KEY-+/,""); print}' | tr -d '\n' > public.key.txt

El contenido que publicarás en DNS es la porción base64 de la clave pública (p=). Evita espacios, saltos de línea y añade la etiqueta v=DKIM1; k=rsa; p=…

Formato del registro DNS TXT

La entrada DNS usa un selector y el subdominio _domainkey. Ejemplo para selector ‘s1’ y dominio ejemplo.com:

s1._domainkey.ejemplo.com. TXT 'v=DKIM1; k=rsa; p=MIIBIjANBgkq...'

Notas prácticas:

  • Algunos paneles dividen cadenas largas; asegúrate de que el registro final no introduzca caracteres no válidos.
  • TTL moderado (por ejemplo 3600) facilita rotaciones rápidas si es necesario.

Configuración en servidores de correo

A continuación líneas maestras para servidores comunes. Ajusta rutas y permisos según tu infraestructura.

Postfix con OpenDKIM

  • Instala opendkim y opendkim-tools.
  • Configura /etc/opendkim.conf con el socket y directorios de llaves.
  • En /etc/opendkim/KeyTable añade: s1._domainkey.ejemplo.com ejemplo.com:s1:/etc/opendkim/keys/ejemplo.com/s1.private
  • En /etc/opendkim/SigningTable añade: *@ejemplo.com s1._domainkey.ejemplo.com
  • Configura Postfix para usar el milter de OpenDKIM editando main.cf: smtpd_milters = unix:/var/run/opendkim/opendkim.sock

Exim

  • Exim soporta firmas DKIM a través de dkim_signing en la configuración del router/transport.
  • Define la ruta a la clave privada y el selector en la configuración del transport que firma el correo saliente.

Exchange y servicios gestionados

En entornos Exchange on-prem o en servicios gestionados, la firma puede ser interna (gateway) o a nivel de servidor de envío. Para Google Workspace o servicios de terceros, sigue las instrucciones del proveedor y publica la clave pública en DNS según el selector indicado.

Comprobación y pruebas

  • Verifica el registro DNS con dig: dig txt s1._domainkey.ejemplo.com +short
  • Prueba que el servidor añade la cabecera DKIM-Signature enviando un correo a una cuenta externa y revisando encabezados.
  • Usa herramientas de validación online y las utilidades del paquete OpenDKIM, por ejemplo opendkim-testkey -d ejemplo.com -s s1 -k /path/to/public.key -vvv.

La documentación de proveedores de DNS y servicios de email suele incluir secciones sobre DKIM. Cloudflare mantiene una guía práctica en sus docs que puede ayudar con ejemplos de registros TXT y limitaciones del panel: Cloudflare – DKIM.

Rotación de claves y gestión segura

La rotación periódica de claves reduce riesgos ante filtraciones. Procedimiento recomendado:

  • Genera el nuevo par de claves y publica la nueva clave pública bajo un nuevo selector (por ejemplo s2).
  • Configura el servidor para firmar con ambos selectores durante un periodo de transición si es posible.
  • Después de verificar entregabilidad, retira el selector antiguo del servidor y finalmente del DNS tras un período de cuarentena.

Conserva la clave privada en un almacén seguro y aplica permisos restrictivos. Evita compartir la clave privada o almacenarla en repositorios no cifrados.

Buenas prácticas y consideraciones avanzadas

  • Habilita tanto DKIM como SPF y publica una política DMARC para controlar políticas y recibir reportes.
  • Usa canonicalización relajada siempre que sea posible para tolerar ligeros cambios de encabezados que realizan algunos MTAs.
  • Monitorea reportes DMARC y tasas de entrega para detectar problemas tras la implementación.
  • Evita firmar mensajes que son alterados por terceros (por ejemplo, servicios de marketing que modifican el HTML) o ajusta la configuración para firmar solo encabezados estables.

Resolución de problemas comunes

  • Firma ausente: revisa que el milter esté conectado al MTA y que el proceso opendkim esté activo.
  • Fallo de verificación: comprueba que el registro DNS contenga la p= completa y sin saltos de línea. Verifica selector correcto en DKIM-Signature.
  • Entregabilidad con terceros: algunos gateways reescriben encabezados. Prueba enviar directamente a cuentas de prueba en Gmail, Outlook y proveedores principales para validar el comportamiento.

Conclusión

Implementar DKIM correctamente mejora la autenticidad de tus mensajes salientes y es imprescindible para una estrategia moderna de entrega de correo junto a SPF y DMARC. El proceso requiere: generación segura de claves, publicación cuidadosa del registro DNS con el selector, configuración del MTA para firmar el tráfico y pruebas continuas. Sigue prácticas de rotación de claves, monitoriza reportes y ajusta canonicalización según el flujo de correo. Para consultas técnicas puntuales, la documentación oficial y las guías de proveedores de DNS y correo son recursos complementarios útiles.

Si necesitas un checklist rápido: 1) generar par de claves 2048b, 2) publicar TXT con selector, 3) configurar MTA/milter, 4) probar con dig y encabezados, 5) publicar DMARC y monitorizar.