Una de las principales tareas en la construcción de infraestructuras Zimbra OSE a gran escala es el equilibrio de carga competente. Además de aumentar la tolerancia a fallas del servicio, sin equilibrio de carga es imposible garantizar la misma capacidad de respuesta del servicio para todos los usuarios. Para resolver este problema, se utilizan equilibradores de carga: soluciones de software y hardware que redistribuyen las solicitudes entre servidores. Entre ellos, los hay bastante primitivos, como RoundRobin, que simplemente envía cada solicitud siguiente al siguiente servidor de la lista, y los hay más avanzados, por ejemplo, HAProxy, que se usa mucho en infraestructuras informáticas muy cargadas debido a una serie de ventajas significativas. Echemos un vistazo a cómo el balanceador de carga HAProxy y Zimbra OSE pueden trabajar juntos.

Así pues, según las especificaciones del problema, se nos proporciona una infraestructura Zimbra OSE, que incluye dos proxies Zimbra, dos servidores LDAP, una réplica LDAP, cuatro almacenamientos de buzones con 1000 buzones cada uno y tres MTA. Dado que se trata de un servidor de correo, este recibirá tres tipos de tráfico que requieren balanceo: HTTP para cargar el cliente web, así como POP y SMTP para el reenvío de correo electrónico. El tráfico HTTP se enviará a servidores El proxy Zimbra con direcciones IP 192.168.0.57 y 192.168.0.58 y el tráfico SMTP se dirigirán a servidores MTA con direcciones IP 192.168.0.77 y 192.168.0.78.
Como ya se mencionó, para garantizar una distribución uniforme de las solicitudes entre servidores, utilizaremos el balanceador de carga HAProxy, que se ejecutará en el nodo de entrada de la infraestructura de Zimbra con Ubuntu 18.04. La instalación de haproxy en este sistema operativo se realiza mediante el comando sudo apt-get instalar haproxy. Después de eso, es necesario en el archivo. /etc/predeterminado/haproxy cambiar parámetro HABILITADO = 0 en HABILITADO = 1. Ahora, para asegurarse de que haproxy esté funcionando, simplemente ingrese el comando haproxy de servicio. En el caso de que este servicio se esté ejecutando, quedará claro en la salida del comando.
Una de las principales desventajas de HAProxy es que, por defecto, no transmite la dirección IP del cliente que se conecta, sustituyéndola por la suya. Esto puede provocar que los correos electrónicos enviados por atacantes no puedan identificarse. dirección IPPara añadirlo a la lista negra. Sin embargo, este problema se puede solucionar. Para ello, es necesario editar el archivo. /opt/zimbra/common/conf/master.cf.in en los servidores de Postfix y agregue las siguientes líneas:
26 inet n - n - 1 postscreen
-o postscreen_upstream_proxy_protocol=haproxy
466 inet n - n - - smtpd
%%uncomment SERVICE:opendkim%% -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=
-o smtpd_data_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o syslog_name=postfix/smtps
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust
588 inet n - n - - smtpd
%%uncomment SERVICE:opendkim%% -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=%%zimbraMtaSaslAuthEnable%%
-o smtpd_tls_security_level=%%zimbraMtaTlsSecurityLevel%%
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_data_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o syslog_name=postfix/submission
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjustDebido a esto, abriremos los puertos 26, 466 y 588, que recibirán el tráfico entrante de HAProxy. Después de guardar los archivos, reinicie Postfix en todos los servidores mediante el comando zmmtactl restart.
Después de eso, comencemos a configurar HAProxy. Para hacer esto, primero cree una copia de seguridad del archivo de configuración cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. A continuación, abra el archivo de origen en un editor de texto /etc/haproxy/haproxy.cfg y comience a agregarle gradualmente las configuraciones necesarias. El primer bloque será agregar un servidor que tome registros, establecer el número máximo de conexiones simultáneas permitidas, así como especificar el nombre y el grupo del usuario al que pertenecerá el proceso ejecutable.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxyLa cifra de 5000 conexiones simultáneas apareció por algo. Dado que existen 4000 buzones en nuestra infraestructura, es necesario prever la posibilidad de que todos vayan a su correo de trabajo al mismo tiempo. Además, es necesario dejar un pequeño margen por si aumenta su número.
Ahora agreguemos un bloque con la configuración predeterminada:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sEste bloque establece el tiempo máximo de espera del cliente y del servidor para cerrar la conexión cuando expira, y también establece el modo de funcionamiento de HAProxy. En nuestro caso, el balanceador de carga funciona en modo TCP, es decir, simplemente transfiere paquetes TCP sin analizar su contenido.
A continuación, agregaremos reglas para conexiones en varios puertos. Por ejemplo, si el puerto 25 se usa para conexiones SMTP y transferencia de correo, entonces tiene sentido reenviar conexiones a él a los MTA que tenemos en nuestra infraestructura. Si la conexión está en el puerto 80, se trata de una solicitud http que debe reenviarse al proxy de Zimbra.
Regla para el puerto 25:
frontend smtp-25
bind *:27
default_backend backend-smtp-25
backend backend-smtp-25
server mta1 192.168.0.77:26 send-proxy
server mta2 192.168.0.78:26 send-proxyRegla para el puerto 465:
frontend smtp-465
bind *:467
default_backend backend-smtp-465
backend backend-smtp-465
server mta1 192.168.0.77:466 send-proxy
server mta2 192.168.0.78:466 send-proxyRegla para el puerto 587:
frontend smtp-587
bind *:589
default_backend backend-smtp-587
backend backend-smtp-587
server mail1 192.168.0.77:588 send-proxy
server mail2 192.168.0.78:588 send-proxyRegla para el puerto 80:
frontend http-80
bind *:80
default_backend http-80
backend http-80
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 checkRegla para el puerto 443:
frontend https
bind *:443
default_backend https-443
backend https-443
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 checkTenga en cuenta que en las reglas para reenviar paquetes TCP al MTA, junto a sus direcciones está el parámetro enviar-proxy. Esto es necesario para que, de acuerdo con los cambios que hicimos anteriormente en la configuración de Postfix, la dirección IP original de su remitente también se envíe junto con los paquetes TCP.
Ahora que se han realizado todos los cambios necesarios en HAProxy, puede reiniciar el servicio con el comando reiniciar servicio haproxy y empezar a usarlo.
Para todas las preguntas relacionadas con Zextras Suite, puede comunicarse con la representante de Zextras, Ekaterina Triandafilidi, por correo electrónico a katerina@zextras.com
Fuente: habr.com
