Proxy inverso para servidores SMTP

Un proxy inverso es un servidor que se sitúa delante de uno o más servidores web
para gestionar las solicitudes de los clientes, mejorando así la seguridad, el rendimiento y la escalabilidad.

diagrama de proxy inverso

En lugar de comunicarse directamente con los servidores,
los clientes envían sus solicitudes al proxy inverso,
que las redirige a los servidores adecuados,
actuando como un único punto de acceso seguro.

Beneficios clave:

  • Seguridad: Puede bloquear solicitudes maliciosas, cifrar el tráfico
    y proteger los servidores backend de ataques directos.
  • Rendimiento: Distribuye el tráfico entrante entre varios servidores, evitando la sobrecarga
    de un solo servidor y garantizando una mayor disponibilidad.
  • Escalabilidad: Permite añadir o eliminar servidores backend sin interrupción del servicio,
    ofreciendo la capacidad de gestionar un tráfico creciente.

Proxy inverso solo HTTP (Capa 7)

Hay varias herramientas disponibles en Internet; después de investigar, inicialmente descartamos aquellas que solo admiten el protocolo HTTP (Capa 7):

NO Apache
“¡Ay, Dios mío! Tómese un momento para familiarizarse con las tecnologías que está utilizando. El correo electrónico usa SMTP. Apache usa HTTP. Apache no sabe absolutamente nada sobre SMTP. Si desea trabajar con mensajes de correo electrónico, necesitará una tecnología compatible con SMTP.” – EEAA comentó el 18 de agosto de 2016 a las 2:49.

NO Caddy
“Caddy no puede actuar como proxy para TCP, solo para HTTP sobre TCP. Utilice un proxy inverso que pueda actuar como proxy para TCP, como Traefik, Nginx o haproxy, o utilice este complemento experimental.” – ElevenNotes comentó el 24 de septiembre de 2024


A continuación, nos centramos en las tres opciones recomendadas en los comentarios: "Traefik, NginX o HAProxy", instalándolas y probándolas una por una.

Traefik fue la primera opción.

La mayoría de los tutoriales comenzaban con Docker, una plataforma que quería evitar y para la que prefería una solución sencilla, posiblemente basada en uno de los gestores de paquetes de Linux, como YUM para distribuciones basadas en RPM como Fedora y CentOS, o APT (Advanced Package Tool), que se utiliza en distribuciones basadas en Debian como Ubuntu y Debian.

Tras una larga búsqueda, encontramos este artículo reciente, que describe el tipo de instalación que buscábamos: Configurar Traefik como un servicio systemd.

Una aclaración: debe cambiar la configuración de SELinux de "Enforcing" a "Permissive"

Tras probar dos cursos en Udemy, encontramos este excelente: Traefik Crash Course (sin Docker). Logramos que funcionara reproduciendo los ejemplos. Hacia el final del vídeo, el excelente instructor expresó su total desaprobación de esta herramienta: Traefik Crash Course - 53:50 Summary.
Esto nos desanimó a seguir probando, lo que nos llevó a buscar otra alternativa.

NginX fue la segunda opción

En este caso, la instalación fue más sencilla, usando YUM en resumen:
yum install epel-release nginx nginx-mod-stream nginx-mod-mail
Una nota: en SELinux, necesitas habilitar el relé:
setsebool -P httpd_can_network_relay 1

Para la capacitación, fuimos a lo seguro, con el mismo instructor del curso anterior: NginX Crash Course (la primera parte termina después de aproximadamente una hora y veinte minutos). El instructor tampoco está convencido de esta aplicación, en particular del hecho de que funciona como servidor web y proxy inverso: NginX Crash Course - 1:20:10 Summary.
El informe termina con "Elijo HAProxy en lugar de NginX", así que decidimos probar HAProxy también.

Finalmente, también probamos HAProxy.

La instalación resultó ser facilísima, ya que es una aplicación muy común, disponible en todos los gestores de paquetes de Linux, por ejemplo: yum install haproxy

También hemos consultado a nuestro instructor de confianza: HAProxy Crash Course.

Funciona, pero lamentablemente NO es adecuado para la autenticación SMTP:
“No es posible configurar haproxy de esta manera, porque haproxy no admite SMTP en absoluto”.
lukastribus comentó el 17 de agosto de 2023.


Un servidor SMTP estándar como proxy inverso

Llegados a este punto, tras dos semanas de pruebas, nos dimos cuenta de que
es mejor utilizar un servidor SMTP estándar como proxy inverso para otros servidores SMTP.

Cumple su función utilizando únicamente el protocolo SMTP, autentica correctamente las conexiones
y puede reenviar solicitudes a otros servidores SMTP mediante la función "smarthost".

En Postfix, en main.cf, como
relayhost = [dirección_de_host_inteligente]:puerto

En Sendmail, en sendmail.mc, como
define(`SMART_HOST',`mail.example.com')


volver arriba