Un servidor de correo dedicado te permite tener el control absoluto de tus co­mu­ni­ca­cio­nes digitales. En esta guía apre­n­de­rás cómo co­n­fi­gu­rar tu propio servidor de correo ele­c­tró­ni­co con Docker, gracias a una pre­se­n­ta­ción detallada de todos los pasos, desde los re­qui­si­tos iniciales y las re­co­me­n­da­cio­nes de seguridad hasta un tutorial detallado paso a paso. Con las pilas de co­n­te­ne­do­res de Docker listas para usar, como Docker mail server, desplegar una solución de correo segura y escalable es ahora más fácil que nunca.

¿Qué es un servidor de correo con Docker?

Un servidor de correo con Docker es una solución de correo ele­c­tró­ni­co au­to­alo­ja­da que funciona en co­n­te­ne­do­res con Docker. Permite enviar, recibir y almacenar correos, con total control sobre la pri­va­ci­dad de los datos, las políticas de seguridad y la co­n­fi­gu­ra­ción del sistema. A di­fe­re­n­cia de servicios externos como Gmail o Outlook, un servidor de correo con Docker te da el control completo de tu in­frae­s­tru­c­tu­ra, lo que lo convierte en una opción ideal para de­sa­rro­lla­do­res, usuarios que valoran la pri­va­ci­dad y pequeñas empresas.

¿Por qué usar Docker para un servidor de correo?

Utilizar Docker para alojar tu servidor de correo tiene varias ventajas clave:

  • Ai­s­la­mie­n­to y seguridad: los co­n­te­ne­do­res de Docker aíslan el servidor de correo del resto del sistema, lo que reduce el riesgo de co­m­pro­me­ter todo el entorno y mejora la seguridad.
  • Po­r­ta­bi­li­dad: los co­n­te­ne­do­res se pueden mover fá­ci­l­me­n­te entre distintos entornos, ga­ra­n­ti­za­n­do una co­n­fi­gu­ra­ción coherente tanto en se­r­vi­do­res locales como en la nube.
  • De­s­plie­gue si­m­pli­fi­ca­do: Docker ofrece pilas (o stacks) pre­co­n­fi­gu­ra­das que si­m­pli­fi­can el proceso de in­s­ta­la­ción y evitan co­n­fi­gu­ra­cio­nes manuales complejas.
  • Es­ca­la­bi­li­dad: es posible escalar fá­ci­l­me­n­te los co­n­te­ne­do­res para adaptarse al cre­ci­mie­n­to del tráfico de correo y a las ne­ce­si­da­des ca­m­bia­n­tes de recursos.
  • Control de versiones: puedes es­pe­ci­fi­car versiones concretas de las imágenes Docker para evitar problemas de co­m­pa­ti­bi­li­dad y facilitar posibles re­tro­ce­sos.
  • Co­n­si­s­te­n­cia entre entornos: Docker asegura una co­n­fi­gu­ra­ción uniforme en los entornos de de­sa­rro­llo, pruebas y pro­du­c­ción.
Servidor de correo pro­fe­sio­nal
Servidor de correo ele­c­tró­ni­co con control total
  • Con los es­tá­n­da­res más altos de seguridad
  • Cifrado au­to­má­ti­co con SSL/TLS
  • Data centers geo­rre­du­n­da­n­tes con ce­r­ti­fi­ca­do ISO 27001
  • IMAP & SMTP

¿Cuáles son los re­qui­si­tos para ejecutar un servidor de correo con Docker?

Nota

Esta guía está dirigida a usuarios con co­no­ci­mie­n­tos técnicos, fa­mi­lia­ri­za­dos con Linux y Docker, que buscan una in­frae­s­tru­c­tu­ra de correo ele­c­tró­ni­co privada y flexible. Es es­pe­cia­l­me­n­te útil para de­sa­rro­lla­do­res, ad­mi­ni­s­tra­do­res de sistemas y pequeñas empresas.

