Skip to main content

Postfix Smart Relay en casos de bloqueo puerto 25 - Configuración Completa

Escenario

Servidor sin panel de control que necesita enviar correos electrónicos (alertas, notificaciones) pero tiene el puerto 25 bloqueado por el ISP (Hetzner). Solución mediante smart relay a otro servidor Postfix actuando como gateway de salida.

Arquitectura

[Servidor Origen] --puerto 587--> [Smart Relay] --puerto 25--> [Internet]
   (puerto 25 capado)              (múltiples ubicaciones)

Configuración del Servidor Origen (Cliente)

1. Instalación básica

apt-get install postfix mailutils

2. Configuración main.cf

# /etc/postfix/main.cf

# Configuración básica
myhostname = alerts.tudominio.com
mydomain = tudominio.com
myorigin = $mydomain

# Smart relay
relayhost = [ip-smart-relay]:587

# Configuración local mínima
inet_interfaces = loopback-only
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps = 
local_transport = error:local mail delivery is disabled

# Red permitida
mynetworks = 127.0.0.0/8

# TLS para conexión al smart relay
smtp_use_tls = yes
smtp_tls_security_level = encrypt

3. Aliases básicos

# /etc/aliases
root: sysadmin@tudominio.com
postmaster: sysadmin@tudominio.com

# Aplicar cambios
newaliases
postfix reload

Configuración del Smart Relay

1. Puerto alternativo en master.cf

# /etc/postfix/master.cf

# Puerto estándar
smtp      inet  n       -       y       -       -       smtpd

# Puerto alternativo para clientes con puerto 25 capado
587       inet  n       -       y       -       -       smtpd
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o mynetworks=ip-cliente-1/32,ip-cliente-2/32,127.0.0.0/8
  -o smtpd_tls_security_level=encrypt

2. Configuración main.cf del smart relay

# /etc/postfix/main.cf

# Configuración básica
myhostname = smart-relay.tudominio.com
mydomain = tudominio.com

# Restricciones de cliente
smtpd_client_restrictions = permit_mynetworks, reject_unauth_destination

# Gestión de bounces para evitar bucles
smtp_header_checks = regexp:/etc/postfix/header_checks
sender_canonical_maps = hash:/etc/postfix/sender_canonical

# TLS
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key

3. Reescritura de headers para DMARC

# /etc/postfix/header_checks
/^From:.*@hostname-origen$/  REPLACE From: Alertas <alertas@tudominio.com>
/^From:.*<.*@hostname-origen>$/  REPLACE From: Alertas <alertas@tudominio.com>

4. Canonical maps para bounces

# /etc/postfix/sender_canonical
root@hostname-origen    devnull@tudominio.com
@hostname-origen        devnull@tudominio.com

# Compilar
postmap /etc/postfix/sender_canonical

5. Descarte de bounces no deseados

# /etc/aliases en smart relay
devnull: /dev/null

# Aplicar
newaliases

Configuración DNS

1. SPF Record

; Para el dominio principal
tudominio.com. IN TXT "v=spf1 ip4:ip-smart-relay-1 ip4:ip-smart-relay-2 ip6:ipv6-smart-relay -all"

; Para subdominios específicos
alerts.tudominio.com. IN TXT "v=spf1 ip4:ip-smart-relay-1 ip4:ip-smart-relay-2 ip6:ipv6-smart-relay -all"

2. DKIM Configuration

# Instalar herramientas DKIM
apt-get install opendkim opendkim-tools

# Generar claves
opendkim-genkey -t -s mail -d tudominio.com

# Configurar opendkim
# /etc/opendkim.conf
Domain tudominio.com
KeyFile /etc/opendkim/keys/tudominio.com/mail.private
Selector mail

3. DMARC Policy

_dmarc.tudominio.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@tudominio.com"

Gestión de Múltiples Smart Relays

1. Failover automático

# /etc/postfix/main.cf
smtp_fallback_relay = [ip-backup-relay]:587

2. Transport maps para routing específico

