Sign inSign up

darwindelgado/postfix-relay

By darwindelgado

•Updated 6 months ago

Image
0

243

darwindelgado/postfix-relay repository overview

⁠postfix-relay

Contenedor Postfix listo para producción que actúa como SMTP relay interno. Los servicios de tu infraestructura (Alertmanager, Grafana, aplicaciones) envían correos a este relay en el puerto 25 sin autenticación — él autentica contra Gmail, Office 365 u otro proveedor externo con TLS.

Alertmanager / Grafana / App
    → postfix-relay:25  (red interna, sin auth)
        → smtp.gmail.com:587 / smtp.office365.com:587
            → destinatario final

Base: debian:trixie-slim (Debian 13 oficial).


⁠Inicio rápido

docker run -d \
  --name postfix-relay \
  --restart unless-stopped \
  -e RELAYHOST="[smtp.gmail.com]:587" \
  -e RELAYHOST_USERNAME="[email protected]" \
  -e RELAYHOST_PASSWORD="xxxx xxxx xxxx xxxx" \
  -e MYHOSTNAME="monitoring.empresa.com" \
  darwindelgado/postfix-relay:latest

⁠Docker Compose

services:
  postfix:
    image: darwindelgado/postfix-relay:latest
    container_name: postfix-relay
    restart: unless-stopped
    env_file: .env
    networks:
      - smtp-net

networks:
  smtp-net:
    driver: bridge
    name: smtp-net

.env:

RELAYHOST=[smtp.gmail.com]:587
[email protected]
RELAYHOST_PASSWORD=xxxx xxxx xxxx xxxx
MYHOSTNAME=monitoring.empresa.com
MYNETWORKS=127.0.0.0/8 172.16.0.0/12 192.168.0.0/16 10.0.0.0/8

⁠Variables de entorno

VariableRequeridaDefaultDescripción
RELAYHOSTNo[smtp.gmail.com]:587Host SMTP externo
RELAYHOST_USERNAMESí—Usuario SMTP
RELAYHOST_PASSWORDSí—Contraseña o App Password
MYHOSTNAMENopostfix-relayHostname en el From
MYNETWORKSNo127/8 172.16/12 192.168/16 10/8Redes internas permitidas

⁠Proveedores

⁠Gmail

Requiere App Password (no tu contraseña normal). Necesitas 2FA activado.

  1. Ir a myaccount.google.com/apppasswords⁠
  2. Crear App Password → copiar los 16 caracteres
RELAYHOST=[smtp.gmail.com]:587
[email protected]
RELAYHOST_PASSWORD=abcd efgh ijkl mnop
⁠Office 365
RELAYHOST=[smtp.office365.com]:587
[email protected]
RELAYHOST_PASSWORD=contraseña-usuario-servicio

Requiere SMTP AUTH habilitado para el usuario en el tenant de Azure AD.

⁠Otros proveedores
ProveedorRELAYHOST
Brevo[smtp-relay.brevo.com]:587
Mailgun[smtp.mailgun.org]:587
SendGrid[smtp.sendgrid.net]:587
Amazon SES[email-smtp.us-east-1.amazonaws.com]:587

⁠Integración con servicios

Los servicios deben unirse a la misma red Docker (smtp-net) y apuntar a postfix-relay:25.

⁠Alertmanager
global:
  smtp_smarthost: 'postfix-relay:25'
  smtp_from: '[email protected]'
  smtp_require_tls: false
⁠Grafana (grafana.ini)
[smtp]
enabled = true
host = postfix-relay:25
from_address = [email protected]
from_name = Grafana
skip_verify = true
⁠docker-compose.yml de cada servicio
networks:
  smtp-net:
    external: true

⁠Verificar que funciona

# Enviar correo de prueba
docker exec postfix-relay bash -c \
  "echo 'Test OK' | mail -s '[TEST] relay funcionando' [email protected]"

# Ver logs de entrega
docker logs postfix-relay -f

# Ver cola de correos
docker exec postfix-relay postqueue -p

En los logs deberías ver status=sent (250 2.0.0 OK ...).


⁠Seguridad

  • Solo acepta conexiones desde redes internas definidas en MYNETWORKS
  • Todo el tráfico saliente usa TLS (smtp_tls_security_level = encrypt)
  • Las credenciales SASL se almacenan en /etc/postfix/sasl/sasl_passwd con permisos 600
  • El puerto 25 no debe exponerse fuera de la red Docker interna

⁠Construir desde el código fuente

git clone https://github.com/darwindelgado-co/smtp-relay.git
cd smtp-relay
docker build -t postfix-relay:local .

⁠Tags disponibles

TagDescripción
latestÚltima versión estable
1.0.0Primera release

Tag summary

Content type

Image

Digest

sha256:91133eb35…

Size

69.3 MB

Last updated

6 months ago

docker pull darwindelgado/postfix-relay