Para alojar tu propio servidor de correo con Docker, ne­ce­si­ta­rás recursos de hardware su­fi­cie­n­tes, en función del volumen de correos esperado. Es im­pre­s­ci­n­di­ble disponer de una dirección IPv4 estática para ga­ra­n­ti­zar una co­mu­ni­ca­ción fluida del servidor de correo. Además, es fu­n­da­me­n­tal co­n­fi­gu­rar co­rre­c­ta­me­n­te los registros DNS, incluidos MX, SPF, DKIM y DMARC. El soporte para IPv6 es cada vez más im­po­r­ta­n­te, ya que mejora la co­m­pa­ti­bi­li­dad y la repu­tación del servidor de correo.

Te­c­no­lo­gías re­co­me­n­da­das ac­tua­l­me­n­te:

  • Imagen Docker: docker-mailserver/docker-mailserver:v13.2+
  • Pro­to­co­los de correo: SMTP (puertos 25, 587, 465), IMAPS (993), POP3S (995)
  • Es­tá­n­da­res de seguridad: TLS 1.3, DKIM, SPF, DMARC, DNSSEC (si es co­m­pa­ti­ble)
  • Sistema operativo del host: Ubuntu 22.04 LTS, Debian 12 u otras di­s­tri­bu­cio­nes Linux estables equi­va­le­n­tes
Consejo

Puedes si­m­pli­fi­car todo el proceso uti­li­za­n­do Docker mail server, una pila de código abierto muy popular, mantenida por la comunidad. Incluye Postfix, Dovecot, rspamd, ClamAV e in­te­gra­ción opcional con LDAP, todo en un único co­n­te­ne­dor.

¿Qué debes tener en cuenta al co­n­fi­gu­rar un servidor de correo con Docker?

Re­co­me­n­da­cio­nes de seguridad

Para proteger tu servidor de correo, es fu­n­da­me­n­tal aplicar una co­n­fi­gu­ra­ción de seguridad sólida y coherente, que incluya lo siguiente:

  • Utiliza ce­r­ti­fi­ca­dos TLS ac­tua­li­za­dos (como mínimo TLS 1.2, pre­fe­ri­ble­me­n­te TLS 1.3).
  • Configura y aplica políticas SPF, DKIM y DMARC.
  • Im­ple­me­n­ta límites de envío y au­te­n­ti­ca­ción mediante SASL.
  • Habilita co­ne­xio­nes cifradas para IMAP/POP3 y SMTP.
  • Configura un sistema de registros con he­rra­mie­n­tas como rsyslog y una rotación es­tru­c­tu­ra­da de logs.
Nota

Aunque utilices una co­n­fi­gu­ra­ción en co­n­te­ne­do­res con Docker, es im­pre­s­ci­n­di­ble aplicar medidas de seguridad adi­cio­na­les. Docker facilita la in­s­ta­la­ción, pero no sustituye el refuerzo del sistema mediante firewalls, gestión estricta de permisos, registro de eventos (por ejemplo, con rsyslog) y ac­tua­li­za­cio­nes regulares del sistema.

Re­co­me­n­da­cio­nes generales para la co­n­fi­gu­ra­ción

Montar un servidor de correo con Docker requiere co­no­ci­mie­n­tos técnicos y una co­n­fi­gu­ra­ción de seguridad cuidadosa. A co­n­ti­nua­ción, algunos aspectos clave a tener en cuenta:

  • Elegir una imagen de Docker adecuada y una pila de servidor de correo fiable (por ejemplo, docker-mailserver/docker-mailserver).
  • Co­n­fi­gu­rar co­rre­c­ta­me­n­te los registros DNS (MX, SPF, DKIM, DMARC).
  • Proteger el host de Docker (con firewall, Fail2Ban, cifrado, etc.).
  • Se­le­c­cio­nar he­rra­mie­n­tas adecuadas de ad­mi­ni­s­tra­ción y mo­ni­to­ri­za­ción.
  • Aplicar ac­tua­li­za­cio­nes y copias de seguridad con re­gu­la­ri­dad (incluidas las imágenes Docker).
  • Co­n­fi­gu­rar registros reverse DNS y soporte para IPv6.
  • Cumplir con los re­qui­si­tos legales vigentes (como el RGPD o el archivado legal de correos ele­c­tró­ni­cos).