# /etc/postfix/transport
alerts.tudominio.com    smtp:[ip-smart-relay-1]:587
.tudominio.com          smtp:[ip-smart-relay-2]:587

# Compilar
postmap /etc/postfix/transport

# Activar en main.cf
transport_maps = hash:/etc/postfix/transport

Testing y Verificación

1. Test básico de envío

echo "Test desde $(hostname)" | mail -s "Test Relay" destino@gmail.com

2. Verificar logs

# Servidor origen
tail -f /var/log/mail.log

# Smart relay
tail -f /var/log/mail.log | grep "$(hostname-origen)"

3. Test de autenticación

# Verificar SPF
dig TXT tudominio.com

# Test DKIM
opendkim-testkey -d tudominio.com -s mail -vvv

# Verificar DMARC
dig TXT _dmarc.tudominio.com

4. Headers del email recibido

Verificar que los headers muestren:

  • Received-SPF: pass
  • DKIM-Signature: v=1
  • Alineación correcta para DMARC

Resolución de Problemas Comunes

1. "Connection refused" en puerto alternativo

# Verificar que Postfix escucha en el puerto
netstat -tlnp | grep :587

# Verificar firewall
iptables -L INPUT -n | grep 587

2. "Relay access denied"

# Verificar mynetworks en smart relay
postconf mynetworks

# Verificar IP del cliente
grep "connect from" /var/log/mail.log

3. DMARC failure

# Verificar alineación From vs Return-Path
# El dominio del From debe coincidir con SPF/DKIM

4. Bucles de bounces

# Verificar sender_canonical_maps
postmap -q "root@hostname-origen" hash:/etc/postfix/sender_canonical

Seguridad

1. Restricciones estrictas en smart relay

# Solo IPs conocidas
mynetworks = ip-1/32, ip-2/32, 127.0.0.0/8

# TLS obligatorio para clientes
smtpd_tls_security_level = encrypt

2. Monitoreo de logs

# Script para alertar sobre intentos de relay no autorizados
grep "Relay access denied" /var/log/mail.log | tail -10

3. Rate limiting

# Limitar conexiones por IP
smtpd_client_connection_count_limit = 10
smtpd_client_connection_rate_limit = 30

Casos de Uso Típicos

1. Servidor de monitoreo (Zabbix, Nagios)

  • Configurar From correcto para evitar DMARC failures
  • Gestionar bounces apropiadamente
  • Usar alias para redireccionar notificaciones

2. Aplicaciones web

  • Configurar PHP/Python para usar localhost:25
  • El relay local se encarga del smart relay
  • Mantener logs centralizados

3. Servidores en cloud con restricciones

  • Múltiples smart relays para redundancia
  • Configuración específica por región
  • Backup automático entre relays

Mantenimiento

1. Rotación de logs

# /etc/logrotate.d/postfix personalizado para análisis
/var/log/mail.log {
    daily
    rotate 30
    compress
    delaycompress
    create 0640 syslog adm
    postrotate
        systemctl reload postfix
    endscript
}

2. Monitoreo de colas

# Script de monitoreo
#!/bin/bash
QUEUE_SIZE=$(mailq | tail -1 | awk '{print $5}')
if [ "$QUEUE_SIZE" -gt 100 ]; then
    echo "ALERT: Mail queue size: $QUEUE_SIZE"
fi

3. Backup de configuración

# Backup automático de configuraciones críticas
tar -czf postfix-config-$(date +%Y%m%d).tar.gz \
    /etc/postfix/ \
    /etc/aliases \
    /etc/opendkim/

Conclusiones

Esta configuración proporciona:

  • Redundancia: Múltiples smart relays distribuidos
  • Seguridad: Autenticación por IP y TLS obligatorio
  • Compatibilidad: SPF, DKIM y DMARC correctos
  • Mantenibilidad: Logs centralizados y configuración modular
  • Escalabilidad: Fácil adición de nuevos clientes o relays

El enfoque es especialmente útil para infraestructuras donde el correo no es el servicio principal pero es crítico para alertas y notificaciones.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.