Proxy inverso para servidores SMTP

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

diagrama de un 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 correspondientes
actuando como un único punto de acceso seguro.

Ventajas principales:

  • Seguridad Puede bloquear solicitudes maliciosas, cifrar el tráfico,
    y proteger los servidores de backend frente a ataques directos.
  • Rendimiento Distribuye el tráfico entrante entre varios servidores, lo que evita la sobrecarga
    de un solo servidor y garantiza una mayor disponibilidad.
  • Escalabilidad Permite añadir o eliminar servidores de backend sin interrumpir el servicio,
    lo que permite gestionar el aumento del tráfico.

Proxy inverso solo HTTP (capa 7)

En Internet hay varias herramientas disponibles; tras investigar, descartamos en un primer momento aquellas que solo admiten el protocolo HTTP (capa 7):

NO Apache
«Vaya. Tómate un momento para informarte sobre las tecnologías con las que estás trabajando. El correo electrónico utiliza SMTP. Apache utiliza HTTP. Apache no sabe absolutamente nada de SMTP. Si quieres trabajar con mensajes de correo electrónico, necesitarás una tecnología que utilice SMTP». – EEAA Comentado 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. Utiliza un proxy inverso que pueda actuar como proxy para TCP, como Traefik, Nginx o haproxy, o utiliza este complemento experimental». – ElevenNotes. Comentario del 24 de septiembre de 2024


A continuación, nos centramos en las tres opciones recomendadas en los comentarios: «Traefik, NginX o HAProxy», y las instalamos y probamos una por una.

Traefik fue la primera opción.

La mayoría de los tutoriales empezaban con Docker, una plataforma que quería evitar para optar por una solución sencilla, quizás basada en alguno 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 servicio de systemd.

Una nota: debes cambiar la configuración de SELinux de «Enforcing» a «Permissive».

Una vez más, tras probar dos cursos en Udemy, encontramos este excelente curso: Curso intensivo de Traefik (sin Docker) Conseguimos que funcionara reproduciendo los ejemplos proporcionados. Hacia el final del vídeo, el excelente profesor expresó su total desacuerdo con esta herramienta: Curso intensivo de Traefik - 53:50 Resumen.
Esto nos desanimó a seguir probando, lo que nos llevó a probar otra cosa.

NginX fue la segunda opción

En este caso, la instalación fue más sencilla; en resumen, se utilizó YUM:
yum install epel-release nginx nginx-mod-stream nginx-mod-mail
Nota: en SELinux, es necesario habilitar el relé:
setsebool -P httpd_can_network_relay 1

Para la formación, hemos optado por ir sobre seguro y hemos contado con el mismo formador que en el curso anterior: Curso intensivo de NginX (la primera parte termina tras aproximadamente una hora y veinte minutos). El instructor tampoco está convencido de esta aplicación, en particular del hecho de que actúe tanto como servidor web como proxy inverso: Curso intensivo de NginX - 1:20:10 Resumen.
El informe termina con «Prefiero HAProxy a NginX», así que decidimos probar también HAProxy.

Por último, también probamos HAProxy.

La instalación resultó ser pan comido, ya que se trata de una aplicación muy habitual, disponible en todos los gestores de paquetes de Linux; por ejemplo: yum install haproxy

También hemos consultado a nuestro instructor de confianza: Curso intensivo de HAProxy.

Funciona, pero, por desgracia, NO sirve para la autenticación SMTP:
«No es posible configurar HAProxy de esta manera, porque HAProxy no admite SMTP en absoluto».
lukastribus Comentado 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, autentifica correctamente las conexiones,
y puede reenviar solicitudes a otros servidores SMTP mediante la función «smarhost».

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

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


volver al inicio