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
# Configuración⚠️ básicaCRÍTICO: Verificar sintaxis exacta - errores tipográficos causan bucles
myhostname = alerts.tudominio.com
mydomain = tudominio.com
myorigin = $mydomainalerts.tudominio.com # Debe coincidir exactamente con DKIM
# Smart relay
relayhost = [ip-smart-relay]:587
# Configuración local mínima
inet_interfaces = loopback-only
mydestination = $myhostname,localhost, localhost.$mydomain, localhostlocaldomain
local_recipient_maps =
local_transport = error:local mail delivery is disabled
# Red⚠️ permitidaIMPORTANTE: 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 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
#3. 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(Prevención 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 deseadosbucles)
# /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 ip6:ipv6-smart-relay -all"
; Para subdominios específicos (IMPORTANTE)
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 alerts.tudominio.com
# Configurar⚠️ opendkimIMPORTANTE: #El /etc/opendkim.confselector Domaindebe tudominio.comcoincidir KeyFilecon /etc/opendkim/keys/tudominio.com/mail.privateel Selectordominio mailusado en myorigin
3. DMARC Policy
_dmarc.tudominio.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@tudominio.dmarc-reports@tudominio.com"
GestióResolución de MúltiplesProblemas Smart RelaysCríticos
1. FailoverBucles automáticode correo ("too many hops")
#Síntoma: /etc/postfix/main.cfError smtp_fallback_relay5.4.0 ="too [ip-backup-relay]many hops"
Causa:587
Correos 2.hacia Transportel mapspropio paradominio routingvan específico
al smart relay y vuelven
Solución:
# /etc/postfix/transport en servidor origen
alerts.tudominio.com smtp:[ip-smart-relay-1]:587
.tudominio.com smtp:[ip-smart-relay-2]:587local:
# CompilarRecompilar
postmap /etc/postfix/transport
#systemctl Activarreload postfix
2. "Relay access denied"
Síntoma: 454 4.7.1 Relay access denied
Causa: IP del cliente no está en main.cfmynetworks transport_mapsdel =smart hash:relay
Diagnóstico:
# En smart relay, verificar qué IP se conecta
grep "connect from" /etc/postfix/transportvar/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 de envío
# Test desde línea de comandos
echo "Test desde $(hostname)" | mail -s "Test Relay" destino@gmail.com
2.# Verificar logs
# Servidor origeninmediatamente
tail -f /var/log/mail.log
2. Test de alias
# SmartEnvío relaya tailroot -fdebe /var/log/mail.logir al alias configurado
echo "Test alias" | grepmail -s "$(hostname-origen)"Test root alias" root
# Verificar en logs que va al destino correcto
3. TestVerificación de autenticaciónDNS
# Verificar SPF
dig TXT alerts.tudominio.com
# Test DKIM
opendkim-testkeydig -dTXT mail._domainkey.alerts.tudominio.com
-s mail -vvv
# Verificar DMARC
dig TXT _dmarc.tudominio.com
4. Headers del email recibido
Verificar que los headers muestren:
Received-SPF: passDKIM-Signature: v=1Alineación correcta para DMARC
Resolución de ProblemasErrores Comunes y Soluciones
1.❌ "ConnectionError: refused"myorigin encon puerto alternativotipografías
# VerificarMAL
quemyorigin Postfix= escucha en el puerto
netstat -tlnp | grep :587alertas.avanzait.co # Verificar← firewallerror iptablestipográfico
-L# INPUTBIEN
-nmyorigin |= grep 587alerts.avanzait.com
2.❌ "RelayError: accessmynetworks denied"incompleto
# VerificarMAL mynetworks- enfalta IP del 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
# TLSBIEN obligatorio- incluye smart relay para clientesbounces
smtpd_tls_security_levelmynetworks = encrypt127.0.0.0/8 [IP-smart-relay]
2.❌ MonitoreoError: deSin logstransport maps
Sin transport maps, los correos al propio dominio crean bucles.
✅ Configuración correcta
# Scriptmain.cf
paratransport_maps alertar= sobrehash:/etc/postfix/transport
intentos de relay no autorizados
grep "Relay access denied"# /var/log/mail.logetc/postfix/transport
|alerts.tudominio.com tail -10local:
Configuración para Aplicaciones Específicas
3. Rate limitingZabbix
# LimitarMedia conexionesType porconfiguración
IPSMTP smtpd_client_connection_count_limitserver: =localhost
10Port: smtpd_client_connection_rate_limit25
=Email: 30root@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);
CasosMonitoreo dey Uso Típicos
1. Servidor de monitoreo (Zabbix, Nagios)
Configurar From correcto para evitar DMARC failuresGestionar bounces apropiadamenteUsar alias para redireccionar notificaciones
2. Aplicaciones web
Configurar PHP/Python para usar localhost:25El relay local se encarga del smart relayMantener logs centralizados
3. Servidores en cloud con restricciones
Múltiples smart relays para redundanciaConfiguración específica por regiónBackup automático entre relays
Mantenimiento
1. RotaciónScript 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. Monitoreomonitoreo de colas
# Script de monitoreo
#!/bin/bash
# /usr/local/bin/check-mail-queue.sh
QUEUE_SIZE=$(mailq | tail -1 | awk '{print $5}' | tr -d ')')
if [ "$QUEUE_SIZE" -gt 10050 ]; 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
# Backup automáticoScript de configuraciones críticasbackup
tar -czf /backup/postfix-config-$(date +%Y%m%d).tar.gz \
/etc/postfix/ \
/etc/aliases \
/etc/opendkim/ 2>/dev/null
Conclusiones
Lista Estade configuracióVerificación proporciona:
Redundancia:Múltiplesmyorigin
smartsinrelayserroresdistribuidostipográficosSeguridad:Autenticaciónmynetworks
porincluyeIPtodas las IPs necesarias-
transport_maps
configurado para evitar bucles - Aliases funcionando (
postalias -q root /etc/aliases
) - SPF record publicado
- DKIM keys generados y
TLSDNSobligatorioconfigurado Compatibilidad: SPF, DKIM yDMARCcorrectospolicy establecidaMantenibilidad:Test de envío exitoso- Logs
centralizadossinyerroresconfiguracióndemodularrelay Escalabilidad:FácilSmartadiciónrelaydeaceptanuevosconexionesclientesdelo relayscliente
El
Troubleshooting enfoqueRápido
Bucle especialmentedetectado
- Verificar
infraestructurasmyorigin
donde(sineltypos) - Configurar
transport_maps
- Verificar
mynetworks
en ambos servidores
Alias no esfunciona
- Verificar
principal/etc/aliases
- Ejecutar
esnewaliases
- Verificar
paraconalertaspostalias
y-q
Relay denied
- Verificar IP real de conexión en logs
- Añadir IP a
mynetworks
del smart relay
- Reload postfix
Aviso
Legal
mynetworks
del smart relayEsta documentación yse suproporciona contenido,"tal nocomo implicaestá" quesin funcionegarantías. enSe turecomienda casorealizar opruebas determinados casos.
También implica que tienes conocimientos sobre lo que trata,exhaustivas y que en cualquier caso tienesmantener copias de seguridad.
Para contenidosoporte el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte deprofesional: Castris Soporte
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.