--- title: "Cómo instalar el servidor de correo Maddy en Ubuntu 24.04" description: "Instala Maddy en Ubuntu 24.04 como servidor de correo SMTP e IMAP en un solo binario, con TLS de Let's Encrypt, firma DKIM, registros DNS y buzones de usuario." category: "Email Avanzado" language: es source: https://cubepath.com/es/docs/email-avanzado/instalacion-de-maddy-servidor-de-correo-composable updated: 2026-09-25 --- # Cómo instalar el servidor de correo Maddy en Ubuntu 24.04 Maddy es un servidor de correo escrito en Go que reúne en un único binario lo que normalmente reparten Postfix, Dovecot y OpenDKIM: recepción SMTP, envío autenticado (submission), IMAP, firma DKIM y comprobaciones SPF/DMARC. En este tutorial instalarás Maddy en Ubuntu 24.04, lo configurarás con un certificado de Let's Encrypt, publicarás los registros DNS necesarios y crearás un buzón con el que enviar y recibir correo. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM. - Un usuario no root con privilegios `sudo`. - Un dominio propio (en esta guía, `tudominio.com`) con acceso a su zona DNS. - Un registro A para `mail.tudominio.com` que apunte a la IP pública del servidor (`ip_del_servidor`). - Un registro PTR (DNS inverso) de la IP que resuelva a `mail.tudominio.com`. Se configura desde el panel del proveedor de la IP o solicitándolo a su soporte. - El puerto 25 saliente permitido. Muchos proveedores lo bloquean por defecto para evitar spam; si es tu caso, pide su apertura antes de empezar. Sustituye `tudominio.com`, `mail.tudominio.com` e `ip_del_servidor` por tus valores en todos los comandos. ## Paso 1: Descargar e instalar el binario Maddy publica binarios estáticos comprimidos con zstd. Instala `zstd` para poder descomprimirlos: ```bash sudo apt update sudo apt install zstd ``` Consulta la última versión estable en la [página de releases de Maddy](https://github.com/foxcpp/maddy/releases) y guárdala en una variable (sin la `v` inicial): ```bash MADDY_VERSION=0.8.1 ``` Descarga y extrae el archivo para x86_64: ```bash cd /tmp wget "https://github.com/foxcpp/maddy/releases/download/v${MADDY_VERSION}/maddy-${MADDY_VERSION}-x86_64-linux-musl.tar.zst" tar --zstd -xf "maddy-${MADDY_VERSION}-x86_64-linux-musl.tar.zst" ls "maddy-${MADDY_VERSION}-x86_64-linux-musl" ``` El archivo incluye el binario, una configuración de ejemplo y las unidades de systemd: ```output maddy maddy.conf man systemd ``` Instala el binario en `/usr/local/bin` y comprueba que se ejecuta: ```bash cd "maddy-${MADDY_VERSION}-x86_64-linux-musl" sudo install -m 0755 maddy /usr/local/bin/maddy maddy version ``` La salida muestra la versión instalada, por ejemplo `0.8.1 linux/amd64`. ## Paso 2: Crear el usuario, la configuración y el servicio Maddy debe ejecutarse con un usuario sin privilegios. Crea el usuario `maddy` con su directorio de estado en `/var/lib/maddy`, donde guardará los buzones, la cola y las claves DKIM: ```bash sudo useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy ``` Copia la configuración de ejemplo y las unidades de systemd que vienen en el archivo (sigues dentro del directorio extraído): ```bash sudo install -d -m 0755 /etc/maddy sudo install -m 0644 maddy.conf /etc/maddy/maddy.conf sudo cp systemd/maddy.service systemd/maddy@.service /etc/systemd/system/ sudo systemctl daemon-reload ``` Comprueba que la unidad apunta a la ruta donde instalaste el binario: ```bash grep ExecStart /etc/systemd/system/maddy.service ``` La salida debe contener `/usr/local/bin/maddy`. La unidad ya incluye `AmbientCapabilities=CAP_NET_BIND_SERVICE`, que permite al usuario `maddy` escuchar en los puertos 25, 465, 587 y 993 sin ser root. No arranques el servicio todavía: falta el certificado. ## Paso 3: Obtener un certificado TLS con Certbot Maddy necesita un certificado válido para `mail.tudominio.com`, tanto para IMAP y submission como para el STARTTLS del puerto 25. Abre en UFW los puertos del correo y el 80, que Certbot usa para validar el dominio: ```bash sudo ufw allow OpenSSH sudo ufw allow 25,80,465,587,993/tcp sudo ufw enable sudo ufw status ``` Instala Certbot y solicita el certificado en modo standalone (el puerto 80 debe estar libre): ```bash sudo apt install certbot acl sudo certbot certonly --standalone -d mail.tudominio.com ``` ```output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mail.tudominio.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/mail.tudominio.com/privkey.pem ``` Los certificados solo los puede leer root. En lugar de copiarlos, concede lectura al usuario `maddy` con una ACL: ```bash sudo setfacl -R -m u:maddy:rX /etc/letsencrypt/live /etc/letsencrypt/archive ``` Para que la ACL se vuelva a aplicar y Maddy cargue el certificado nuevo en cada renovación, crea un hook de despliegue: ```bash sudo nano /etc/letsencrypt/renewal-hooks/deploy/maddy.sh ``` ```bash #!/usr/bin/env bash set -euo pipefail setfacl -R -m u:maddy:rX /etc/letsencrypt/live /etc/letsencrypt/archive systemctl restart maddy ``` Hazlo ejecutable: ```bash sudo chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/maddy.sh ``` ## Paso 4: Configurar el dominio en maddy.conf La configuración de ejemplo ya define un servidor completo: SMTP entrante en el puerto 25, submission en 465 y 587, IMAP en 993 y 143, almacenamiento en SQLite, cola de salida con reintentos y firma DKIM. Solo tienes que ajustar el dominio y la ruta del certificado. Abre el archivo: ```bash sudo nano /etc/maddy/maddy.conf ``` Edita las primeras líneas para que queden así: ```text $(hostname) = mail.tudominio.com $(primary_domain) = tudominio.com $(local_domains) = $(primary_domain) tls file /etc/letsencrypt/live/$(hostname)/fullchain.pem /etc/letsencrypt/live/$(hostname)/privkey.pem ``` - `$(hostname)` es el nombre con el que el servidor se presenta y debe coincidir con el registro PTR. - `$(primary_domain)` es el dominio de las direcciones de correo. - `$(local_domains)` admite varios dominios separados por espacios si quieres alojar más de uno. El resto del archivo puede quedarse como está para empezar. Arranca Maddy y habilítalo al inicio: ```bash sudo systemctl enable --now maddy sudo systemctl status maddy --no-pager ``` ```output ● maddy.service - maddy mail server Loaded: loaded (/etc/systemd/system/maddy.service; enabled; preset: enabled) Active: active (running) since ... ``` Comprueba que está escuchando en todos los puertos del correo: ```bash sudo ss -tlnp | grep maddy ``` Deberías ver `:25`, `:143`, `:465`, `:587` y `:993`. Si el servicio no arranca, revisa el motivo con `sudo journalctl -u maddy -n 50 --no-pager`. ## Paso 5: Publicar los registros DNS En el primer arranque Maddy genera automáticamente la clave DKIM del dominio con el selector `default`. El valor del registro TXT está listo para copiar: ```bash sudo cat /var/lib/maddy/dkim_keys/tudominio.com_default.dns ``` ```output v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... ``` Crea estos registros en la zona DNS de `tudominio.com`: | Tipo | Nombre | Valor | |------|--------|-------| | A | `mail` | `ip_del_servidor` | | MX | `@` | `10 mail.tudominio.com.` | | TXT | `@` | `v=spf1 mx ~all` | | TXT | `_dmarc` | `v=DMARC1; p=quarantine; ruf=mailto:postmaster@tudominio.com` | | TXT | `default._domainkey` | el contenido del archivo `.dns` anterior | Espera a que se propaguen y compruébalos: ```bash dig +short MX tudominio.com dig +short TXT tudominio.com dig +short TXT default._domainkey.tudominio.com dig +short -x ip_del_servidor ``` La última consulta debe devolver `mail.tudominio.com.`. Sin un PTR coherente, Gmail y Outlook rechazarán o enviarán a spam gran parte de tu correo. ## Paso 6: Crear el primer buzón Maddy separa las credenciales (para autenticarse) de la cuenta IMAP (donde se guardan los mensajes), así que cada usuario necesita ambas. Crea `postmaster@tudominio.com`; el primer comando te pedirá la contraseña: ```bash sudo -u maddy maddy creds create postmaster@tudominio.com sudo -u maddy maddy imap-acct create postmaster@tudominio.com ``` Comprueba que existen: ```bash sudo -u maddy maddy creds list sudo -u maddy maddy imap-acct list ``` ```output postmaster@tudominio.com ``` Para cambiar una contraseña más adelante usa `sudo -u maddy maddy creds password postmaster@tudominio.com`. ## Paso 7: Probar el envío y la recepción Instala `swaks`, una herramienta para probar servidores SMTP, y envía un correo autenticado por el puerto 587 a una cuenta externa tuya (te pedirá la contraseña del buzón): ```bash sudo apt install swaks swaks --to tu_cuenta@gmail.com --from postmaster@tudominio.com \ --server mail.tudominio.com --port 587 --tls \ --auth LOGIN --auth-user postmaster@tudominio.com ``` La respuesta final del servidor debe empezar por `250`, lo que indica que el mensaje se ha aceptado y está en cola. Abre el correo en el destino y muestra el original: las cabeceras deben indicar `spf=pass`, `dkim=pass` y `dmarc=pass`. Responde a ese correo desde la cuenta externa y sigue el log para ver cómo llega: ```bash sudo journalctl -u maddy -f ``` Por último, configura el buzón en un cliente como Thunderbird: | Parámetro | Valor | |-----------|-------| | IMAP | `mail.tudominio.com`, puerto 993, SSL/TLS | | SMTP | `mail.tudominio.com`, puerto 465 (SSL/TLS) o 587 (STARTTLS) | | Usuario | `postmaster@tudominio.com` | ## Solución de problemas **El servicio falla con `status=226/NAMESPACE`.** Alguna ruta de `ReadWritePaths` o `ReadOnlyPaths` de la unidad no existe. Revisa las directivas con `systemctl cat maddy` y crea el directorio que falte. **`permission denied` al leer el certificado.** La ACL no se aplicó o se perdió tras una renovación. Vuelve a ejecutar `sudo setfacl -R -m u:maddy:rX /etc/letsencrypt/live /etc/letsencrypt/archive` y reinicia Maddy. **El correo saliente se queda en cola.** Comprueba si el puerto 25 saliente está abierto: ```bash nc -vz -w 5 gmail-smtp-in.l.google.com 25 ``` Si la conexión caduca, el bloqueo está en el proveedor y debes solicitar su apertura. **Los mensajes llegan a spam.** Verifica que PTR, SPF, DKIM y DMARC coinciden con `mail.tudominio.com` y revisa la reputación de la IP en listas negras públicas. ## Conclusión Tienes un servidor de correo completo con Maddy: recibe correo para tu dominio, lo guarda en buzones IMAP y envía mensajes firmados con DKIM a través de una conexión cifrada. Como siguientes pasos, puedes añadir más dominios en `$(local_domains)`, publicar una política MTA-STS para forzar TLS en la entrega y programar copias de seguridad de `/var/lib/maddy`, que contiene todos los buzones y la clave DKIM.