Instalación de un servidor de correo-e
En este artículo vamos a ver como llevar a cabo una instalación de un servidor de correo electrónico sobre un sistema operativo Debian 11. Veremos como configurarlo, administrarlo y monitorizarlo.
Puede parecer un proceso complicado, ya que tenemos que implementar múltiples servicios y configurarlos, pero no lo es tanto. Necesitaremos un certificado, un servidor SMTP, un servidor POP y otro IMAP, para tener disponibles todos los protocolos que necesitaremos. Crearemos cuentas de usuario e instalaremos un servidor webmail.
Sumario
- Instalación y configuración
- Obtención de un certificado digital.
- Instalación del servidor SMTP
- Instalación del servidor POP
- Instalación del servidor IMAP
- Creación de cuentas de usuario
- Instalación del servidor webmail
- Administración del servidor
- Monitorización
- Instalación y configuración del cliente de correo
Vamos a implementar esta instalación sobre un servidor Debian, y todos los paquetes que utilicemos serán software libre y gratuito. Podíamos haber optado por la instalación de Exchange sobre MS Windows Server, pero además de la temática de este blog, existen otros inconvenientes. Aunque este software incluye la mayoría de paquetes que necesitamos, tendríamos que pagar las licencias del Server y de Exchange, unido a que necesitamos tenerlo todo en un entorno Active Directory con un DNS redundante, y que el equipo sobre el que vayamos a hacer la instalación debe tener al menos 128 GB de RAM, lo que en hardware y software, solo del servidor de correo, nos costará bastante caro.
Instalación y configuración
Partimos de la base de que ya tenemos instalado un Debian 11. Puedes ver como se hace esta instalación en «Como instalar Debian 11 «Bullseye»». Requeriremos, como mínimo 20 Gb de espacio en disco, 512 Mb de RAM y procesador de un nucleo. Vamos a hacer la instalación en local. Si fuese para producción, necesitaríamos un dominio en propiedad, abrir los puertos en el cortafuegos y añadir los registros A y MX al servidor DNS. Y lógicamente aumentar espacio de almacenamiento, RAM y mejor procesador en función de la cantidad de usuarios prevista.
Podemos elegir otras opciones como dovecot, d-push o procmail, pero en este caso lo implementaremos con postfix, Courier-pop, Courier-imap y RoundCube.
Vemos versión del Sistema Operativo, kernel y hostname.
hostname lsb_release -a o cat /etc/*-release

Obtención de un certificado digital
El primer paso es la obtención de un certificado digital para disponer de las versiones seguras de los protocolos HTTP, SMTP, POP e IMAP. En este punto tenemos la opción de la obtención de un certificado firmado digitalmente por una autoridad de certificación, lo podemos obtener con «Lets Encript» gratuitamente. O, como vamos a hacer, generar un certificado autofirmado. Si vas a tener el servidor en producción te recomiendo encarecidamente la primera opción. Puedes ver su procedimiento en «Instalar certificado para HTTPS con Certbot». Necesitaras un dominio de tu propiedad.
Para generar el certificado autofirmado tenemos que ejecutar el siguiente comando. Recuerda cambiar «dominio.local» por el que tengas en propiedad o por el nombre de dominio que quieras para tu servidor.
sudo openssl req -newkey rsa:4096 -nodes -sha512 -x509 -days 3650 -nodes -out /etc/ssl/certs/dominio.local.pem -keyout /etc/ssl/private/dominio.local.pem
Con este comando generarémos un fichero de clave y un certificado autofirmado con la información que le hayamos dado en las preguntas que nos hace en el proceso. Tendrá una validez de 10 años. Obtendremos una salida como sigue:

Podemos comprobar que se han creado con los siguientes comandos

Instalación del servidor SMTP
SMTP «Simple Mail Transfer Protocol» es un protocolo para transferencia simple de correo, un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre computadoras u otros dispositivos. En este caso, como servidor de transporte se empleará «Postfix», que es software libre de código abierto con licencia «IBM Public License» y «Eclipse Public License». Para instalarlo solo tenemos que ejecutar el siguiente comando
sudo apt-get install postfix -y

Durante la instalación, el asistente nos preguntará por el tipo de configuración. Deberemos seleccionar «Sitio de Internet», configuración por defecto, e introducir el dominio que antes hemos indicado para el certificado (dominio.local). Cuando termine la instalación tenemos que configurar el servicio. Para ello vamos al fichero «/etc/postfix/main.cf» y «/etc/postfix/master.cf».
En main.cf tenemos que configurar la ruta del certificado que hemos creado, el fichero de clave, el nombre de equipo y los dominios para los que el servidor podrá recibir correos, entre los que tendrá que existir el dominio con el que estamos trabajando (dominio.local). Aquí también tendremos que establecer el nombre del directorio del «home» de cada usuario en el que depositar los correos.
sudo nano /etc/postfix/main.cf
Veamos el contenido del fichero con los parámetros añadidos que se indican a continuación.
... smtpd_tls_cert_file = /etc/ssl/certs/dominio.local.pem smtpd_tls_key_file = /etc/ssl/private/dominio.local.pem ... myhostname = hostname_del_servidor.dominio.local ... mydestination = $myhostname, dominio.local ... home_mailbox = Maildir_mail

En el fichero master.cf, establecemos el modo de escucha del protocolo SMTP. Le indicamos que, ademas de por el puerto 25, escuche por los puertos 465 y 587.
sudo nano /etc/postfix/master.cf
Para ello descomentamos las siguientes lineas
... submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes ... smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes ...

Para aplicar los cambios tenemos la opción de ejecutar el script de postfix en «/etc/postfix/postfix-script» o utilizar systemd de la siguiente manera
sudo systemctl reload postfix.service
Y comprobamos el estado del servicio con
sudo systemctl status postfix.service

Instalación del servidor POP
POP «Post Office Protocol» (Protocolo de Oficina Postal) se utiliza en clientes locales de correo para obtener los mensajes de correo electrónico almacenados en un servidor remoto, denominado Servidor POP. Actualmente se utiliza la versión 3 «POP3».
Como servidor de entrega de correo utilizaremos «Courier-pop», software que se distribuye bajo licencia «GNU General Public License». Esto nos permitirá descargar los correos al cliente. Para instalarlo ejecutamos
sudo apt install courier-pop -y
En esta instalación, el asistente nos preguntará si deseamos crear los directorios para la administración basada en web, y le decimos que no. Nos saltará un aviso de que se necesitan certificados ssl y que estos se guardarán en los directorios «/etc/courier/pop3d.pem» y «/etc/courier/imapd.pem».

Aceptamos el mensaje para seguir con la instalación y una vez acabada sobreescribimos los certificados obtenidos anteriormente. Para suministrar el certificado y la clave asociada en el mismo fichero, concatenamos en el fichero «pop3d.pem» el contenido de la clave y el certificado que tenemos en «/etc/ssl/private/dominio.local.pem» y «/etc/ssl/certs/dominio.local.pem». Para esto tenemos que escalar privilegios y convertirnos en root.
su - cat /etc/ssl/private/dominio.local.pem >> /etc/courier/pop3d.pem cat /etc/ssl/certs/dominio.local.pem >> /etc/courier/pop3d.pem

Para modificar la configuración o cambiar directivas tendremos que editar los ficheros «/etc/courier/pop3d» y «/etc/courier/pop3d-ssl».
Instalación del servidor IMAP
IMAP «Internet Message Access Protocol» (protocolo de acceso a mensajes de Internet), es un protocolo que permite el acceso a mensajes almacenados en un servidor de Internet, sin descargarlos. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. Nos permitirá gestionar el correo en el servidor, crear carpetas, etiquetar correos, etc…
Para este propósito elegimos «Courier-imap», software distribuido con licencia «GNU General Public License». Para instalarlo ejecutamos
sudo apt-get install courier-imap -y

Tendremos que sobreescribir la clave y cetificado igual que con POP. Para esto tenemos que volver a escalar privilegios y convertirnos en root.
su - cat /etc/ssl/private/dominio.local.pem >> /etc/courier/imapd.pem cat /etc/ssl/certs/dominio.local.pem >> /etc/courier/imapd.pem

Para modificar la configuración o cambiar directivas tendremos que editar los ficheros «/etc/courier/imapd» y «/etc/courier/imapd-ssl».
Creación de cuentas de usuario
Ya tenemos un servidor de correo completamente funcional para gestionar todo el correo entrante y saliente de nuestro dominio. Es momento de crear cuentas de usuarios para probar su funcionamiento. Si queremos automatizar que las nuevas altas de usuarios, incluyan la estructura de buzones para usar en el servidor, tenemos que modificar el directorio «plantilla».
sudo mkdir -p /etc/skel/Maildir/cur /etc/skel/Maildir/new /etc/skel/Maildir/tmp

Para la creación de cuentas de usuario empleamos el comando «adduser».
sudo adduser juan sudo adduser pepe

Instalación del servidor webmail
Para la integración de los servidores que hemos instalado, necesitamos componentes extra, que instalamos manualmente. Elegimos la opción «RoundCube», software que se distribuye con licencia «GNU General Public License v3», ya que su interfaz es amigable y atractiva.
Los requisitos que requiere son los mismos que un servidor web, PHP y servidor de bases de datos. Vamos a instalarlos individualmente y configurarlos. «LAMP» (Linus, Apache, MySQL y PHP)
sudo apt install apache2

Instalamos Mysql.
sudo apt install mysql-server
Si te dice que el paquete no tiene candidato de instalación, ejecuta «apt-cache search mysql-server» y podrás localizar el que necesitas. En mi caso, para instalar MariaDB, ejecuto
sudo apt install mariadb-server-10.5

Acabada la instalación, ejecutaremos el asistente de configuración de MySQL. Desde MariaDB 10.5.2, «mysql_secure_installation» es el enlace simbólico y «mariadb-secure-installation» el nombre binario, nos funcionarán los dos.
sudo mariadb-secure-installation o sudo mysql_secure_installation

Nos encontraremos el asistente con las siguientes preguntas:
Para iniciar sesión en MariaDB para asegurarlo, necesitaremos el actual contraseña para el usuario root. Si acaba de instalar MariaDB y aún no ha configurado la contraseña de root, solo debe presionar enter aquí. Ingrese la contraseña actual para root (ingresar para ninguno): OK, contraseña usada con éxito, continuando... Establecer la contraseña de root o usar unix_socket asegura que nadie puede iniciar sesión en el usuario raíz de MariaDB sin la autorización adecuada. Ya tiene su cuenta raíz protegida, por lo que puede responder 'n' de manera segura. Cambiar a autenticación unix_socket [S/n] y ¡Habilitado con éxito! Recargando tablas de privilegios.. ... ¡Éxito! Ya tiene su cuenta raíz protegida, por lo que puede responder 'n' de manera segura. ¿Cambiar la contraseña de root? [S/n] n ... saltando. De forma predeterminada, una instalación de MariaDB tiene un usuario anónimo, lo que permite que cualquiera para iniciar sesión en MariaDB sin tener que tener una cuenta de usuario creada para a ellos. Esto está diseñado solo para probar y para hacer a la instalación ir un poco más suave. Debe eliminarlos antes de mudarse a un entorno de producción. ¿Eliminar usuarios anónimos? [S/n] s ... ¡Éxito! Normalmente, a root solo se le debería permitir conectarse desde 'localhost'. Este asegura que nadie pueda adivinar la contraseña de root de la red. ¿Deshabilitar el inicio de sesión raíz de forma remota? [S/n] s ... ¡Éxito! Por defecto, MariaDB viene con una base de datos llamada 'prueba' que cualquiera puede acceso. Esto también está destinado solo para pruebas, y debe eliminarse antes de pasar a un entorno de producción. ¿Eliminar la base de datos de prueba y acceder a ella? [S/n] s - Eliminando la base de datos de prueba... ... ¡Éxito! - Eliminando privilegios en la base de datos de prueba... ... ¡Éxito! Volver a cargar las tablas de privilegios garantizará que todos los cambios realizados hasta el momento surtirá efecto inmediatamente. ¿Recargar tablas de privilegios ahora? [S/n] s ... ¡Éxito! Limpiar... ¡Todo listo! Si completó todos los pasos anteriores, su MariaDB la instalación ahora debería ser segura. ¡Gracias por usar MariaDB!
E instalamos PHP. Necesitaremos los paquetes «php», «libapache2-mod-php» y «php-mysql».
sudo apt install php libapache2-mod-php php-mysql

instalación del webmail «RoundCube»
Una vez tenemos LAMP instalado y configurado, iniciamos la instalación del webmail «RoundCube».
sudo apt install roundcube -y
RoundCube necesita tener la base de datos configurada correctamente, por ello el asistente de instalación nos preguntará si deseamos configurar la base de datos con «dbconfig-common». Le decimos que si (y) y nos pedirá la contraseña de administración que hemos creado en el paso anterior al ejecutar «mariadb-secure-installation».

Para configurar webmail tenemos que seguir los siguientes pasos.
1.- Transformación de las peticiones inseguras en seguras. Si aceptasemos peticiones inseguras, de nada nos serviría haber configurado IMAP, POP y SMTP para conexiones seguras, y las credenciales de los usuarios viajarían sin encriptar. Para evitarlo editamos el fichero «/etc/apache2/sites-available/000-default.conf» y añadimos las siguientes directivas.
sudo nano /etc/apache2/sites-available/000-default.conf
... RewriteEngine On RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301] ...

2.- Configuración del «virtual host» que antenderá a las peticiones seguras. Editamos el fichero «/etc/apache2/sites-available/default-ssl.conf». Tenemos que actualizar las directivas con las que se indica el certificado SSL/TLS que va a utilizar. Incluimos el contenido del fichero de configuración de «RoundCube» y creamos un alias para que las peticiones al webmail se sirvan desde el fichero almacenado en «/var/lib/roundcube».
sudo nano /etc/apache2/sites-available/default-ssl.conf
... SSLCertificateFile /etc/ssl/certs/dominio.local.pem SSLCertificateKeyFile /etc/ssl/private/dominio.local.pem Include /etc/roundcube/apache.conf Alias /rouncube /var/lib/roundcube ...

3.- Activación del sitio seguro y los módulos necesarios. Ejecutamos los scripts
Nos puede pedir que recarguemos el servicio apache. En la siguiente captura puedes ver como.

sudo a2ensite default-ssl.conf sudo a2enmod alias rewrite ssl sudo systemctl restart apache2

4.- Establecimiento de parametros de conexión segura entre Roundcube y los servicios IMAP-SMTP. Editamos el fichero «/etc/roundcube/config.inc.php». Debe quedarnos como sigue.
sudo nano /etc/roundcube/config.inc.php
... $config['default_host'] = 'ssl://dominio.local'; $config['default_port'] = '993'; $config['imap_conn_options'] = array( 'ssl' => array( 'verify_peer' => true, 'allow_self_signed' => true, 'peer_name' => 'dominio.local', 'ciphers' => 'TLSv1.2+HIGH:!a Null:@STRENGTH' ), ); $config['smtp_server'] = 'ssl://dominio.local'; $config['smtp_port'] = '465'; $config['smtp_user'] = "; $config['smtp_pass'] = "; $config['smtp_conn_options'] = array( 'ssl' => array( 'verify_peer' => true, 'allow_self_signed' => true, 'peer_name' => 'dominio.local', 'ciphers' => 'TLSv1.2+HIGH:!a Null:@STRENGTH' ), ); ...

Administración del servidor
Para administrar el servidor tenemos que tener en cuenta que se trata de varios servicios y que tenemos que operar sobre ellos de forma independiente. Postfix estará a la escucha por los puertos 25, 465 y 587, y su administración se realiza sobre el mismo servicio.
Los servidores POP e IMAP escuchan por puertos seguros y no seguros, por ello tenemos que hacer referencia al servicio que atienden peticiones seguras o inseguras de forma explicita. Lo hacemos con «systemctl».
sudo systemctl [restart|reload|start|status|stop] postfix.service | courier-pop.service | courier-pop-ssl.service | courier-imap.service | courier-imap-ssl.service
Monitorización
Para monitorizar los servicios tenemos los ficheros de log en las siguientes ubicaciones.
- 1.- /var/log/mail.log. Registra los eventos del servidor o los servicios relacionados
- 2.- /var/log/roundcube/errors. Registro de los errores de webmail Roundcube
- 3.- /var/log/sendmail. Registra los correos enviados
Para asegurarnos de los puertos por los que está escuchando el servidor ejecutamos
netstat -atun

Si no tienes las herramientas de red instaladas las instalas con
sudo apt install net-tools
Instalación y configuración del cliente de correo
Aquí cada usuario, para recoger o enviar correos, puede utilizar el cliente de correo que más le guste. Hay muchisimas opciones entre las que cabe destacar «Evolution», «Mozilla Thunderbird», «Mailspring», «Claws», «Sylpheed», etc…
En Debian tenemos por defecto instalado Evolution. Solo tienes que seguir los pasos de configuración y añadir cuenta de correo y el servidor. En la siguiente captura puedes ver el programa funcionando con la cuenta de juan.

Las configuraciones predeterminadas son válidas, solo tendrás que establecer la dirección de correo-e, servidor, protocolos elegidos (POP o IMAP), credenciales del usuario y uso de SSL/TLS. Todo lo encontraras en «Configuración» > «Editar cuentas» > «Añadir».
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.