Page cover

Servidor de mail con Postfix, Dovecot, mailutils y Thunderbid

Para esta práctica realizaremos un servidor de correos SMTP e IMAP y lo haremos funcionar con clientes de correos. A continuación te dejo el índice de la guía:

Escenario de la práctica

Simularéis una empresa llamada empresa.local. El esquema de máquinas será:

Máquina
SO
Rol
IP ejemplo

servidor

Ubuntu Server 24.04

Postfix + Dovecot + Prosody

192.168.1.10

cliente1

Ubuntu Desktop 24.04

Thunderbird + Gajim

192.168.1.20

cliente2

Ubuntu Desktop 24.04

Thunderbird + Gajim

192.168.1.21

Ambas VMs deben estar en red interna (Host-Only o Internal Network en VirtualBox) y tener un adaptador puente para la conexión real. Añade al /etc/hosts del servidor y los clientes la resolución manual del dominio empresa.local:

192.168.1.10  servidor.empresa.local  mail.empresa.local  chat.empresa.local

Postfix

- Instalación

- Configuración

Una práctica conveniente es hacer una copia de seguridad de los archivos de configuración que vayamos a modificar. Para ello, hacemos:

Dentro de la configuración, asegúrate de que las siguientes líneas estén configuradas adecuadamente:

Tienes aquí el documento completo con todas las configuraciones añadidas por si quieres copiar y pegar:

chevron-rightDocumento main.cf completohashtag

La línea de home_mailbox = Maildir/ nos servirá para que Postfix acepte Maildir.

circle-info

En correos electrónicos, existen dos formatos muy extendidos para almacenar el correo electrónico: Mbox y Maildir:

  • Mbox permite guardar todos los mensajes en un solo archivo

  • Maildir utiliza un directorio para guardar los mensajes en ficheros individuales.

En la configuración por defecto de Postfix y mailutils se utiliza el formato Mbox, pero ambos soportan Maildir, así que vamos a utilizar este formato.

Postfix tiene un fichero de texto llamado /etc/aliases donde se definen alias de correo: redirecciones que permiten que un nombre de correo apunte a otro usuario o a una lista de usuarios pero postfix requiere un archivo compilado binario para funcionar por lo que este comando lee el fichero txt y genera el binario:

Para que funcionen los cambios, se reinicia Postfix:

Ahora ya puedes verificar la configuración sin errores:

Si no devuelve nada, la configuración es correcta. Cualquier línea de salida indica un problema.

triangle-exclamation

Dovecot

- Instalación

Para la instalación de Dovecot, existen tres módulos principales (dovecot-core, dovecot-imapd y dovecot-pop3d) de las cuales usaremos el software principal "dovecot-imapd" principalmente para el trabajo de descarga de correos en local:

- Configuración

Para Dovecot, configuraremos la autenticación y, como antes, el uso del formato Maildir en sustitución de mBox. Una vez instalado podemos comprobar que Dovecot:

  • Está escuchando en los puertos 143 y 993 que corresponden a IMAP e IMAPS.

  • Utiliza el mismo log file /var/log/mail.log que Postfix (MTA).

La configuración está dividida en varios ficheros dentro del directorio /etc/dovecot .

/etc/dovecot/dovecot.conf — aquí solamente descomenta para escuchar en todas las interfaces de red:

/etc/dovecot/conf.d/10-auth.conf - configura las siguientes opciones para que se pueda hacer login con certificado autofirmado:

Ahora vamos a configurar los mailboxes para aceptar Maildir. Para ello primero realizaremos la copia de seguridad del archivo de configuración:

Observa en este punto del archivo de configuración 10-mail.conf que nos dice explícitamente que podemos hacer el cambio. Así que vamos y editamos el archivo:

y buscamos la directiva mail_location y descomentamos la que corresponde a esta:

y comentamos la que esta activa actualmente.

/etc/dovecot/conf.d/10-master.conf — por último, descomenta el bloque SASL para que pueda comunicarse la autenticación correctamente con Postfix:

- Comprobación

Por último, reinicia el servicio para que los cambios surtan efecto:

Para mostrar la configuración actual de Dovecot en formato legible (incluyendo todos los parámetros y valores configurados en los archivos de configuración) podemos usar el siguiente comando:


Mailutils

Mailutils nos servirá como MUA para poder enviar/recibir correos por línea de comandos. Maildir-utils son una serie de herramientas que nos facilitaran la navegación entre correos por terminal.

- Instalación

La instalación será como siempre:

circle-exclamation

Implementación de certificados TLS autofirmados

Para entorno de laboratorio, generamos un certificado auto-firmado:​

Añade al final de /etc/postfix/main.cf:

En /etc/postfix/master.cf, descomenta la línea del puerto 587 (submission):

En /etc/dovecot/conf.d/10-ssl.conf comenta lo que hay puesto y pega lo siguiente:

Por último, renicia los servicios:


Comprobación del funcionamiento

Configuración de usuarios de correo

Por ahora tendremos el handicap de que los usuarios de cliente de correo deben ser los mismos del servidor así que, para crear usuarios de correo, utilizamos el comando adduser para añadir el usuario "larios":

