Etiqueta: lxc

  • Configurando un relay SMTP ligero con Postfix en un contenedor LXC

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

    Archivo 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ña

    Comandos utilizados

    Instalación de dependencias

    apt update && apt install postfix libsasl2-modules sasl2-bin mailutils -y

    Indexar la contraseña en la base de datos de Postfix

    postmap /etc/postfix/sasl_passwd

    Asignar permisos seguros al archivo de contraseñas

    chmod 600 /etc/postfix/sasl_passwd

    Reiniciar el servicio

    systemctl restart postfix

    Diagnóstico y pruebas

    Ver el estado de la cola de correos (pendientes o rebotados):

    mailq

    Forzar el envío de los correos retenidos en la cola:

    postfix flush

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