¿Qué hardware se necesita?

Para ejecutar tu propio servidor de correo con Docker, es im­pre­s­ci­n­di­ble contar con el hardware adecuado. El re­n­di­mie­n­to necesario depende de varios factores, como el número de correos enviados al día o cuántas personas uti­li­za­rán el servidor. Aunque los co­n­te­ne­do­res Docker son ligeros, es im­po­r­ta­n­te tener en cuenta el uso de RAM, CPU y al­ma­ce­na­mie­n­to. Si además se utilizan servicios adi­cio­na­les como copias de seguridad o filtros de contenido (por ejemplo, para proteger frente a spam o phishing), se ne­ce­si­ta­rán más recursos. También es fu­n­da­me­n­tal disponer de una dirección IPv4 estática, ya que las di­re­c­cio­nes dinámicas pueden generar problemas en la entrega de correos al in­ter­ac­tuar con otros se­r­vi­do­res.

Consejo

¿Quieres darle a tu servidor de correo con Docker un toque pro­fe­sio­nal y pe­r­so­na­li­za­do? Entonces necesitas un dominio propio. Registra tu dominio personal con IONOS y obtén también un ce­r­ti­fi­ca­do SSL/TLS para tu servidor de correo.

A la hora de elegir el entorno adecuado para tu servidor de correo con Docker, es im­po­r­ta­n­te evaluar bien los recursos ne­ce­sa­rios. Una co­n­fi­gu­ra­ción sencilla puede gestionar unos pocos correos al día, mientras que un servidor de empresa con alto volumen requerirá bastante más RAM, CPU y capacidad de al­ma­ce­na­mie­n­to.

Nota

Ya uses Windows o Linux, no olvides tener en cuenta los recursos que necesita el sistema operativo base.

Escenario del servidor de correo Hardware re­co­me­n­da­do Plan sugerido de IONOS
Servidor doméstico con poco tráfico 2 vCores, 8 GB de RAM, 240 GB SSD Servidor Virtual Cloud L de IONOS
Servidor para una pequeña empresa (hasta 1000 correos/día) 8 vCores, 16 GB de RAM, 480 GB SSD Servidor Virtual Cloud XL de IONOS
Servidor em­pre­sa­rial (más de 50 000 correos/día) 6 vCores, 32 GB de RAM, 2 × 480 GB SSD en RAID Servidor Dedicado AMD de IONOS
Nota

Con un servidor dedicado, dispones de hardware pro­fe­sio­nal reservado ex­clu­si­va­me­n­te para ti. En cambio, los se­r­vi­do­res virtuales y los se­r­vi­do­res cloud utilizan recursos vi­r­tua­li­za­dos co­m­pa­r­ti­dos con otros clientes, sin que ello suponga una pérdida de re­n­di­mie­n­to.

Cómo co­n­fi­gu­rar un servidor de correo con Docker paso a paso

En este tutorial hemos elegido el popular co­n­te­ne­dor Docker docker-mai­l­se­r­ver.

Este co­n­te­ne­dor ligero y de código abierto (licencia MIT) ofrece una pila modular y lista para usar para poner en marcha tu propio servidor de correo. Integra todos los co­m­po­ne­n­tes ese­n­cia­les, como un servidor SMTP, un servidor IMAP o POP3, pro­te­c­ción antispam y antivirus opcional, y, si lo necesitas, un servicio de di­re­c­to­rio LDAP.

Paso 1: obtener la imagen de Docker

Puedes descargar la última imagen de docker-mai­l­se­r­ver desde el di­re­c­to­rio oficial de Docker Hub o desde el re­po­si­to­rio oficial de GitHub.

Se re­co­mie­n­da usar una versión estable, como v13.2, en lugar de las etiquetas :latest o :edge.

Ejecuta el siguiente comando para descargar la imagen:

docker pull mailserver/docker-mailserver:v13.2  
# or:  
docker pull ghcr.io/docker-mailserver/docker-mailserver:v13.2 
bash 

