miércoles, 20 de junio de 2012

Postfix Relay

Enviar Correos Electrónicos Usando Gmail Como Relay.

Hace algún tiempo me enfrente a la problemática de enviar correos electrónicos a las cuentas personales, de las quienes visitaran un portal web que estaba desarrollando; en cuanto a programar la función no fue nada difícil la verdad, el verdadero lió fue hacer que el MTA funcionara... de echo nunca logre hacer que EXIM4 funcionara, así que hoy día lo primero que hago en una terminal de trabajo es instalar y configurar POSTFIX, muchos dirán que es demasiado "retro", pero en términos de fiabilidad y eficiencia sigue siendo el mejor MTA del mundo OpenSource.

Ahora bien, en aquella época la solución a mis problemas fue purgar definitivamente EXIM4 e instalar POSTFIX, la configuración por defecto solía ser suficiente; sin embargo en la actualidad, a menos que se trabaje sobre un servidor con IP fija y registrado en un servicio DNS, resultara imposible enviar correos a servidores corporativos (GMail, Yahoo, Hotmail, etc) ya que estos poseen un filtro, que verifica la identidad del emisor comparando el Nombre de Host y la IP emisora... una validación imposible de superar con una conexión domestica común.

Ante tal panorama resultaba deprimente la idea de desarrollar servicios basados en correo electrónico, afortunadamente nuestro buen amigo POSTFIX es capaz de salvarnos de este lió, configurándose para usar una cuenta de un servidor reconocido para autenticar nuestros correos. Veamos como hacer esto usando una cuenta de GMAIL.

En primer lugar, ocuparse de instalar POSTFIX y de paso OpenSSL por si no se tiene un certificado encriptado, previamente abra que matar EXIM4 o cualquier otro MTA instalado.
aptitude install postfix openssl

Después procederemos a editar el archivo principal de configuración de POSTFIX, borrando todo su contenido y dejando únicamente las siguientes lineas:
# /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous

En la linea 2 le indicamos a postfix que deseamos hacer un Relay a travez del servidor SMTP de GMail en el puerto 587; la linea 3 indica que usaremos TLS como medio de cifrado para la conexión y en la linea 4 indicamos la ubicación del certificado que debe ser usado para autenticarse ante el servidor.

La linea 5 activa la autenticación SASL, en linea 6 indicamos el archivo donde se ubicaran las llaves usuario:clave con que nos identificaremos en el servidor de Relay y por último la linea 7 le indica a POSTFIX que no debe aceptar conexiones anónimas.

El próximo paso es crear el archivo  que contendrá nuestras llaves de acceso, para ello bastara con los siguientes comandos:
touch /etc/postfix/sasl/passwd
echo "[smtp.gmail.com]:587    usuario@gmail.com:password" >> /etc/postfix/sasl/passwd
postmap /etc/postfix/sasl/passwd
chmod 400 /etc/postfix/sasl/passwd

Primero creamos el archivo para almacenar la llave (1), luego escribimos nuestros datos de conexión a GMail (2) y finalmente con el comando postmap (3) creamos el archivo de hash passwd.db que leerá POSTFIX; el ultimo comando es para "proteger" el archivo de texto plano aunque también podemos borrarlo o moverle, pero no es muy aconsejable.

Por último, debemos importar nuestro certificado de identidad para que POSTFIX pueda usarlo, este certificado se halla en /etc/ssl/certs/Thawte_Premium_Server_CA.pem, parecerá un misterio de donde ha salido y el nombresito no es que ayude mucho, pero no hay lió este certificado se crea al instalar OpenSSL... al menos en Debian, puede que en otra distribución sea necesario crearlo manualmente; luego recargaremos la configuración de POSTFIX y reiniciaremos el servicio.
cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/cacert.pem
/etc/init.d/postfix reload
/etc/init.d/postfix restart

Con esto será suficiente, ya podremos enviar correos por medio del comando mail o mediante algún lenguaje de programación que use el MTA de nuestro Linux. Solo resta decir que esto es recomendable solo en fase de desarrollo y pruebas, ya que el correo enviado se almacena en la cuenta "esclava" que vinculamos y por ende el destinatario vera un remitente formado por el nombre de usuario del sistema y la cuenta de correo vinculada... algo inaceptable en fase de producción.


Mis agradecimientos a NetStorming de donde proviene la información original para este artículo, por ahora es todo, hasta la próxima... Paz y Suerte 黒オオカミ.

No hay comentarios:

Publicar un comentario