Instalación de Mailcow: Servidor de Correo Dockerizado

Mailcow es una suite de servidor de correo completa basada en Docker que integra Postfix, Dovecot, SOGo, Rspamd y más en un único stack gestionable. Con soporte para múltiples dominios, antispam avanzado, webmail, DKIM/DMARC y una interfaz de administración web intuitiva, Mailcow es la solución más completa para gestionar correo propio en un servidor Linux.

Requisitos Previos

  • Servidor Linux (Ubuntu 20.04/22.04 o Debian 11/12 recomendados)
  • Mínimo 4 GB de RAM (6 GB recomendado)
  • 20 GB de almacenamiento mínimo
  • Docker Engine 20.10+ y Docker Compose v2
  • Dominio con acceso a la configuración DNS
  • IP pública estática (preferiblemente sin historial de spam)
  • Puerto 25 (SMTP) no bloqueado por el proveedor

Preparación del Servidor

# Actualizar el sistema
sudo apt update && sudo apt upgrade -y

# Instalar Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Instalar Docker Compose v2
sudo apt install -y docker-compose-plugin

# Verificar instalaciones
docker --version
docker compose version

# Configurar el hostname del servidor (muy importante para el correo)
sudo hostnamectl set-hostname mail.tudominio.com

# Verificar que el hostname resuelve correctamente
hostname -f

# Deshabilitar AppArmor para Mailcow (si está activo en Ubuntu)
sudo systemctl disable apparmor

Configura el fichero /etc/hosts:

# Editar /etc/hosts - el hostname debe resolver a la IP pública
sudo tee -a /etc/hosts << 'EOF'
TU_IP_PUBLICA   mail.tudominio.com mail
EOF

Instalación de Mailcow

# Clonar el repositorio oficial de Mailcow
cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

# Generar la configuración inicial
sudo ./generate_config.sh

# Durante el proceso, introduce:
# - Hostname del servidor de correo: mail.tudominio.com
# - Zona horaria: Europe/Madrid

El script genera mailcow.conf. Revisa y ajusta los parámetros clave:

# Ver y editar la configuración generada
sudo nano mailcow.conf

# Parámetros importantes a verificar:
# MAILCOW_HOSTNAME=mail.tudominio.com
# TZ=Europe/Madrid
# HTTP_PORT=80
# HTTPS_PORT=443
# SKIP_LETS_ENCRYPT=n  (n = usar Let's Encrypt)
# SKIP_CLAMD=n         (n = habilitar antivirus ClamAV)
# SKIP_SOGO=n          (n = habilitar SOGo webmail)
# Iniciar Mailcow (la primera vez descarga todas las imágenes)
sudo docker compose pull
sudo docker compose up -d

# Seguir el progreso del inicio (puede tardar 2-5 minutos)
sudo docker compose logs -f

# Verificar que todos los contenedores están corriendo
sudo docker compose ps

Configuración de DNS

Registros DNS esenciales para el correo (sustituye tudominio.com y la IP real):

; Registro MX - define el servidor de correo del dominio
tudominio.com.        IN MX  10 mail.tudominio.com.

; Registro A del servidor de correo
mail.tudominio.com.   IN A   TU_IP_PUBLICA

; SPF - autoriza el servidor a enviar correo del dominio
tudominio.com.        IN TXT "v=spf1 mx a:mail.tudominio.com ~all"

; DMARC - política de autenticación del correo
_dmarc.tudominio.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100"

; PTR (rDNS) - debe configurarse con tu proveedor de VPS
; TU_IP_PUBLICA  →  mail.tudominio.com

; DKIM - se genera desde la interfaz de Mailcow (ver siguiente sección)
; mail._domainkey.tudominio.com.  IN TXT  "v=DKIM1; k=rsa; p=CLAVE_PUBLICA"

; TLSRPT - reportes TLS (opcional pero recomendado)
_smtp._tls.tudominio.com. IN TXT "v=TLSRPTv1; rua=mailto:[email protected]"

; MTA-STS (opcional - mejora la seguridad del transporte)
_mta-sts.tudominio.com.   IN TXT "v=STSv1; id=20240101"

Genera y configura el registro DKIM desde Mailcow:

1. Accede a https://mail.tudominio.com (admin/moohoo es la contraseña por defecto)
2. Ve a: Configuración de correo > Dominios > tudominio.com
3. Haz clic en el icono de llave DKIM
4. Selecciona longitud de clave: 2048 bits
5. Copia el registro TXT generado y añádelo a tu DNS

Gestión de Dominios y Buzones

# Cambiar la contraseña de administrador (¡imprescindible!)
# Accede a https://mail.tudominio.com con admin/moohoo
# Ve a: Acceso > Editar administrador > Cambiar contraseña

