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.

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: pass
  • DKIM-Signature: v=1
  • Alineació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 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ó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:

Pre-Producción
  • Redundancia: Múltiplesmyorigin smartsin relayserrores distribuidostipográficos
  • Seguridad: Autenticaciónmynetworks porincluye IPtodas las IPs necesarias
  •  transport_maps configurado para evitar bucles
  •  Aliases funcionando (postalias -q root /etc/aliases)
  •  SPF record publicado
  •  DKIM keys generados y TLSDNS obligatorioconfigurado
  • Compatibilidad: SPF, DKIM y DMARC correctospolicy establecida
  • Mantenibilidad: Test de envío exitoso
  • Logs centralizadossin yerrores configuraciónde modularrelay
  • Escalabilidad: FácilSmart adiciónrelay deacepta nuevosconexiones clientesdel o relayscliente

El

Troubleshooting enfoqueRápido

es

Bucle especialmentedetectado

útil
    para
  1. Verificar infraestructurasmyorigin donde(sin eltypos)
  2. correo
  3. Configurar transport_maps
  4. Verificar mynetworks en ambos servidores

Alias no esfunciona

el
    servicio
  1. Verificar principal/etc/aliases
  2. pero
  3. Ejecutar esnewaliases
  4. crítico
  5. Verificar paracon alertaspostalias y-q
  6. notificaciones.

Relay denied

  1. Verificar IP real de conexión en logs
  2. Añadir IP a mynetworks del smart relay
  3. Reload postfix

 Legal

Esta 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.

El

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.