Unu di i travaglii principali quandu custruisce infrastrutture Zimbra OSE à grande scala hè un equilibramentu di carica propiu. In più di u fattu chì aumenta a tolleranza di difetti di u serviziu, senza equilibriu di carica hè impussibile di assicurà a stessa rispunsibilità di u serviziu per tutti l'utilizatori. Per risolve stu prublema, i bilanci di carica sò usati - suluzioni software è hardware chì ridistribuiscenu e dumande trà i servitori. À mezu à elli ci sò abbastanza primitivi, cum'è RoundRobin, chì simpricimenti manda ogni dumanda sussegwente à u servitore prossimu in a lista, è ci sò ancu più avanzati, per esempiu HAProxy, chì hè largamente utilizatu in infrastrutture di computing high-load per via di una numeru di vantaghji significativu. Fighjemu un ochju à cumu pudete fà chì l'equilibriu di carica HAProxy è Zimbra OSE travaglianu inseme.

Cusì, secondu e specificazioni di u prublema, ci hè data una infrastruttura Zimbra OSE, chì include dui Zimbra Proxies, dui servitori LDAP, una replica LDAP, quattru magazzini di caselle postali cù 1000 caselle postali ognunu, è trè MTA. Cunsiderendu chì avemu à chì fà cù un servitore di posta, riceverà trè tippi di trafficu chì richiedenu un equilibriu: HTTP per u caricamentu di u cliente web, è ancu POP è SMTP per l'inoltru di e-mail. U trafficu HTTP serà mandatu à servitori Zimbra Proxy cù indirizzi IP 192.168.0.57 è 192.168.0.58, è u trafficu SMTP anderà à i servitori MTA cù indirizzi IP 192.168.0.77 è 192.168.0.78.
Cum'è digià mintuvatu, per assicurà una distribuzione uniforme di e richieste trà i servitori, useremu l'equilibratore di carica HAProxy, chì funziona nantu à u nodu d'ingressu di l'infrastruttura Zimbra in esecuzione. Ubuntu 18.04. L'installazione di haproxy in questu sistema operativu hè realizata cù u cumandamentu sudo apt-get install haproxy. Dopu questu avete bisognu in u schedariu /etc/default/haproxy parametru ismenit ENABLED=0 nantu ENABLED=1. Avà, per assicurà chì l'haproxy funziona, basta entre u cumandamentu serviziu haproxy. Se stu serviziu hè in esecuzione, questu serà chjaru da a pruduzzioni di u cumandamentu.
Unu di i principali svantaghji di HAProxy hè chì per difettu ùn trasmette micca l'indirizzu IP di u cliente chì si cunnetta, rimpiazzendulu cù u soiu. Questu pò purtà à situazioni induve l'email mandate da l'attaccanti ùn ponu esse identificate da indirizzu IPper aghjunghje lu à a lista nera. Tuttavia, stu prublema pò esse risoltu. Per fà questu, avete bisognu di mudificà u schedariu /opt/zimbra/common/conf/master.cf.in nantu à i servitori cù Postfix è aghjunghje e seguenti linee:
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_adjustPer via di questu, apriremu i porti 26, 466 è 588, chì riceveranu u trafficu entrante da HAProxy. Dopu chì i fugliali sò stati salvati, duvete riavvià Postfix in tutti i servitori cù u cumandamentu di riavvia zmmtactl.
Dopu quì, cuminciamu à stallà HAProxy. Per fà questu, prima crea una copia di salvezza di u schedariu di paràmetri cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Dopu apre u schedariu fonte in un editore di testu /etc/haproxy/haproxy.cfg è cumincià à aghjunghje i paràmetri necessarii à questu passu à passu. U primu bloccu serà aghjustatu un servitore chì piglia logs, stabilisce u numeru massimu permessu di cunnessione simultanea, è ancu specificà u nome è u gruppu di l'utilizatore à quale appartene u prucessu di esecuzione.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxyA figura di 5000 4000 cunnessione simultanea apparsu per una ragione. Siccomu avemu XNUMX XNUMX mailbox in a nostra infrastruttura, avemu bisognu di cunsiderà a pussibilità chì tutti accedenu à u so email di u travagliu à u stessu tempu. Inoltre, hè necessariu di lascià una piccula riserva in casu chì u so numeru aumenta.
Avà aghjunghje un bloccu cù i paràmetri predeterminati:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sStu bloccu stabilisce u timeout massimu per u cliente è u servitore per chjude a cunnessione quandu scade, è ancu stabilisce u modu operativu di HAProxy. In u nostru casu, u balancer di carica opera in modu TCP, vale à dì, trasmette solu pacchetti TCP senza analizà u so cuntenutu.
In seguitu, aghjunghje regule per e cunnessione in parechji porti. Per esempiu, se u portu 25 hè utilizatu per e cunnessione SMTP è mail, allora hè sensu per rinvià e cunnessione à l'MTA dispunibuli in a nostra infrastruttura. Se a cunnessione hè in u portu 80, allora questu hè una dumanda http chì deve esse trasmessa à Zimbra Proxy.
Regula per u portu 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-proxyRegula per u portu 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-proxyRegula per u portu 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-proxyRegula per u portu 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 checkRegula per u portu 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 checkPer piacè nutate chì in e regule per trasmette i pacchetti TCP à l'MTA, accantu à i so indirizzi ci hè un paràmetru mandate-proxy. Questu hè necessariu per chì, in cunfurmità cù i cambiamenti chì avemu fattu prima à i paràmetri di Postfix, l'indirizzu IP originale di u so mittente hè mandatu cù i pacchetti TCP.
Avà chì tutti i cambiamenti necessarii sò stati fatti à HAProxy, pudete riavvia u serviziu cù u cumandimu riavvia u serviziu haproxy è cumincià à aduprà.
Per tutte e dumande riguardanti Zextras Suite, pudete cuntattà a Rappresentante Zextras Ekaterina Triandafilidi per email katerina@zextras.com
Source: www.habr.com
