smtp

Postfix SMTP Server | Envío local de correos

Video de Youtube
URL de Video remoto
Texto

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

      Cuando estamos desarrollando páginas web, una de las funcionalidades más interesantes que deberíamos tener en cuenta, es la de ofrecer la posibilidad, a los usuarios o clientes, de comunicarse con nuestra aplicación, potenciando la interacción e intercambio de información en ambas direcciones.

     Hoy en día contamos con varias opciones, como contratar o integrar servicios desarrollados por terceros, que ofrecen novedosas alternativas de comunicación, como chats, Watssap, Telegram, las redes sociales, etc. o de la manera tradicional, mediante el uso del correo electrónico, que al igual que la mayoría de las anteriores, tambén permite envío de documentos adjuntos, solicitudes de pedidos o facturas.

     El problema con el que nos encontramos a menudo, es que al configurar nuestro entorno de desarrollo local, no solemos aprovechar para instalar correctamente un servidor de correos que nos permita realizar pruebas de envío y, generalmente optamos por dejar esta comprobación para cuando el proyecto está a punto de terminarse o incluso cuando ya está en el servidor de producción.

     Qué es Postfix y para qué sirve

          Postfix es un agente de transporte de mensajes (MTA) de última generación, también conocido como servidor SMTP, que tiene dos propósitos:

  • Es responsable de transportar mensajes de correo electrónico desde un cliente de correo / agente de usuario de correo (MUA) a un servidor SMTP remoto.
     
  • También se utiliza para aceptar correos electrónicos de otros servidores SMTP.

     Postfix fue diseñado originalmente como un reemplazo de Sendmail, el servidor SMTP tradicional en Unix. En comparación, Postfix es más seguro y más fácil de configurar. Es compatible con Sendmail, por lo que si desinstala Sendmail y lo reemplaza con Postfix, sus scripts y programas existentes seguirán funcionando sin problemas.

     Cómo instalar y configurar Postfix como servidor SMTP solo de envío en Ubuntu 20.04

          Aunque suelo enfocarme en las configuraciones específicas para trabajar con Drupal, en este artículo voy a enseñarte todos los pasos que deberías saber, para configurar un entorno local de Linux, en el que puedas enviar correos electrónicos desde tus aplicaciones, sin importar la plataforma o lenguaje con el que esté desarrollada. Para ello voy a utilizar WSL2 en Windows 10.

       Paso 1 - Configurar el entorno de desarrollo con Linux 

          Para este ejercicio vamos a utilizar el WSL 2 en Windows 10, que nos permitirá desarrollar en un entorno de Linux, dentro de nuestro ordenador con Windows 10 Home, sin la necesidad de utilizar máquinas virtuales. Antes de pasar al siguiente paso, deberías configurar tu entorno WSL2, puedes ver cómo hacerlo en el artículo llamado Cómo instalar Drupal 9 usando Docker en Windows 10 Home    

       Paso 2 - Configuración del usuario No Root con permisos

          Siempre que realicemos una instalación de Linux, el primer paso es configurar los datos para nuestro usuario ROOT, éste tiene acceso y permisos para construir y destruir cualquier archivo dentro de nuestro entorno, lo cual podría suponer un alto riesgo, especialmente si estamos comenzando a trabajar con Linux. Por eso, si todavía no haz configurado el usuario No Root, es el momento de hacerlo, para poder ejecutar el resto del la instalación sin sustos:

          Primero creremos el usuario, y a continuación le incluiremos en el grupo sudo, para que pueda ejecutar comando con permisos de root, sin que tengamos que cerrar sesión o abrir otras pestañas para ejecutar el código. Puedes ver una explicación más amplia de Cómo crear y configurar el usuario No Root aquí

adduser noroot_user
usermod -aG sudo noroot_user

          Ahora que ya hemos creado nuestro usuario No Root, podremos iniciar sesión, en la misma ventana, o en una nueva pestaña si está utilizando la terminal mejorada en windows, para continuar con el resto de la instalación, para ello ejecutaremos el comando:

su - noroot_user

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

        Paso 3 - Instalación de Apache y configuración del dominio para nuestra web

          Lo siguiente que vamos a necesitar es el servidor donde vamos a alojar nuestra web, y el dominio que utilizaremos para el envío de nuestros correos electrónicos. En ese caso, utilizaremos Apache, por considerarlo el más conocido por todos los usuarios.

         Primero actualizaremos los listado de paquetes en Linux

sudo apt update
sudo apt upgrade

         Y una vez actualizado, podremos ejecutar el código de instalación de Apache:

sudo apt install apache2

         Cuando haya terminado la instalación podremos arrancar el servidor, con el siguiente comando:

sudo service apache2 start

         Una vez instalado el servidor Apache, probemos que todo funciona, accediendo en el navegador a la url http://localhost. Deberíamos ver en pantalla la siguiente imagen:

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Paso 4 - Configuración del dominio con Virtual Host

          Para nuestro ejemplo, necesitaremos un dominio, FQDN (Fully Qualified Domain Name), se usa comúnmente en servidores conectados a Internet y deberíamos usar FQDN en nuestros servidores de correo. Consta de dos partes: un nombre de nodo y un nombre de dominio. Por ejemplo:

mail.midomino.com

     El dominio del ejemplo anterior, sería un FQDN. mail es el nombre de nodo, midomino.com es el nombre de dominio. 

         Como en nuestro ejemplo nuestra web no estará conectada a internet, ya que la alojaremos en un entorno local, lo que haremos es "simular" un dominio, que apunte a nuestra ip, para ello, abriremos el archivo donde están alojados los dominios de Ubuntu, escribiendo en la consola el siguiente comando:

sudo nano /etc/hosts

 

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Una vez abierto el editor de texto NANO, que viene con la instalación por defecto de Ubuntu 20.04, añadiremos la misma ip y nuestro dominio, algo parecido a lo siguiente, respetando la misma estructura del modelo que se nos presente en el archivo hosts:

127.0.0.1       mail.drupaladicto.localhost 

     Al terminar de añadir el dominio en el archivo hosts, haremos clic en Ctrl + X para cerrar y confirmaremos que queremos conservar los cambios haciendo clic en Y.

     Paso 5 - Instalación de Postfix

          Como siempre, antes de realizar cualquier instalación en Linux, primero actualizaremos el listado de paquetes disponibles en nuestra distribución y a continuación ejecutaremos el comando de instalación de Postfix y el (-y), para que se instalen todas las dependencias:

sudo apt update
sudo apt install mailutils

          Inmediatamente, veremos en pantalla el inicio del instalador, donde seleccionaremos la opción Internet Site, si no se habre con esta opción seleccionada por defecto, presionaremos la tecla TAB hasta seleccionarla y luego presionaremos la tecla ENTER, para pasar a la siguiente pantalla.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

          En la siguiente pantalla, escribiremos el nombre de nuestro dominio, como mencionamos anteriormente, si nuestro objetivo es mail.midominio.localhost, sólo escribiremos la segunda parte, tal y como se muestra en la imagen:

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     La opción predeterminada es Internet Site. Es la opción recomendada para su caso de uso, por lo tanto, presione TAB y, luego, ENTER. Si solo ve el texto de la descripción, presione TAB para seleccionar OK y, luego, ENTER.

     Si no se muestra automáticamente, ejecute el siguiente comando para iniciarlo:

sudo dpkg-reconfigure postfix

     Una vez instalado, Postfix se iniciará automáticamente y se generará un archivo /etc/postfix/main.cf. Ahora podemos verificar la versión de Postfix con este comando:

postconf mail_version

     En Ubuntu 18.04, la versión de Postfix es 3.3.0 y Ubuntu 20.04 se envía con la versión 3.4.13.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

    Paso 6 - Configuración de Postfix

          En este paso, configuraremos Postfix para enviar y recibir correos electrónicos únicamente del servidor en el que se está ejecutando; es decir, desde localhost.

          Para lograrlo, configuraremos Postfix para que escuche únicamente en la interfaz de loopback, que es la interfaz de red virtual que utiliza el servidor para comunicarse internamente. Para ejecutar estos cambios, editaremos el archivo de configuración principal de Postfix, denominado main.cf, que se encuentra en etc/postfix.

          Abriremos el archivo con nuestro editor NANO escribiendo en pantalla el siguiente comando:

sudo nano /etc/postfix/main.cf

          Una vez abierto, buscaremos la siguientes líneas y realizaremos las modificaciones:

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .

         Canbiaremos  el valor de inet_interfaces para que sea igual a loopback-only:

. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .

    Sin cerrar el archivo, buscaremos otra directiva que tendremos que modificar, es mydestination, que especifica la lista de dominios que se entregan a través del transporte de entrega de correo local_transport. Por defecto, los valores son similares a los siguientes:

. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .

     Modificaremos esta línea para que tenga el siguiente aspecto:

. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .

     Cuando hayamos terminado con los cambios, cerraremos el archivo y entonces podremos restaurar el servicio usando el siguiente comando:

sudo service postfix restart

     Nuestro servidor ya está configurado para enviar correos electrónicos, ahora podremos realizar las pruebas de envío.

     Paso 7 - Comprobación de los envíos desde el servidor SMTP

          En este paso, probaremos si Postfix puede enviar correos electrónicos a una cuenta de correo electrónico externa usando el comando mail, que es parte del paquete mailutils que instaló en el primer paso.

         Para enviar un correo electrónico de prueba, ejecutaremos el siguiente comando, cambiando la última parte por la dirección de correo con la que quieras probarlo:

echo "Este es el cuerpo del correo de pruebas" | mail -s "Este es el asunto del correo" tu_direccion_de_correo

         Una vez ejecutado el código, podrás abrir la bandeja de entrada o la de no deseados (Span) de tu cuenta de correo y deberías tener el contenido de este correo casi de inmediato.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

         Si recibiéramos un error del comando mail, o si no recibiéramos un mensaje después de un período prolongado, tendremos que comprobar que la configuración de Postfix que modificamos sea válida y que el nombre de su servidor y el nombre de host estén establecidos con el nombre de su dominio.

         Debemos tomar en cuenta, que los correos todavía no están cifrados, por lo que los servidores de correo, podrían identificarlos como No deseados (Span)

     Paso 8 - Reenviar correos del sistema

          En este paso, configuraremos el reenvío de correos electrónicos para el usuario root, con el propósito de que los mensajes generados por el sistema que se nos envíen en nuestro servidor local, se reenvíen a una dirección de correo electrónico externa.

          El archivo /etc/aliases contiene una lista de nombres alternativos de destinatarios de correo electrónico. Lo abriremos​​​ para editarlo:

 sudo nano /etc/aliases

          Una vez abierto, tendrá un aspecto parecido al siguiente:

# See man 5 aliases for format
postmaster:    root

          La única directiva presente especifica que los correos electrónicos generados por el sistema se envíen a root.

          Así que añadiremos la siguiente línea al final del archivo:

...
root:          tu_direccion_de_correo

         Con esta línea, estamos especificando que los correos electrónicos enviados al usuario root se reenvíen a una dirección de correo electrónico específica.  Sustituiremos tu_direccion_de_correo por tu dirección de correo electrónico personal. Y cuando hayamos terminado, guardaremos los cambios y cerraremos el archivo.

         Para que el cambio se realice, ejecutaremos el siguiente comando:

sudo newaliases

         Al ejecutar newaliases, se creará una base de datos de alias que utiliza el comando mail, que se toman del archivo de configuración que acaba de editar.

        Podremos comprobar que se envían correos electrónicos al usuario root al ejecutar lo siguiente:

echo "Este es el cuerpo del mensaje, enviado a ROOT" | mail -s "Esta es la línea del asunto" root

        Si abrimos nuestra cuenta de correo, podremos ver un nuevo mensaje.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

        Ahora, habilitará el cifrado de mensajes para que todos los correos electrónicos que envíe su servidor estén protegidos contra alteraciones en tránsito y se consideren más legítimos.

       Paso 9 - Habilitar el cifrado SMTP

         Para nuestro ejemplo, vamos a utilizar un certificado auto-firmado, con el programa OpenSSL, que viene instalado en Ubuntu 20.04. Ejecutaremos el siguiente comando, modificando el nombre del dominio, por el que configuramos al principio de este artículo, y esto nos generará el certificado y la clave primaria, dentro del la ubicación /etc/ssl:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/midominio.localhost.key -out /etc/ssl/midominio.localhost.crt

       Esto nos abrirá la pantalla, que nos perdirá los datos del registro del certificado, rellenaremos cada línea, haciendo clic en la tecla ENTER, para pasar a la siguiente; teniendo especial cuidado en las dos últimas, donde tendremos que especificar el nombre de nuestro dominio, tal y como lo hemos definido y una dirección de correo real, para que no nos genere ningún error.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

       Cuando hayamos terminado con la creación del certificado, veremos el mensaje de confirmación de que se generado correctamente y entonces, podremos realizar los cambios en el archivo de configuración, para actualizar la ubicación por la de nuestro certificado, para ello ejecutaremos la siguiente línea:

sudo nano /etc/postfix/main.cf

       Una vez abierto, buscaremos las siguientes líneas y las actualizaremos por la información correspondiente:

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

      Al terminar, cerraremos el archivo y guardaremos lo cambios. A continuación reiniciaremos el servicio de Postfix para que queden registrados, con el siguiente comando:

sudo service postfix restart

     Entonces, podremos volver a probar el envío de un correo electrónico, con el siguiente código, modificando tu cuenta de correo:

echo "Este es el cuerpo del mensaje CERTIFICADO " | mail -s "Este es el asunto del Correo Certificado" tu_direccion_de_correo

     Si volvemos a ver nuestra bandeja de entrada, deberíamos encontrar un nuevo correo en el buzón.

Postfix Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony