En este momento estás viendo Instalación de un servidor de correo-e

Instalación de un servidor de correo-e

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
Hostname, S.O. y kernel

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:

Generación de certificado autofirmado

Podemos comprobar que se han creado con los siguientes comandos

comprobación del certificado y clave

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
Configuración de Postfix

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
Configuración del fichero main.cf

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
... 
configuración del fichero master.cf

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
Comprobación del estado del servicio

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».

Configuración de courier

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
Añadir certificado al servidor courier

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
Instalación de courier-imap

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
certificados en courier imap

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
Creación de directorio para el correo

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

sudo adduser juan
sudo adduser pepe
Creación d usuarios

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
Instalación de apache

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
Instalación de mariaDB

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
Instalación segura de MariaDB

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 de PHP

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».

Instalación de roundcube

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]
...
Transformación de peticiones inseguras a seguras

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
...
Añadir certificado y clave

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.

Recargamos el servicio con los certificados
sudo a2ensite default-ssl.conf
sudo a2enmod alias rewrite ssl
sudo systemctl restart apache2
Reiniciamos el servicio apache

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'         
	),
);    
...
Script PHP

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
Listado de puertos abiertos y protocolos

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.

Cuenta de juan en evolutión

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.

Deja una respuesta

This site uses Akismet to reduce spam. Learn how your comment data is processed.