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.
Configuración Postfix Smart Relay - Puerto 25 Bloqueado
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
# ⚠️ CRÍTICO: Verificar sintaxis exacta - errores tipográficos causan bucles
myhostname = alerts.tudominio.com
mydomain = tudominio.com
myorigin = alerts.tudominio.com # Debe coincidir exactamente con DKIM
# Smart relay
relayhost = [ip-smart-relay]:587
# Configuración local mínima
inet_interfaces = loopback-only
mydestination = localhost, localhost.localdomain
local_recipient_maps =
local_transport = error:local mail delivery is disabled
# ⚠️ IMPORTANTE: Incluir TODAS las IPs que pueden enviar bounces
mynetworks = 127.0.0.0/8 [::1]/128 [IP-smart-relay]
# TLS para conexión al smart relay
smtp_use_tls = yes
smtp_tls_security_level = encrypt
# ⚠️ NUEVO: Transport maps para evitar bucles de bounces
transport_maps = hash:/etc/postfix/transport
3. Transport maps (CRÍTICO para evitar bucles)
# /etc/postfix/transport
# Mantener correos hacia el propio dominio locales para evitar bucles
alerts.tudominio.com local:
# Compilar
postmap /etc/postfix/transport
4. Aliases básicos
# /etc/aliases
root: sysadmin@tudominio.com
postmaster: sysadmin@tudominio.com
# Usuario para descartar bounces automáticos
devnull: /dev/null
# Aplicar cambios
newaliases
postfix reload
Configuración del Smart Relay
1. Configuración main.cf del smart relay
# /etc/postfix/main.cf
# Configuración básica
myhostname = smart-relay.tudominio.com
mydomain = tudominio.com
# ⚠️ CRÍTICO: Permitir relay desde IPs específicas
mynetworks = 127.0.0.0/8 [::1]/128 [IP-cliente-1] [IP-cliente-2]
# Configuración de relay
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
# 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
2. 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 smtpd_tls_security_level=encrypt
3. Gestión de bounces (Prevención de bucles)
# /etc/aliases en smart relay
devnull: /dev/null
bounces: /dev/null
# Aplicar
newaliases
Configuración DNS y Autenticación
1. SPF Record
; Para el dominio principal
tudominio.com. IN TXT "v=spf1 ip4:ip-smart-relay-1 ip4:ip-smart-relay-2 -all"
; Para subdominios específicos (IMPORTANTE)
alerts.tudominio.com. IN TXT "v=spf1 ip4:ip-smart-relay-1 ip4:ip-smart-relay-2 -all"
2. DKIM Configuration
# Instalar herramientas DKIM
apt-get install opendkim opendkim-tools
# Generar claves
opendkim-genkey -t -s mail -d alerts.tudominio.com
# ⚠️ IMPORTANTE: El selector debe coincidir con el dominio usado en myorigin
3. DMARC Policy
_dmarc.tudominio.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@tudominio.com"
Resolución de Problemas Críticos
1. Bucles de correo ("too many hops")
Síntoma: Error 5.4.0 "too many hops" Causa: Correos hacia el propio dominio van al smart relay y vuelven
Solución:
# /etc/postfix/transport en servidor origen
alerts.tudominio.com local:
# Recompilar
postmap /etc/postfix/transport
systemctl reload postfix
2. "Relay access denied"
Síntoma: 454 4.7.1 Relay access denied Causa: IP del cliente no está en mynetworks del smart relay
Diagnóstico:
# En smart relay, verificar qué IP se conecta
grep "connect from" /var/log/mail.log | grep [IP-problema]
# Verificar configuración actual
postconf mynetworks
Solución: Añadir IP faltante a mynetworks
3. Alias no funciona
Síntoma: Los alias no se aplican correctamente Causa común: Errores tipográficos en myorigin
Diagnóstico:
# Verificar que el alias funciona
postalias -q root /etc/aliases
# ⚠️ VERIFICAR EXACTITUD de myorigin
postconf myorigin
# Común: "alertas" vs "alerts", ".co" vs ".com"
4. DKIM/DMARC failures
Síntoma: Correos marcados como spam Causa: Desalineación entre From domain y SPF/DKIM
Solución: Asegurar que myorigin coincide exactamente con dominio DKIM
Testing y Verificación
1. Test de funcionamiento básico
# Test desde línea de comandos
echo "Test desde $(hostname)" | mail -s "Test Relay" destino@gmail.com
# Verificar logs inmediatamente
tail -f /var/log/mail.log
2. Test de alias
# Envío a root debe ir al alias configurado
echo "Test alias" | mail -s "Test root alias" root
# Verificar en logs que va al destino correcto
3. Verificación DNS
# SPF
dig TXT alerts.tudominio.com
# DKIM
dig TXT mail._domainkey.alerts.tudominio.com
# DMARC
dig TXT _dmarc.tudominio.com
Errores Comunes y Soluciones
❌ Error: myorigin con tipografías
# MAL
myorigin = alertas.avanzait.co # ← error tipográfico
# BIEN
myorigin = alerts.avanzait.com
❌ Error: mynetworks incompleto
# MAL - falta IP del smart relay
mynetworks = 127.0.0.0/8
# BIEN - incluye smart relay para bounces
mynetworks = 127.0.0.0/8 [IP-smart-relay]
❌ Error: Sin transport maps
Sin transport maps, los correos al propio dominio crean bucles.
✅ Configuración correcta
# main.cf
transport_maps = hash:/etc/postfix/transport
# /etc/postfix/transport
alerts.tudominio.com local:
Configuración para Aplicaciones Específicas
Zabbix
# Media Type configuración
SMTP server: localhost
Port: 25
Email: root@alerts.tudominio.com
Authentication: None
Security: None
CSF (ConfigServer Firewall)
Los correos de sistema funcionarán automáticamente una vez configurados los alias correctamente. Eso incluye pruebas de concepto, avisos de CSF, etc.
Aplicaciones web (PHP/Python)
// PHP
ini_set('SMTP', 'localhost');
ini_set('smtp_port', 25);
Monitoreo y Mantenimiento
1. Script de monitoreo de colas
#!/bin/bash
# /usr/local/bin/check-mail-queue.sh
QUEUE_SIZE=$(mailq | tail -1 | awk '{print $5}' | tr -d ')')
if [ "$QUEUE_SIZE" -gt 50 ]; then
echo "ALERT: Mail queue size: $QUEUE_SIZE" | \
mail -s "Mail Queue Alert" admin@tudominio.com
fi
2. Verificación periódica de configuración
#!/bin/bash
# Verificar configuraciones críticas
echo "=== Verificación Postfix ==="
echo "myorigin: $(postconf myorigin)"
echo "relayhost: $(postconf relayhost)"
echo "mynetworks: $(postconf mynetworks)"
echo "transport_maps: $(postconf transport_maps)"
3. Backup de configuración
# Script de backup
tar -czf /backup/postfix-config-$(date +%Y%m%d).tar.gz \
/etc/postfix/ \
/etc/aliases \
/etc/opendkim/ 2>/dev/null
Lista de Verificación Pre-Producción
-
myoriginsin errores tipográficos -
mynetworksincluye todas las IPs necesarias -
transport_mapsconfigurado para evitar bucles - Aliases funcionando (
postalias -q root /etc/aliases) - SPF record publicado
- DKIM keys generados y DNS configurado
- DMARC policy establecida
- Test de envío exitoso
- Logs sin errores de relay
- Smart relay acepta conexiones del cliente
Troubleshooting Rápido
Bucle detectado
- Verificar
myorigin(sin typos) - Configurar
transport_maps - Verificar
mynetworksen ambos servidores
Alias no funciona
- Verificar
/etc/aliases - Ejecutar
newaliases - Verificar con
postalias -q
Relay denied
- Verificar IP real de conexión en logs
- Añadir IP a
mynetworksdel smart relay - Reload postfix
Aviso Legal
Esta documentación se proporciona "tal como está" sin garantías. Se recomienda realizar pruebas exhaustivas y mantener copias de seguridad.
Para soporte profesional: Castris Soporte