Categorías
Linux y Software Libre

Configurar Postfix con reenvío de correo (relay mail)

Configurar Postfix para reenviar correo electrónico tiene algunas ventajas y no es muy complicado de hacer.

Durante el fin de semana me dispuse a configurar un servidor para que funcionara como se retransmisor de correo (relay mail), no es complicado, pero se tienen que tener algunas precauciones.

Pero antes de entrar en materia, voy a intentar ilustrar la forma de envío tradicional y con relay para resaltar sus diferencias.

Envío tradicional de correo electrónico

Envio tradicional de correo

Este es el envío tradicional, cada cliente tiene configurado el servidor de correo de nuestro proveedor y por lo tanto cada usuario tiene su propio nombre de usuario y contraseña para poder enviar correo electrónico.

Usualmente uso Thunderbird como cliente de correo electrónico y por cada correo que se manda muestra un cuadro de diálogo informando sobre el estatus de la conexión y el avance de subida de los adjuntos.

Si el tamaño de los adjuntos es considerable, entonces se puede tardar unos segundos (o minutos) extras hasta que da el mensaje de enviado con éxito. Si en esos momentos la conexión a Internet es inestable entonces dará uno o varios errores hasta que se complete el envío.

Envío con Relay

En este caso un servidor interno funciona como intermediario, piense usted en él como el mensajero de la oficina, usted le entrega su correo y él se encarga de hacer los trámites necesarios para que lleguen a su destino.

Envio con relay

Todos los correos llegan a este servidor y el se encarga de formarlos en una fila y entregarlos al servidor de correo de nuestro proveedor.

La ventaja es que solo tengo que configurar una cuenta de correo electrónico con su nombre de usuario y contraseña para que la use el servidor que funciona como Relay, la configuración de los clientes de correo no necesitan estas credenciales.

Además la entrega de los clientes es prácticamente inmediata, a la velocidad de la red local, lo que les da la sensación de un envío inmediato.

Ustedes me podrán decir ¿Y porqué no configurar Postfix para que entregue el correo directamente? y tienen razón, es posible hacerlo y tampoco es complicado, el problema son las validaciones y comprobaciones que se tienen que hacer para que no se clasifique un correo como spam.

En la actualidad los correos que salen de un servidor de correo incluyen varios mecanismos para confirmar que son de una fuente confiable y eso si es mucho más complicado de hacer (pero no imposible).

Configurando Postfix con reenvío de correo.

En mi caso usé el equipo que tengo configurado con OpenMediaVault , o sea un Debian, pero no hay mucha diferencia con otras distribuciones de Linux como Ubuntu o Manjaro.

Antes de comenzar recuerden que tienen que crear una cuenta de correo con el proveedor que les esta proporcionando el servicio, su nombre de usuario y contraseña es la que va a utilizar el servidor con relay. Voy a usar relay@midominio.com como ejemplo.

Para hacer los ajustes necesarios se tiene que modificar el archivo /etc/postfix/main.cf , este ejemplo les puede servir de guía.

Archivo /etc/postfix/main.cf

Noten que en la línea que dice relayhost el dominio esta entre corchetes y además se especifica el puerto utilizado (en este caso 587).

También noten que se hace referencia a un archivo llamado smtp_pass en la línea que dice smtp_sasl_password_maps en ese archivo se almacena el nombre de usuario y contraseña que vamos a usar para mandar los correos y es muy similar a este ejemplo:

Archivo /etc/postfix/smtp_pass

[mail.midominio.com]:587 relay@midominio.com:contraseña

Nuevamente revisen que el servidor de correo este entre corchetes y el número de puerto. Debe de ser idéntico a como se especificó en relayhost. Como pueden ver lo que sigue es la cuenta de usuario y la contraseña.

Para que Postfix pueda usar esta información hay que preparar un archivo especial con esta instrucción…

postmap /etc/postfix/smtp_pass

Para aplicar los cambios tienen que reiniciar el servicio, en Debian es así:

sudo /etc/init.d/postfix restart

y verán estos mensajes.

Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.

Para realizar las pruebas solo resta configurar un cliente de correo electrónico, en Thunderbird en el menú PreferenciasConfiguración de cuentas…

Y se agrega la información de nuestro nuevo servidor.

Servidor SMTP en Thunderbird

Por default Postfix utiliza el puerto 25 y no requiere identificación alguna.

Si todo salió bien, dentro de pocos instantes verán que llegó correctamente su correo electrónico a su bandeja de entrada.

Referencias

Categorías
Linux y Software Libre

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.

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!