
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.