Paso 2: co­n­fi­gu­rar docker-compose.yml

A co­n­ti­nua­ción, debes co­n­fi­gu­rar el archivo docker-compose.yml para definir los servicios y volúmenes ne­ce­sa­rios para el co­n­te­ne­dor Docker. Aquí tienes un ejemplo de co­n­fi­gu­ra­ción para tu servidor de correo:

version: '3.8'  
  
services:  
  mailserver:  
    image: docker.io/mailserver/docker-mailserver:v13.2  
    container_name: mailserver  
    hostname: mail-server  
    domainname: example.com  
    ports:  
      - "25:25"  
      - "587:587"  
      - "465:465"  
    volumes:  
      - ./docker-data/dms/mail-data/:/var/mail/  
      - ./docker-data/dms/mail-state/:/var/mail-state/  
      - ./docker-data/dms/mail-logs/:/var/log/mail/  
      - ./docker-data/dms/config/:/tmp/docker-mailserver/  
      - ./docker-data/nginx-proxy/certs/:/etc/letsencrypt/  
      - /etc/localtime:/etc/localtime:ro  
    environment:  
      - ENABLE_FAIL2BAN=1  
      - SSL_TYPE=letsencrypt  
      - PERMIT_DOCKER=network  
      - ONE_DIR=1  
      - ENABLE_POSTGREY=0  
      - ENABLE_CLAMAV=0  
      - ENABLE_SPAMASSASSIN=0  
      - SPOOF_PROTECTION=0  
    cap_add:  
      - NET_ADMIN  
      - SYS_PTRACE 
yaml 

Esta co­n­fi­gu­ra­ción asegura que el co­n­te­ne­dor Docker utilice los puertos correctos para SMTP (25), IMAPS (993) y envío SMTP (587), y que los volúmenes estén co­rre­c­ta­me­n­te definidos para mantener los datos de forma pe­r­si­s­te­n­te. Además, se activan funciones de seguridad como Fail2Ban y el cifrado SSL de Let’s Encrypt.

Nota

Puedes consultar la lista completa de opciones co­n­fi­gu­ra­bles en la do­cu­me­n­ta­ción oficial de Docker Mai­l­se­r­ver.

Paso 3: abrir los puertos

En el archivo docker-compose.yml, verás que ya están definidos los puertos del servidor SMTP (25, 465 y 587). Estos mismos puertos deben abrirse también en el firewall del servidor para permitir el tráfico de correo sin in­te­rru­p­cio­nes.

Si utilizas un servicio como IONOS para alojar tu servidor, puedes abrir fá­ci­l­me­n­te estos puertos desde el Cloud Panel:

  1. Inicia sesión con tus datos pe­r­so­na­les como cliente en la página de inicio de sesión del Cloud Panel.
  2. Ve al apartado “Server & Cloud”.
  3. Se­le­c­cio­na el servidor donde está alojado tu servidor de correo Docker.
  4. En el menú a la izquierda, haz clic en “Red” y luego en “Políticas de Co­r­ta­fue­gos”.
  5. Añade reglas de co­r­ta­fue­gos para los puertos TCP 25, 465 y 587.
Imagen: Imagen: IONOS Cloud Panel: añadir condición al cortafuegos
IONOS Cloud Panel: añadir condición al co­r­ta­fue­gos

Paso 4: co­n­fi­gu­rar los registros DNS

A co­n­ti­nua­ción, asegúrate de que los registros DNS de tu dominio estén co­rre­c­ta­me­n­te co­n­fi­gu­ra­dos:

  • Registro MX: debe apuntar al servidor de correo (por ejemplo, mail.ejemplo.com) que ya has definido en los campos hostname y domainname de tu archivo docker-compose.yml.
  • Registro SPF: es un registro TXT para el dominio (no para el hostname), por ejemplo, v=spf1 mx ~all.
Nota

El parámetro ~all indica un “Softfail” (fallo suave). Si prefieres una política más estricta, puedes utilizar -all.

