Bilanciamento del carico in Zimbra Open-Source Edition con HAProxy

Una delle principali sfide nella creazione di infrastrutture scalabili per Zimbra OSE è la corretta gestione del bilanciamento del carico. Oltre a migliorare l'affidabilità del servizio, un bilanciamento efficace è essenziale per garantire una risposta uniforme per tutti gli utenti. Per risolvere questo problema, si ricorre a bilanciatori di carico, soluzioni software e hardware che redistribuiscono le richieste tra i server. Esistono soluzioni piuttosto primitive, come RoundRobin, che semplicemente invia ogni richiesta successiva al server successivo nella lista, e soluzioni più avanzate, come HAProxy, che è ampiamente utilizzato in infrastrutture di calcolo ad alta intensità a causa dei suoi numerosi vantaggi. Vediamo quindi come garantire un'integrazione ottimale tra il bilanciatore di carico HAProxy e Zimbra OSE.

Bilanciamento del carico in Zimbra Open-Source Edition con HAProxy

Quindi, in base ai requisiti, abbiamo un'infrastruttura Zimbra OSE che include due Zimbra Proxy, due server LDAP e una Replica LDAP, quattro store di posta con 1000 caselle di posta ciascuno e tre MTA. Considerando che ci occupiamo di un server di posta, riceverà tre tipi di traffico che necessitano di bilanciamento: HTTP per il caricamento del client web, oltre a POP e SMTP per l'invio della posta elettronica. Qui, il traffico HTTP verrà diretto a server Zimbra Proxy con indirizzi IP 192.168.0.57 e 192.168.0.58, mentre il traffico SMTP verrà indirizzato ai server MTA con indirizzi IP 192.168.0.77 e 192.168.0.78.

Come già accennato, per garantire una distribuzione uniforme delle richieste tra i server useremo l bilanciatore di carico HAProxy, che opererà sul nodo di ingresso dell'infrastruttura Zimbra con Ubuntu 18.04. L'installazione di haproxy su questo sistema operativo può essere effettuata con il comando sudo apt-get install haproxy. Dopo di che, è necessario modificare il parametro nel file /etc/default/haproxy изменить параметр ENABLED=0 con ENABLED=1. Ora, per assicurarsi che haproxy sia attivo, basta inserire il comando service haproxy. Se questo servizio è in esecuzione, sarà evidente dall'output del comando.

Uno dei principali difetti di HAProxy è che, per impostazione predefinita, non trasmette l'indirizzo IP del client collegato, sostituendolo con il proprio. Questo può portare a situazioni in cui le email inviate dai malintenzionati non possono essere identificate indirizzo IP, per poterle inserire nella blacklist. Tuttavia, questo problema può essere risolto. È necessario modificare il file /opt/zimbra/common/conf/master.cf.in sui server con Postfix e aggiungere 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

In questo modo apriremo le porte 26, 466 e 588, che accetteranno il traffico in ingresso da HAProxy. Dopo aver salvato i file, sarà necessario riavviare Postfix su tutti i server con il comando zmmtactl restart.

Dopo questo, procederemo alla configurazione di HAProxy. Per farlo, creiamo prima una copia di backup del file di configurazione. cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Poi apriremo il file originale in un editor di testo /etc/haproxy/haproxy.cfg e inizieremo ad aggiungere gradualmente le impostazioni necessarie. Il primo blocco conterrà l'aggiunta del server che registra i log, la configurazione del numero massimo consentito di connessioni simultanee e l'indicazione del nome e del gruppo dell'utente a cui appartiene il processo in esecuzione.

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

Il numero di 5000 connessioni simultanee non è stato scelto a caso. Poiché nella nostra infrastruttura ci sono 4000 caselle di posta, è necessario prevedere la possibilità che tutte accedano contemporaneamente alla propria email. Inoltre, è opportuno lasciare un margine nel caso in cui il numero dovesse aumentare.

Ora aggiungiamo un blocco con le impostazioni predefinite:

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

In questo blocco viene impostato il tempo massimo di attesa per il client e il server, per interrompere la connessione al momento della scadenza, nonché la modalità operativa di HAProxy. In questo caso, il bilanciatore di carico opera in modalità TCP, ovvero trasmette semplicemente i pacchetti TCP senza analizzarne il contenuto.

Successivamente, aggiungeremo regole per le connessioni su diverse porte. Ad esempio, se la porta 25 è utilizzata per connessioni SMTP e invio di email, ha senso reindirizzare le connessioni a essa verso gli MTA presenti nella nostra infrastruttura. Se invece la connessione va sulla porta 80, si tratta di una richiesta http che deve essere inoltrata a Zimbra Proxy.

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

Si prega di notare che nelle regole per il forwarding dei pacchetti TCP verso l'MTA, accanto ai loro indirizzi è presente il parametro send-proxy. Questo è necessario affinché, in conformità con le modifiche precedentemente apportate alle impostazioni di Postfix, insieme ai pacchetti TCP venga inoltrato anche l'indirizzo IP originale del mittente.

Ora, una volta apportate tutte le modifiche necessarie in HAProxy, puoi riavviare il servizio utilizzando il comando service haproxy restart e iniziare a utilizzarlo.

Per qualsiasi domanda relativa a Zextras Suite, puoi contattare il rappresentante dell'azienda «Zextras», Ekaterina Triandafili, via email all'indirizzo katerina@zextras.com.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster