Objetivo
Configurar un relay SMTP ligero en un contenedor LXC, utilizando Postfix, para que cualquier VM o contenedor de la red local del homelab pueda enviar alertas y notificaciones sin necesidad de configurar contraseñas individuales en cada servicio. Todo el tráfico se centraliza y reenvía hacia una cuenta de correo externa.
Diagnóstico y problemas resueltos
Descarte de Proxmox Mail Gateway
Inicialmente se evaluó Proxmox Mail Gateway (PMG), pero se descartó por su elevado consumo de recursos (~4GB de RAM). Postfix, en cambio, consume menos de 15MB de RAM en reposo — una diferencia enorme para un homelab con recursos limitados.
Apertura de la interfaz local
La configuración por defecto de Postfix viene limitada a loopback-only (solo escucha a la propia máquina). Se abrió a toda la red local con inet_interfaces = all, para que otros equipos de la LAN puedan usar el relay.
Bloqueo del puerto 587 por el ISP
El proveedor de internet tenía bloqueado el puerto 587 saliente, lo que generaba un error de Connection timed out en la cola de correo. La solución fue cambiar al puerto 465 con cifrado SSL/TLS implícito (smtp_tls_wrappermode = yes), que no estaba bloqueado.
Validación estricta del remitente
Muchos hostings de correo exigen que el encabezado From: coincida exactamente con la cuenta autenticada. Si no coincide, el mensaje es rechazado aunque la autenticación sea correcta.
Configuración final de main.cf
El archivo /etc/postfix/main.cf quedó configurado así para permitir la escucha interna y la salida segura por el puerto 465:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost
# Servidor de destino en puerto seguro 465
relayhost = [smtp.tudominio.com]:465
# Escuchar en todas las interfaces del contenedor
inet_interfaces = all
# Redes locales autorizadas a enviar correos sin contraseña
mynetworks = 127.0.0.0/8, 192.168.0.0/24
recipient_delimiter = +
compatibility_level = 2
# --- Configuración de autenticación segura (salida al hosting) ---
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain, login
# Parámetros obligatorios para el puerto 465 (SSL directo)
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_tls_supported_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1, >=TLSv1.2Archivo de credenciales
El archivo /etc/postfix/sasl_passwd contiene la contraseña del buzón emisor, indexada para el puerto 465:
[smtp.tudominio.com]:465 [email protected]:contraseñaComandos utilizados
Instalación de dependencias
apt update && apt install postfix libsasl2-modules sasl2-bin mailutils -yIndexar la contraseña en la base de datos de Postfix
postmap /etc/postfix/sasl_passwdAsignar permisos seguros al archivo de contraseñas
chmod 600 /etc/postfix/sasl_passwdReiniciar el servicio
systemctl restart postfixDiagnóstico y pruebas
Ver el estado de la cola de correos (pendientes o rebotados):
mailqForzar el envío de los correos retenidos en la cola:
postfix flushEnviar un correo de prueba manual respetando el remitente obligatorio:
echo "Esta es una prueba de alerta desde el relay del homelab." | mail -s "Test Relay Homelab" -a "From: [email protected]" [email protected]Estado de recursos
El contenedor LXC, con apenas 1 vCPU y 512MB de RAM, quedó en excelentes condiciones de salud tras la configuración. Postfix consume alrededor de 15MB de RAM y 0% de CPU en reposo, sin afectar el rendimiento de otros servicios que corran en el mismo contenedor.