# Añadir un nuevo dominio via API de Mailcow
curl -X POST "https://mail.tudominio.com/api/v1/add/domain" \
  -H "X-API-Key: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "otrodominio.com",
    "description": "Dominio secundario",
    "aliases": 0,
    "mailboxes": 10,
    "maxquota": 10240,
    "quota": 10240,
    "active": "1",
    "backupmx": "0",
    "relay_all_recipients": "0"
  }'

# Crear un buzón via API
curl -X POST "https://mail.tudominio.com/api/v1/add/mailbox" \
  -H "X-API-Key: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "local_part": "usuario",
    "domain": "tudominio.com",
    "name": "Nombre Usuario",
    "password": "ContraseñaSegura123!",
    "quota": "1024",
    "active": "1"
  }'

SOGo Webmail

SOGo proporciona webmail, calendario y contactos. Accede en: https://mail.tudominio.com/SOGo

Configuración recomendada para SOGo en mailcow.conf:

# Ajustes de SOGo disponibles mediante variables en mailcow.conf
# Para configuración avanzada, editar el fichero de SOGo directamente

# Ver la configuración actual de SOGo
sudo docker exec -it $(sudo docker ps -q -f name=sogo) \
  cat /etc/sogo/sogo.conf

Rspamd y Antispam

Rspamd es el motor antispam de Mailcow. Accede a su interfaz en: https://mail.tudominio.com/rspamd

# Ver estadísticas de spam en tiempo real
sudo docker exec -it $(sudo docker ps -q -f name=rspamd) \
  rspamc stat

# Entrenar el filtro Bayes con un correo como spam
sudo docker exec -it $(sudo docker ps -q -f name=rspamd) \
  rspamc learn_spam < /ruta/al/correo.eml

# Entrenar el filtro Bayes con un correo legítimo (ham)
sudo docker exec -it $(sudo docker ps -q -f name=rspamd) \
  rspamc learn_ham < /ruta/al/correo-legitimo.eml

# Ajustar umbrales de spam (en la interfaz web de Rspamd)
# O via fichero de configuración en el volumen de Mailcow

Backups y Actualizaciones

# Script de backup automático incluido en Mailcow
cd /opt/mailcow-dockerized

# Ver opciones del script de backup
sudo ./helper-scripts/backup_and_restore.sh backup help

# Hacer backup completo
sudo ./helper-scripts/backup_and_restore.sh backup all

# Los backups se guardan en /var/mailcow/backup/ por defecto

# Programar backup diario con cron
echo "0 3 * * * root /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all" \
  | sudo tee /etc/cron.d/mailcow-backup

# Restaurar desde backup
sudo ./helper-scripts/backup_and_restore.sh restore \
  /var/mailcow/backup/FECHA_DEL_BACKUP

Actualizar Mailcow a la última versión:

cd /opt/mailcow-dockerized

# Actualizar usando el script oficial
sudo ./update.sh

# El script:
# 1. Hace git pull del repositorio
# 2. Para los contenedores
# 3. Descarga nuevas imágenes
# 4. Aplica migraciones
# 5. Reinicia los contenedores

Solución de Problemas

Puerto 25 bloqueado por el proveedor:

# Verificar si el puerto 25 está bloqueado
telnet smtp.gmail.com 25

# Si está bloqueado, usar un relay SMTP (por ejemplo, SendGrid)
# Configurar en: Configuración > Configuración > Relay
# Host de relay: smtp.sendgrid.net:587
# Usuario: apikey
# Contraseña: TU_API_KEY_SENDGRID

Correos marcados como spam:

# Verificar SPF, DKIM y DMARC
# Herramienta online: https://mxtoolbox.com/

# Ver por qué un correo fue marcado como spam
sudo docker exec -it $(sudo docker ps -q -f name=rspamd) \
  rspamc check < correo.eml

# Ver logs de Postfix
sudo docker logs $(sudo docker ps -q -f name=postfix) --tail 100

Contenedor de base de datos no arranca:

# Ver logs del contenedor MySQL
sudo docker logs $(sudo docker ps -q -f name=mysql-mailcow) --tail 50

# Reparar la base de datos si hay corrupción
sudo docker exec $(sudo docker ps -q -f name=mysql-mailcow) \
  mysqlcheck -u root -p --all-databases --auto-repair

Certificado SSL no se renueva:

# Forzar renovación del certificado
sudo docker exec $(sudo docker ps -q -f name=acme-mailcow) \
  /bin/bash -c "FORCE=1 ./acme.sh"

# Ver logs del proceso ACME
sudo docker logs $(sudo docker ps -q -f name=acme-mailcow)

Conclusión

Mailcow proporciona una plataforma de servidor de correo completa y lista para producción en cuestión de minutos gracias a su arquitectura Docker. La combinación de Postfix, Dovecot, Rspamd y SOGo cubre todas las necesidades de un servidor de correo moderno, desde el filtrado de spam hasta el webmail colaborativo. Mantén el sistema actualizado regularmente y monitoriza la reputación de tu IP para garantizar una entregabilidad óptima.