Asegurar tu servidor de correo gestionado ISPConfig 3 con un certificado SSL Let’s Encrypt válido

Si estás ejecutando tu propio servidor de correo, la mejor práctica es conectarte a él de forma segura con una conexión SSL/TLS. Necesitarás un certificado válido para estas conexiones seguras. En este tutorial, configuraremos un certificado Let’s Encrypt para nuestro servidor de correo que se renueve automáticamente.

Advertencia: Este tutorial está basado en este tutorial: https://www.howtoforge.com/tutorial/securing-ispconfig-3-with-a-free-lets-encrypt-ssl-certificate/ pero modificado para que tengas un certificado independiente para tu servidor de correo y tu panel de control. Si has seguido ese tutorial antes, este tutorial podría romper tu configuración.

Este tutorial utiliza certificados emitidos por acme.sh. Si utilizas certbot, sigue este tutorial en su lugar: https://www.howtoforge.com/community/threads/securing-your-ispconfig-3-managed-mailserver-with-a-valid-lets-encrypt-ssl-certificate-certbot.86372/

Nota para ISPConfig 3.2: ISPConfig 3.2 es capaz de crear un certificado SSL Let’s Encrypt válido para el nombre de host del servidor automáticamente durante la instalación, que se utiliza también para el servidor de correo. No es necesario crear manualmente un certificado Let’s Encrypt SSL como se describe aquí en sistemas ISPConfig 3.2 a menos que necesites diferentes nombres de dominio en el certificado SSL junto al nombre de host del servidor.

Requisitos previos

  • Tu servidor debe estar instalado según el tutorial Servidor Perfecto para tu SO.
  • Asegúrate de que has iniciado sesión como usuario root.

Cómo empezar

Utilizaré los siguientes nombres de host para mi servidor de correo: mail.ejemplo.com, smtp.ejemplo.com, imap.ejemplo.com.

Sustituye todos los nombres de host subrayados en rojo en este tutorial por los tuyos.

Crea los registros DNS para tu(s) nombre(s) de host, de modo que apunten a tu servidor. Deberían ser registros A (y eventualmente AAAA). Luego, en la interfaz de ISPConfig, ve a la pestaña Sitios.

Emitir el certificado

En Sitios, haz clic en «Añadir nuevo sitio web». Establece mail.ejemplo. com como dominio. Desactiva Auto-Subdominio, y marca la casilla Let’s Encrypt.

Después puedes añadir tus otros nombres de host como dominios alias, yendo a la lista de aliasdominios y haciendo clic en «Añadir nuevo aliasdominio». Selecciona smtp.ejemplo. com como dominio, y mail.ejemplo.com como sitio web principal. Desactiva el subdominio automático y guarda el nuevo registro. Repite esta operación para el resto de tus nombres de host.

Comprueba que el certificado está en su sitio. Puedes hacerlo con una herramienta como https://www.sslshopper.com/ssl-checker.html

Debería tener este aspecto:

Captura de pantalla de la comprobación SSL

Si el nombre o nombres de host aparecen en la lista y no hay otros errores, puedes continuar. En caso contrario, comprueba los errores y resuélvelos antes de seguir adelante.

Sustituir el certificado por el de Let’s Encrypt

Ahora podemos sustituir el certificado actual por tu certificado de confianza. Accede a tu servidor y ejecuta estos comandos:

(sustituye mail.ejemplo.com por el nombre de host que utilizaste para el sitio web)

cd /etc/postfix/
mv smtpd.cert smtpd.cert-$(date +"%y%m%d%H%M%S").bak
mv smtpd.key smtpd.key-$(date +"%y%m%d%H%M%S").bak
ln -s /root/.acme.sh/mail.example.com/fullchain.cer smtpd.cert
ln -s /root/.acme.sh/mail.example.com/mail.example.com.key smtpd.key
systemctl restart postfix
systemctl restart dovecot

El certificado debería utilizarse ahora para tu servidor Postfix y Dovecot. Pero aún no hemos terminado. El certificado Let’s Encrypt se renueva cada 60 días, por lo que debemos automatizar el proceso de sustitución del certificado en el futuro, para que no te olvides de ello.

Configura un script de renovación automática

Abre un nuevo archivo de script:

nano /etc/init.d/le_mailserver_restart.sh

Pega esto en ese archivo:

#!/bin/sh
### BEGIN INIT INFO
# Provides: LE MAILSERVER CERT AUTO UPDATER
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: LE MAILSERVER CERT AUTO UPDATER
# Description: Restart mail server automatically when a new Let's Encrypt certificate is issued.
### END INIT INFO
systemctl restart postfix
systemctl restart dovecot

Haz que el script sea ejecutable:

chmod +x /etc/init.d/le_mailserver_restart.sh

Para activar automáticamente este script en la renovación, vamos a utilizar systemd.

Crea y abre el nuevo servicio systemd:

nano /etc/systemd/system/le-mailserver-restart.service

Pega esto en ese archivo:

[Unit] 
Description="Run script to restart Postfix and Dovecot after the certificate has been renewed"

[Service]
ExecStart=/etc/init.d/le_mailserver_restart.sh

Guarda y cierra este archivo. A continuación, crea y abre el nuevo archivo de ruta de systemd:

nano /etc/systemd/system/le-mailserver-restart.path

Pega esto en ese archivo y sustituye mail.ejemplo.com por el nombre de host que has utilizado:

[Unit]
Description="Monitor the mailserver certificate files to trigger a e-mail services restart after the certificates has been renewed"

[Path]
PathModified=/root/.acme.sh/mail.example.com/
Unit=le-mailserver-restart.service

[Install]
WantedBy=multi-user.target

Guarda y cierra este archivo. A continuación, inicia el servicio y habilítalo para que se ejecute al inicio:

systemctl start le-mailserver-restart.path

Y habilítalo para que se ejecute al inicio:

systemctl enable le-mailserver-restart.path

¡Y ya está!

¿No funciona?

Una vez tuve un problema con esto, porque Let’s Encrypt utilizaba uno de los dominios alias como dominio principal. Puedes encontrar el dominio principal en la herramienta SSL mencionada anteriormente como «Nombre común» o listando el contenido de /root/acme.sh/ para ver cuál de los (alias)dominios tiene una carpeta allí.

Si sigues teniendo problemas, abre un hilo de conversación en el foro para que otros puedan ayudarte.

Scroll al inicio