circle-info

Puedes revisar todos los usuarios creados con getent passwd por ejemplo

Prueba de envío y recepción de correo

Puedes enviar un correo electrónico a una cuenta en tu servidor y luego comprobar si se ha recibido correctamente utilizando este cliente de correo electrónico usando comandos como mail.

Para probar el servicio de correo vía terminal basta escribir algo como lo siguiente:

Si vamos al home del único usuario instalado en el sistema, "ubuntu", veremos que existe un directorio llamado Maildir que contiene la estructura básica de un buzón de correos. Vamos a la carpeta o directorio /home/ubuntu/Maildir/new y vemos que hay dos correos sin enviar.

Si vamos a comprobar algún correo en cuestión:

Veremos ahora el correo recien llegado y podemos leerlo con:

Prueba con Thunderbird

Para la prueba con Thunderbird deberás acceder a la otra MV cliente y configurar:

Configuramos Thunderbird

Dentro de la interfaz de configuración de usuario de Thunderbird, deberemos añadir cualquiera de los dos usuarios creados con el dominio correspondiente.

Al clicar directamente en aceptar, hará la autodetección del servidor, en ese momento, si todo ha ido bien, se mostrará algo parecido a lo siguiente:

A resultas de lo anteriormente mencionado, saldrá este mensaje de desconfianza del certificado, más adelante veremos como implementar un certificado SSL útil. De momento confirmaremos.
triangle-exclamation

Si todo ha ido bien, veremos este mensaje

Prueba de envío de Thunderbird

Ahora ya podemos dedicarnos a excribir y comunicarnos con el otro usuario creado:

Ejemplo de envío de mail
triangle-exclamation

Desde el servidor, ahora podemos comprobar el mail. Si volvemos a /home/ubuntu/Maildir/new deberíamos ver un nuevo correo en almacenado en el inbox. Con un cat o un more podemos ver (a excepción de la imagen obviamente que s envía en base64 ) el contenido del mensaje:

En el Maildir veremos todos los mensajes almacenados

El contenido del archivo será este:

Como ves, no solo contiene el mensaje, sino toda la información relativa al email en un solo archivo como ya se ha explicado con el formato Maildir.

Para revisar mejor el contenido del correo, podemos usar el comando mu view seguido de la ruta al archivo de mensaje dentro del directorio Maildir. Por ejemplo:

Deberías ver algo así:

Como ves, la imagen sigue sin poder reproducirse. Con maildir-utils ahora vemos solo el contenido del mensaje con la información básica.

Prueba de recibo de Thunderbird

Una vez completado esto, podemos hacer el proceso contrario; vamos a enviar correo del servidor por comandos al usuario con el cliente de Thunderbird conectado.

Empezamos por escribir un correo y le adjuntaremos algún archivo creado:

Añadamos un archivo de ASCII art por ejemplo

Ahora pasamos a crear el mail con el adjunto:

Esto nos desplegará las opciones;

  1. lo primero que te pedirá será usuarios en copia (CC), pulsa Enter al terminar.

  2. lo siguiente ingresar el asunto del correo electrónico en la primera línea, pulsa Enter al terminar.

  3. Finalmente, escribir el cuerpo del correo electrónico, pula Enter y en la nueva linea, pulsa Ctrl+D para enviar. El procedimiento sería algo así:

Al guardar no saldrá ningún mensaje de completado pero si vamos al cliente de Thunderbird, deberíamos ver ahora el mensaje:

Como ves, el adjunto se encuentra en la parte inferior del mensaje.
chevron-rightPRACTICA: Habilita notificaciones de inicio de sesión por correo/alertahashtag

Configurar un pequeño script para generar una alerta cada vez que alguien inicia sesión como root a través de SSH es una de las mejores cosas que puedes hacer para controlar las conexiones entrantes de SSH.

Entonces, primero abre el archivo de configuración SSH:

Luego, agrega o modifica las siguientes líneas para configurar notificaciones por correo:

Una vez configurado Postfix, puedes utilizar el servidor de correo para enviar notificaciones de inicio de sesión.

No olvides guardar los cambios realizados en /etc/ssh/sshd_config y reiniciar el servicio SSH para que los cambios surtan efecto:

+ Firma digital y cifrado

Para el uso de frimas cifradas a través de Thunderbird debemos instalar el plugin Enigmail o usar el soporte nativo de OpenPGP de Thunderbird (versión ≥78):

En Thunderbird → Configuración de cuenta → Cifrado extremo a extremo → importar clave. Los alumnos se intercambian las claves públicas y envían un correo firmado y uno cifrado.


Conclusiones

Como ves, tener un servidor de correos es una utilidad muy interesante y divertida para nuestro servidor. Aunque la mayoría de empresas externalicen el servidor de correo con outlook, gmail o cualquier servicio de dominio propio, como administradores de sistemas es importante saber manejar estos protocolos y software.

Como curiosidad, en la siguiente pagina puedes revisar el estado de tu dominio de correo: https://mxtoolbox.com/arrow-up-right

Webgrafía

Última actualización