Cómo co­n­fi­gu­rar los registros DNS en el IONOS Cloud Panel

  1. Inicia tu sesión en la página de inicio de sesión del Cloud Panel.
  2. Haz clic en “Dominios y SSL”.
  3. Busca tu dominio y haz clic en el icono de co­n­fi­gu­ra­ción.
  4. Se­le­c­cio­na “DNS”.
  5. Añade los si­guie­n­tes registros:
  • Registro MX: destino = mail.example.com, prioridad = 10 
  • Registro TXT: tipo = TXT, valor = v=spf1 mx ~all
Imagen: Imagen: Cloud Panel de IONOS: añadir registro DNS
Cloud Panel de IONOS: añadir registro DNS

Por último, haz clic en “Re­s­ta­ble­cer dominio” en el menú superior para recargar la co­n­fi­gu­ra­ción DNS y aplicar los cambios. Confirma la operación haciendo clic en “Re­s­ta­ble­cer ahora”. Esto solo afectará a los registros DNS ac­tua­li­za­dos, no al dominio en sí.

Consejo

¿Quieres almacenar tus correos ele­c­tró­ni­cos de forma legal y segura, conforme a la normativa vigente? Utiliza el backup de correo de IONOS para archivar los correos se­le­c­cio­na­dos a prueba de ma­ni­pu­la­cio­nes y conforme a la ley.

Paso 5: generar claves DKIM

Para aumentar la seguridad de tu servidor de correo, es necesario generar un registro DKIM (Do­mai­n­Ke­ys Ide­n­ti­fied Mail) para tu dominio. Esta técnica permite firmar di­gi­ta­l­me­n­te los correos ele­c­tró­ni­cos, de modo que los se­r­vi­do­res re­ce­p­to­res puedan verificar su au­te­n­ti­ci­dad.

Utiliza el script setup.sh que se incluye en el di­re­c­to­rio de docker-mailserver:

./setup.sh config dkim
bash

La clave pública generada se guardará en el siguiente archivo (su­po­nie­n­do que el volumen esté co­rre­c­ta­me­n­te montado):

docker-data/dms/config/opendkim/keys/example.com/mail.txt
swift

Abre el archivo y copia su contenido para crear un registro TXT en la co­n­fi­gu­ra­ción DNS de tu dominio. El registro debería tener un aspecto similar al siguiente:

mail._domainkey.example.com. IN TXT (  
  "v=DKIM1; h=sha256; k=rsa; "  
  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOC...continuedPublicKey...IDAQAB"  
) 
java 
  • mail es el selector y puedes nombrarlo como prefieras (por ejemplo: default, key2025, etc.).
  • Si tu proveedor DNS limita la longitud a 255 ca­ra­c­te­res por cadena, tendrás que dividir la clave en varias líneas (como se muestra en el ejemplo).
  • Asegúrate de que el tipo de registro sea TXT y que se aplique al dominio completo mail._domainkey.example.com.
Nota

Además del DKIM, también deberías co­n­fi­gu­rar un registro SPF y un registro DMARC para proteger co­m­ple­ta­me­n­te tu dominio frente a la su­pla­n­ta­ción de identidad (spoofing).

Paso 6: iniciar el servidor y crear tu primera dirección

Inicia el servidor de correo ya co­n­fi­gu­ra­do desde el di­re­c­to­rio del proyecto con el siguiente comando:

docker-compose up -d
bash

Estas in­s­tru­c­cio­nes te ayudarán a co­n­fi­gu­rar de forma segura y eficaz tanto entornos de servidor de correo tra­di­cio­na­les como so­lu­cio­nes modernas basadas en co­n­te­ne­do­res.

Servidor de correo pro­fe­sio­nal
Servidor de correo ele­c­tró­ni­co con control total
  • Con los es­tá­n­da­res más altos de seguridad
  • Cifrado au­to­má­ti­co con SSL/TLS
  • Data centers geo­rre­du­n­da­n­tes con ce­r­ti­fi­ca­do ISO 27001
  • IMAP & SMTP
Ir al menú principal