Configurar un servidor de correo Postfix con DKIM y SPF

El correo electrónico es uno de los servicios fundadores de internet, ha sobrevivido a muchos cambios y sigue siendo de los más utilizados. Desafortunadamente cuando se diseñó no se pensó en la seguridad, es común la suplantación de identidades o el envió de correos masivos mejor conocidos como SPAM.

Los primeros esfuerzos por evitar el SPAM surgió a partir del uso de listas negras (blacklist), me llegó a tocar aparecer en algunas, luego solicitarles amablemente que te quitaran cumpliendo primero con algunos requisitos.

Pero esto era poco práctico y con demasiados falsos positivos, por eso ahora hay dos técnicas que se utilizan ampliamente para validar el origen de un correo electrónico y son DKIM y SPF.

DomainKeys Identified Mail (DKIM) es un método para la autentificación de correo electrónico, permite a una persona que recibe el correo electrónico verificar que el mensaje procede efectivamente del dominio que pretende haber venido. La necesidad de este tipo de autentificación surge porque el SPAM a menudo ha falsificado las cabeceras de los mensajes.

Sender Policy Framework (SPF) es la última iniciativa para combatir el SPAM. Se trata de un protocolo que mediante dos técnicas intenta averiguar si existe una suplantación de identidad en los mensajes recibidos, con sólo examinar sus cabeceras.

En pocas palabras, todos los correos van a salir con un sello que certifica su origen, así no van a poder decir que a chuchita la bolsearon.

Tabla de contenidos

Instalar Ubuntu 12.04 server LTS

En este artículo voy a intentar explicar como activar ambas técnicas usando un servidor Ubuntu, no tiene que ser necesariamente esta distribución, pero pueden existir ligeras diferencias en una u otra y en temas de seguridad hasta un bit importa, si algo no está bien las firmas no lo estarán, el mensaje no se validará y no llegaremos a ningún lado. Sin embargo, supongo que esta información se puede adaptar a prácticamente cualquier distribución de linux.

No voy a profundizar en los aspectos de la instalación de un Ubuntu server ya que en internet hay muchos sitios que tratan el tema.

Les puedo recomendar el uso de virtualbox para hacer algunas pruebas antes de hacer esto en un servidor en producción.

Instalar el software necesario.

Instalar postfix como MTA, opendkim para firmar los correos y mpack para enviar la configuración a otro equipo.

sudo apt-get install postfix opendkim mpack

Elegir la configuración de Sitio de internet para postfix.

Ubuntu Server 12.04 VirtualBox
Un ubuntu server virtualizado puede ser útil para hacer algunas pruebas.

Nombre de dominio spiderman.localdomain . Cualquier nombre de dominio esta bien para hacer algunas pruebas. Claro que esto lo tienen que cambiar para un servidor en producción.

Generar las llaves de opendkim

Llegó el momento de ponernos serios, les recuerdo que estos valores son de ejemplo y tendrán que ajustarlos a sus propias instalaciones.

Primero, crear una carpeta en /etc/opendkim

Y luego hay que generar las llaves para opendkim con el comando:

opendkim-genkey -s 201207 -d linuxmanr4.com

Nombre del selector 201207 y dominio linuxmanr4.com son de ejemplo pero son valores importantes.

Esto genera dos archivos 201207.txt y 201207.private que son las llaves que se van a usar para firmar los correos.

Enviamos el archivo 201207.txt a un correo electrónico ya que contiene la información necesaria para modificar el DNS.

mpack -s “info 201207” /etc/opendkim/201207.txt droctopus@gmail.com

Para esto usé el comando mpack para mandarlos por correo, pero pueden copiar el archivo a un dispositivo usb o cualquier otro medio que tengan a la mano.

Antes de poder usar este archivo, primero hay que hacerle algunos ajustes.

Cadena Original:

201207._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB452iQKBgQDao2xAQRdxOKCw+sgUCreo2sL5Jo7hd36goGbktsu9E0vYWf2RD2m1si1gTM8DDrXFHMYa9U7iflpduStkeAYEEecs47nnqYi4nohYV9nSAHSQ1/9akn+orLdilv/j4a4i7qHAG/mTANpSnZAU4upWstaD4xZnt/iqrDlt5p/2rwIDAQAB" ; ----- DKIM 201207 for linuxmanr4.com

Tenemos que agregar la letra k antes de =rsa; y agregar el texto t=y; después del rsa para indicar que es de prueba.

Con los ajustes realizados quedaría más o menos así:

201207._domainkey IN TXT "v=DKIM1;k=rsa;t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB452iQKBgQDao2xAQRdxOKCw+sgUCreo2sL5Jo7hd36goGbktsu9E0vYWf2RD2m1si1gTM8DDrXFHMYa9U7iflpduStkeAYEEecs47nnqYi4nohYV9nSAHSQ1/9akn+orLdilv/j4a4i7qHAG/mTANpSnZAU4upWstaD4xZnt/iqrDlt5p/2rwIDAQAB" ; ----- DKIM 201207 for linuxmanr4.com

Y con esto obtenemos básicamente lo que es la definición del DNS que tenemos que ajustar en el dominio.

Atención.

Las instrucciones para dar de alta esta información en nuestro DNS puede ser muy variadas, tendrán que investigar por su cuenta sobre cómo modificar la información de un DNS.

Probamos si está todo correcto con esta instrucción:

opendkim-testkey -d linuxmanr4.com -s 201207 -k 201207.private -vvv

al final la instrucción debe decir:

opendkim-testkey: key OK

Eso quiere decir que esta correcto.

Configurar opendkim

Primero se edita el archivo /etc/default/opendkim y agregamos esta línea.

SOCKET="inet:8891@localhost"

Editamos el archivo /etc/opendkim.conf y ajustamos las siguientes líneas.

Domain linuxmanr4.com
KeyFile /etc/opendkim/201207.private
Selector 201207
InternalHosts /etc/opendkim/internal_hosts

Creamos el archivo internal_hosts cuyo contenido será las direcciones IP que están autorizadas por dkim para firmar correos.

sudo nano /etc/opendkim/internal_hosts
direccion.ip.de.su.servidor

Reiniciamos opendkim:

sudo service opendkim restart

Configurar postfix.

Agregar estas líneas al final del archivo /etc/postfix/main.cf

smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

ajustar los valores:

myhostname = spiderman.linuxmanr4.com

y

mynetworks = agregando la dirección ip de donde quieren que se manden los correos.

Mediante la directiva mynetworks definimos qué redes o hosts pueden enviar correo a través de nuestro Postfix. Un ejemplo sería

mynetworks = 127.0.0.0/8, 192.168.2.0/24, 172.16.3.4/32

Con esta configuración estamos definiendo: La red 127.0.0.0 puede enviar. Esta red siempre será nuestra propia máquina (localhost). Los 254 hosts de la red 192.168.2.0 pueden usar nuestro servidor. Solo el host 172.16.3.4 puede usar nuestro servidor, y ninguno más de la red 172.16.3.0. Por ejemplo, el 172.16.3.14 no podría.

Reiniciamos posftfix

sudo service postfix restart

Configurar SPF

Es mucho más sencillo siguiendo esta regla:

“v=spf1 ip4:REPLACE_WITH_IP a mx a:REPLACE_WITH_HOSTNAME ~all”

Ejemplo,

"v=spf1 ip4:192.168.0.1 a mx include:spiderman.linuxmanr4.com ~all"

Esto se coloca en el DNS como un TXT general.

Pruebas, pruebas y más pruebas.

Una forma muy sencilla de probar si todo es correcto es configurando un cliente de correo electrónico (puedo sugerir thunderbird) para que utilice el servidor que acabamos de configurar como su SMTP y enviar un correo a check-auth@verifier.port25.com

Su respuesta nos dará los resultados:

The Port25 Solutions, Inc. team

=====================================
Summary of Results
=====================================
**SPF check: pass**
DomainKeys check: neutral
**DKIM check: pass**
Sender-ID check: pass
SpamAssassin check: ham

Si todo salió bien y terminaron las pruebas, entonces quiten el texto t=y; del DNS para indicar que ya son valores finales y las pruebas terminaron.

¡Happy Hacking!

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.