Équilibrage de charge dans Zimbra Open-Source Edition à l'aide de HAProxy

L'une des tâches principales dans la construction d'infrastructures Zimbra OSE à grande échelle est un équilibrage de charge compétent. En plus d'augmenter la tolérance aux pannes du service, sans équilibrage de charge il est impossible d'assurer la même réactivité du service pour tous les utilisateurs. Afin de résoudre ce problème, des équilibreurs de charge sont utilisés - des solutions logicielles et matérielles qui redistribuent les requêtes entre les serveurs. Parmi eux, il y en a à la fois des plus primitifs, comme RoundRobin, qui envoie simplement chaque requête suivante au serveur suivant dans la liste, et il y en a des plus avancés, par exemple, HAProxy, qui est largement utilisé dans les infrastructures informatiques très chargées en raison de un certain nombre d'avantages non négligeables. Voyons comment l'équilibreur de charge HAProxy et Zimbra OSE peuvent fonctionner ensemble.

Équilibrage de charge dans Zimbra Open-Source Edition à l'aide de HAProxy

Ainsi, selon les termes du problème, on nous donne une infrastructure Zimbra OSE, qui a deux proxies Zimbra, deux serveurs LDAP et LDAP Replica, quatre magasins de courrier avec 1000 boîtes aux lettres chacun et trois MTA. Etant donné qu'il s'agit d'un serveur de messagerie, celui-ci recevra trois types de trafic qu'il faudra équilibrer : HTTP pour le téléchargement du client web, ainsi que POP et SMTP pour l'envoi des emails. Dans ce cas, le trafic HTTP ira aux serveurs Zimbra Proxy avec les adresses IP 192.168.0.57 et 192.168.0.58, et le trafic SMTP ira aux serveurs MTA avec les adresses IP 192.168.0.77 et 192.168.0.78.

Comme déjà mentionné, pour assurer une répartition uniforme des requêtes entre les serveurs, nous utiliserons l'équilibreur de charge HAProxy, qui s'exécutera sur le nœud d'entrée de l'infrastructure Zimbra exécutant Ubuntu 18.04. L'installation de haproxy sur ce système d'exploitation se fait à l'aide de la commande sudo apt-get install haproxy. Après cela, il faut dans le fichier /etc/default/haproxy modifier le paramètre ACTIVÉ=0 sur ACTIVÉ=1. Maintenant, pour vous assurer que haproxy fonctionne, entrez simplement la commande haproxy de service. Dans le cas où ce service est en cours d'exécution, il sera clair à partir de la sortie de la commande.

L'un des principaux défauts de HAProxy est qu'il ne transmet pas par défaut l'adresse IP du client connecté, la remplaçant par la sienne. Cela peut conduire à des situations où les lettres envoyées par des attaquants ne peuvent pas être identifiées par adresse IP afin de les ajouter à la liste noire. Cependant, ce problème peut être résolu. Pour ce faire, vous devez modifier le fichier /opt/zimbra/common/conf/master.cf.in sur les serveurs Postfix et ajoutez-y les lignes suivantes :

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_adjust

Pour cette raison, nous ouvrirons les ports 26, 466 et 588, qui recevront le trafic entrant de HAProxy. Une fois les fichiers sauvegardés, redémarrez Postfix sur tous les serveurs à l'aide de la commande zmmtactl restart.

Après cela, commençons à configurer HAProxy. Pour ce faire, créez d'abord une copie de sauvegarde du fichier de paramètres cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Ouvrez ensuite le fichier source dans un éditeur de texte /etc/haproxy/haproxy.cfg et commencez à y ajouter progressivement les paramètres nécessaires. Le premier bloc consistera à ajouter un serveur qui prend les journaux, à définir le nombre maximum de connexions simultanées autorisées, ainsi qu'à spécifier le nom et le groupe de l'utilisateur auquel appartiendra le processus exécutable.

global
    user daemon
    group daemon
    daemon
    log 127.0.0.1 daemon
    maxconn 5000
    chroot /var/lib/haproxy

Le chiffre de 5000 connexions simultanées est apparu pour une raison. Comme il y a 4000 boîtes aux lettres dans notre infrastructure, il est nécessaire de prévoir la possibilité que toutes accèdent à leur courrier professionnel en même temps. De plus, il faut laisser une petite marge au cas où leur nombre augmenterait.

Ajoutons maintenant un bloc avec les paramètres par défaut :

defaults
        timeout client 1m
        log global
        mode tcp
        timeout server 1m
        timeout connect 5s

Ce bloc définit le temps d'attente maximal du client et du serveur pour fermer la connexion lorsqu'elle expire, et définit également le mode de fonctionnement HAProxy. Dans notre cas, l'équilibreur de charge fonctionne en mode TCP, c'est-à-dire qu'il transfère simplement les paquets TCP sans analyser leur contenu.

Ensuite, nous ajouterons des règles pour les connexions sur différents ports. Par exemple, si le port 25 est utilisé pour les connexions SMTP et le transfert de courrier, il est logique de transférer les connexions vers les MTA que nous avons dans notre infrastructure. Si la connexion est sur le port 80, il s'agit d'une requête http qui doit être transmise au proxy Zimbra.

Règle pour le port 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-proxy

Règle pour le port 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-proxy

Règle pour le port 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-proxy

Règle pour le port 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 check

Règle pour le port 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 check

Veuillez noter que dans les règles de transfert des paquets TCP vers le MTA, à côté de leurs adresses se trouve le paramètre envoyer-proxy. Ceci est nécessaire pour que, conformément aux modifications que nous avons apportées précédemment aux paramètres de Postfix, l'adresse IP d'origine de son expéditeur soit également envoyée avec les paquets TCP.

Maintenant que toutes les modifications nécessaires ont été apportées à HAProxy, vous pouvez redémarrer le service avec la commande redémarrage du service haproxy et commencer à l'utiliser.

Pour toutes les questions relatives à Zextras Suite, vous pouvez contacter le représentant de Zextras Ekaterina Triandafilidi par e-mail [email protected]

Source: habr.com

Ajouter un commentaire