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.