Volver al inicio

Postfix DKIM Docker: configuración de servidor de solo envío

Guía para desplegar Postfix de solo envío con DKIM en un contenedor Docker en Ubuntu 22.04. Cubre instalación de Docker, Certbot, registros DNS SPF/DKIM, rDNS y pruebas de entregabilidad. Adecuada para desarrolladores intermedios/senior.

Docker Postfix con DKIM: guía completa para desarrolladores
Advertisement 728x90

Despliegue de Postfix de Solo Envío con DKIM en Docker en Ubuntu

Esta guía despliega el contenedor Docker boky/postfix con OpenDKIM y TLS en Ubuntu 22.04 (1 GB RAM, 1 vCPU). El servidor solo envía correos mediante sesiones autenticadas o desde localhost en el puerto 587. Incluye generación automática de claves DKIM y monta certificados de Let's Encrypt. Requisitos previos: un dominio gestionado en Cloudflare y un VPS con el puerto de salida 25 permitido por tu proveedor de hosting.

Preparación del Servidor

Actualizar paquetes:

apt update && apt upgrade -y

Eliminar paquetes antiguos de Docker:

Google AdInline article slot
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Instalar Docker oficial:

apt update
apt install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update && apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Instalar Certbot:

apt install certbot

Añadir un registro A en Cloudflare: mail → IP del VPS, con proxy deshabilitado. Emitir el certificado:

Google AdInline article slot
certbot certonly --standalone -d mail.yourdomain.com

Crear un gancho de renovación para reiniciar el contenedor:

nano /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh

Contenido:

#!/bin/bash
docker restart postfix

Hacerlo ejecutable: chmod +x /etc/letsencrypt/renewal-hooks/post/restart-postfix.sh.

Google AdInline article slot

Creación de Usuario y docker-compose

Crear un usuario sin privilegios:

useradd -m emailuser -G docker -s /bin/bash
passwd emailuser
su emailuser

Crear docker-compose.yml:

services:
  postfix:
    image: boky/postfix
    container_name: postfix
    restart: unless-stopped
    ports:
      - "587:587"
    volumes:
      - ./dkim:/etc/opendkim/keys
      - /etc/letsencrypt/live/mail.yourdomain.com/fullchain.pem:/etc/opendkim/keys/mail.crt:ro
      - /etc/letsencrypt/live/mail.yourdomain.com/privkey.pem:/etc/opendkim/keys/mail.key:ro
    environment:
      HOSTNAME: mail.yourdomain.com
      DOMAIN: yourdomain.com
      DKIM_SELECTOR: mail
      DKIM_DOMAINS: yourdomain.com
      DKIM_KEY_LENGTH: 2048
      ENABLE_DKIM: 1
      ENABLE_TLS: 1
      TLS_KEY: /etc/opendkim/keys/mail.key
      TLS_CERT: /etc/opendkim/keys/mail.crt
      SMTP_USER: [email protected]|password
      RELAY_NETWORKS: 127.0.0.1/32
      FORCE_HELO: 1
      LOG_TO_STDOUT: 1
      ALLOWED_SENDER_DOMAINS: mail.yourdomain.com
      DKIM_AUTOGENERATE: "true"

Ejecutar: docker compose up -d. Después de la generación de claves, eliminar DKIM_AUTOGENERATE.

Configuración DNS

En el directorio ./dkim, encontrar el archivo .txt con la clave pública. Extraer la línea como:

v=DKIM1; h=sha256; k=rsa; s=email; p=MNOGO_SIMVOLOV

(unir las partes de la clave sin corchetes ni comillas). Añadir registro TXT en Cloudflare:

  • Name: mail._domainkey
  • Content: cadena de la clave

Registro SPF para el dominio:

  • Name: yourdomain.com
  • Content: v=spf1 a mx ip4:YOUR_VPS_IP -all

rDNS y Puerto 25

Contactar a tu proveedor:

  • Abrir el puerto de salida 25.
  • Configurar rDNS para mail.yourdomain.com → IP del VPS.

Pruebas

Probar en mail-tester.com o appmaildev.com. Entrar en el contenedor:

docker exec -it postfix bash
echo -e "Subject: DKIM Test\n\nThis is a test message" | sendmail -f [email protected] [email protected]

Resultado esperado: 10/10 en los probadores, los correos llegan a la bandeja de entrada de Gmail.

  • DKIM: generación automática de claves de 2048 bits.
  • SPF: restringe el envío por IP.
  • TLS: Let's Encrypt con renovación automática.
  • Auth: SMTP_USER para relay.

Puntos Clave

  • El contenedor boky/postfix incluye Postfix + OpenDKIM listo para usar.
  • Montar volúmenes para claves y certificados con :ro por seguridad.
  • RELAY_NETWORKS=127.0.0.1/32 bloquea envíos externos no autenticados.
  • Deshabilitar AUTOGENERATE después de la generación de DKIM.
  • rDNS es crítico para la entregabilidad con proveedores principales.

— Editorial Team

Advertisement 728x90

Leer después