Sabiendo que cada vez más los servicios de correo electrónico están ajustando las medidas de seguridad para detectar el correo fraudulento, configuré DKIM en varios servidores desde los que se envía correo, como medida adicional al SPF que ya mantengo sistemáticamente desde hace varios años.
DomainKeys Identified Mail (DKIM) es un método por el cual los correos son verificados con la firma digital del servidor de origen; esto permite validar el dominio del remitente, evitar la suplantación de identidad, asegurar el remitente y la integridad, evitando la modificación de los correos.
La instalación que se presenta permite disponer de Postfix en Debian/GNU validando correo recibido con DKIM y firmando los mensajes salientes para todos los dominios, en un servidor multi-dominio.
Instalación
Si tenemos Postfix correctamente funcionando, solo debemos instalar dkim-filter que se encargará de firmar y verificar los correos.
# aptitude install dkim-filter
Llave digital
# dkim-genkey -b 1024 -d dominio.com -s cartero
Donde:
- -d dominio.com – es el dominio del servidor de correo (MX)
- -s cartero – es la forma de identificar la llave y es el nombre del host (MX)
El resultado de la ejecución son dos archivos: cartero.private y cartero.txt
# cp cartero.private /etc/mail/dkim.key
# chown dkim-filter /etc/mail/dkim.key
y cartero.txt se usa para el DNS, como se ve más adelante.
Filtro
Habilitarlo para que escuche en un puerto de localhost, editando el archivo /etc/default/dkim-filter y dejando esta línea:
SOCKET=»inet:1025@localhost»
Luego configurar el archivo /etc/dkim-filter.conf:
Syslog yes
UMask 002Domain *
KeyFile /etc/mail/dkim.key
Selector carteroAutoRestart no
Background yes
Canonicalization simple
DNSTimeout 5
Mode sv
SignatureAlgorithm rsa-sha256
SubDomains no
X-Header yes
Aquí son importante estas líneas (y por supuesto que las demás también):
- Syslog yes – Dejará un registro del funcionamiento de dkim-filter en el /var/log/mail.log
- Domain * – Hace que la firma de los correos salientes sea para todos los dominios
- Selector cartero – es el identificador que le pusimos a la llave cuando la creamos y que coincide con el nombre del host
y podemos iniciar el daemon dkim-filter y verificar que efectivamente ha quedado escuchando en el puerto que configuramos (en este caso 1025)
Postfix
Resta decirle a Postfix que se vincule con dkim-filter para los correos entrantes y salientes, agregando estas líneas al /etc/postfix/main.cf:
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:127.0.0.1:1025
non_smtpd_milters = inet:127.0.0.1:1025
DNS
La configuración indicada previamente hace que todos los dominios de origen sean firmados por el servidor de correo, lo que puede no ser una escenario común.
Así, en cada dominio se debe agregar el registro TXT que contiene la llave pública con que será verificada la firma.
Para esto editar el archivo de zona DNS del dominio y colocar la información que ha queado en el archivo cartero.txt, así:
cartero._domainkey.dominio.com. IN TXT «v=DKIM1; g=*; k=rsa; p=MIGfM…wIDAQAB»
Verificación
Para verificar que todo anda como uno espera (hola Murhpy!), se pueden observar las líneas en el /var/log/mail.log de dkim-filter, semejantes a esta:
Jan 18 01:23:12 cartero dkim-filter[6484]: Sendmail DKIM Filter v2.8.2 starting (args: -x /etc/dkim-filter.conf -u dkim-filter -P /var/run/dkim-filter/dkim-filter.pid -p inet:1025@localhost)
y se puede enviar correo a una cuenta de yahoo.com (creadores de DKIM) y verificar que el correo no sea colocado en spam y que su cabezal tenga una línea semejante a esta:
Authentication-Results: mta1052.mail.ac4.yahoo.com from=dominio.com; domainkeys=neutral (no sig); from=dominio.com; dkim=pass (ok)
Basado en los artículos de:
Pingback: Bitacoras.com
Gracias por la info, pero unos 30 minutos luego de instalar todo, y buscando algunos mensajes de error, veo que dkim-filter no está actualizado desde hace bastante tiempo, y aconsejan utilizar opendkim.
Solo para que a otro no le pase lo mismo.
Saludos