Bilanciamento del carico in Zimbra Open-Source Edition utilizzando HAProxy

Uno dei compiti principali quando si creano infrastrutture Zimbra OSE su larga scala è il corretto bilanciamento del carico. Oltre ad aumentare la tolleranza agli errori del servizio, senza il bilanciamento del carico è impossibile garantire la stessa reattività del servizio a tutti gli utenti. Per risolvere questo problema, vengono utilizzati bilanciatori di carico: soluzioni software e hardware che ridistribuiscono le richieste tra i server. Tra questi ce ne sono alcuni piuttosto primitivi, come RoundRobin, che invia semplicemente ogni richiesta successiva al server successivo nell'elenco, e ce ne sono anche di più avanzati, ad esempio HAProxy, che è ampiamente utilizzato nelle infrastrutture informatiche ad alto carico a causa di un serie di vantaggi significativi. Diamo un'occhiata a come è possibile far funzionare insieme il sistema di bilanciamento del carico HAProxy e Zimbra OSE.

Bilanciamento del carico in Zimbra Open-Source Edition utilizzando HAProxy

Quindi, secondo i termini dell'incarico, ci viene assegnata l'infrastruttura Zimbra OSE, che dispone di due proxy Zimbra, due server LDAP e replica LDAP, quattro archivi di posta con 1000 caselle di posta ciascuno e tre MTA. Dato che si tratta di un server di posta, riceverà tre tipi di traffico che devono essere bilanciati: HTTP per scaricare il client web, nonché POP e SMTP per l'invio di posta elettronica. In questo caso, il traffico HTTP andrà ai server proxy Zimbra con indirizzi IP 192.168.0.57 e 192.168.0.58 e il traffico SMTP andrà ai server MTA con indirizzi IP 192.168.0.77 e 192.168.0.78.

Come già accennato, per garantire che le richieste siano distribuite uniformemente tra i server, utilizzeremo il bilanciatore del carico HAProxy, che verrà eseguito sul nodo di ingresso dell'infrastruttura Zimbra con Ubuntu 18.04. L'installazione di haproxy su questo sistema operativo viene eseguita utilizzando il comando sudo apt-get install haproxy. Dopodiché è necessario nel file /etc/default/haproxy modificare parametro ABILITATO = 0 su ABILITATO = 1. Ora, per assicurarti che haproxy funzioni, basta inserire il comando servizio haproxy. Se questo servizio è in esecuzione, ciò sarà chiaro dall'output del comando.

Uno dei principali svantaggi di HAProxy è che per impostazione predefinita non trasmette l'indirizzo IP del client che si connette, sostituendolo con il proprio. Ciò può portare a situazioni in cui le e-mail inviate dagli aggressori non possono essere identificate tramite l'indirizzo IP per aggiungerle alla lista nera. Tuttavia, questo problema può essere risolto. Per fare ciò è necessario modificare il file /opt/zimbra/common/conf/master.cf.in sui server con Postfix e aggiungi le seguenti righe:

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

Per questo motivo apriremo le porte 26, 466 e 588, che riceveranno il traffico in entrata da HAProxy. Dopo che i file sono stati salvati, dovresti riavviare Postfix su tutti i server utilizzando il comando zmmtactl restart.

Successivamente, iniziamo a configurare HAProxy. Per fare ciò, crea prima una copia di backup del file delle impostazioni cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Quindi apri il file sorgente in un editor di testo /etc/haproxy/haproxy.cfg e inizia ad aggiungere le impostazioni necessarie passo dopo passo. Il primo blocco aggiungerà un server che accetta i log, impostando il numero massimo consentito di connessioni simultanee, nonché specificando il nome e il gruppo dell'utente a cui apparterrà il processo di esecuzione.

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

La cifra di 5000 connessioni simultanee è apparsa per un motivo. Poiché nella nostra infrastruttura sono presenti 4000 caselle di posta, dobbiamo considerare la possibilità che tutte accedano alla posta elettronica di lavoro contemporaneamente. Inoltre, è necessario lasciare una piccola riserva nel caso in cui il loro numero aumenti.

Ora aggiungiamo un blocco con le impostazioni predefinite:

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

Questo blocco imposta il timeout massimo per il client e il server per chiudere la connessione alla scadenza e imposta anche la modalità operativa di HAProxy. Nel nostro caso, il bilanciatore funziona in modalità TCP, ovvero trasmette semplicemente i pacchetti TCP senza analizzarne il contenuto.

Successivamente aggiungeremo le regole per le connessioni su varie porte. Se ad esempio la porta 25 viene utilizzata per le connessioni SMTP e la posta, è opportuno inoltrare le connessioni ad essa agli MTA disponibili nella nostra infrastruttura. Se la connessione è sulla porta 80, si tratta di una richiesta http che deve essere inoltrata al proxy Zimbra.

Regola per la porta 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

Regola per la porta 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

Regola per la porta 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

Regola per la porta 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

Regola per la porta 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

Tieni presente che nelle regole per l'inoltro dei pacchetti TCP all'MTA, accanto ai loro indirizzi c'è un parametro proxy di invio. Ciò è necessario affinché, in conformità con le modifiche apportate in precedenza alle impostazioni di Postfix, l'indirizzo IP originale del mittente venga inviato insieme ai pacchetti TCP.

Ora che tutte le modifiche necessarie sono state apportate a HAProxy, è possibile riavviare il servizio utilizzando il comando riavvio del servizio haproxy e iniziare a usarlo.

Per tutte le domande relative a Zextras Suite, è possibile contattare il rappresentante di Zextras Ekaterina Triandafilidi via e-mail [email protected]

Fonte: habr.com

Aggiungi un commento