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.


