En av de viktigaste uppgifterna vid byggandet av storskaliga Zimbra OSE-infrastrukturer Ă€r korrekt belastningsbalansering. Förutom att den ökar tjĂ€nstens tillgĂ€nglighet, Ă€r det omöjligt att sĂ€kerstĂ€lla samma responsivitet för alla anvĂ€ndare utan belastningsbalansering. För att lösa detta problem anvĂ€nds belastningsbalanserare â bĂ„de programvaru- och hĂ„rdvarulösningar som omfördelar förfrĂ„gningar mellan servrar. Bland dessa finns enkla lösningar som RoundRobin, som helt enkelt dirigerar varje nĂ€sta förfrĂ„gan till den nĂ€sta servern i listan, samt mer avancerade alternativ som HAProxy, som Ă€r mycket anvĂ€nd i högbelastade berĂ€kningsinfrastrukturer pĂ„ grund av en rad betydande fördelar. LĂ„t oss titta pĂ„ hur vi kan sĂ€kerstĂ€lla samarbete mellan belastningsbalanseraren HAProxy och Zimbra OSE.

SÄ, enligt uppgifternas krav har vi en Zimbra OSE-infrastruktur med tvÄ Zimbra Proxy, tvÄ LDAP-servrar och en LDAP-replika, fyra e-postlagringsutrymmen med 1000 e-postlÄdor vardera och tre MTA:er. Med tanke pÄ att vi arbetar med en e-postserver kommer det att finnas tre typer av trafik som behöver balanseras: HTTP för att ladda webbklienten samt POP och SMTP för e-postöverföring. HÀr kommer HTTP-trafiken att gÄ till servrar Zimbra Proxy med IP-adresserna 192.168.0.57 och 192.168.0.58, medan SMTP-trafiken kommer att riktas mot MTA-servrar med IP-adresserna 192.168.0.77 och 192.168.0.78.
Som redan nÀmnts kommer vi att anvÀnda belastningsbalanseraren HAProxy för att sÀkerstÀlla en jÀmn fördelning av förfrÄgningar mellan servrarna. Den kommer att köras pÄ ingÄngsnoden i Zimbra-infrastrukturen som drivs av Ubuntu 18.04. Installationen av haproxy i detta operativsystem görs med kommandot sudo apt-get install haproxy. Efter det behöver vi i filen /etc/default/haproxy Àndra parameter ENABLED=0 till ENABLED=1. Nu, för att sÀkerstÀlla att haproxy fungerar, rÀcker det att skriva kommandot service haproxy. Om denna tjÀnst Àr aktiv, kommer detta att framgÄ av kommandots utdata.
En av HAProxy:s största brister Àr att den som standard inte vidarebefordrar IP-adressen till den anslutna klienten, utan ersÀtter den med sin egen. Detta kan leda till situationer dÀr e-post som skickas av angripare inte kan identifieras baserat pÄ IP-adress, för att lÀgga till den i svartlistan. Detta problem kan dock lösas. För detta behöver du redigera filen /opt/zimbra/common/conf/master.cf.in pÄ servrar med Postfix och lÀgga till följande rader:
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_adjustGenom detta öppnar vi portarna 26, 466 och 588, som kommer att ta emot inkommande trafik frÄn HAProxy. Efter att filerna har sparats, bör Postfix startas om pÄ alla servrar med kommandot zmmtactl restart.
DÀrefter gÄr vi vidare med konfigurationen av HAProxy. För detta skapar vi först en sÀkerhetskopia av konfigurationsfilen cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Sedan öppnar vi den ursprungliga filen i en textredigerare /etc/haproxy/haproxy.cfg och börjar steg för steg lÀgga till de nödvÀndiga instÀllningarna. Den första delen kommer att vara att lÀgga till servern som hanterar loggar, se till att maximalt antal samtidiga anslutningar Àr instÀllt, samt ange namnet och gruppen för anvÀndaren som den körande processen kommer att tillhöra.
global
user daemon
group daemon
daemon
log 127.0.0.1 daemon
maxconn 5000
chroot /var/lib/haproxySiffran 5000 för samtidiga anslutningar Àr inte utan anledning. Eftersom vi har 4000 e-postlÄdor i vÄr infrastruktur mÄste vi förutse risken att alla loggar in pÄ sina jobbet samtidigt. Dessutom behöver vi ha en liten marginal ifall antalet ökar.
LÄt oss nu lÀgga till en block med standardinstÀllningar:
defaults
timeout client 1m
log global
mode tcp
timeout server 1m
timeout connect 5sI detta block anges den maximala vÀntetiden för klienten och servern för att avbryta anslutningen nÀr tiden gÄr ut, samt driftlÀget för HAProxy. I vÄrt fall arbetar lastbalanseraren i TCP-lÀge, vilket innebÀr att den bara vidarebefordrar TCP-paket utan att analysera deras innehÄll.
DÀrefter lÀgger vi till regler för anslutningar pÄ olika portar. Om port 25 anvÀnds för SMTP-anslutningar och e-postöverföring, Àr det meningsfullt att omdirigera anslutningar till den till MTA:erna i vÄr infrastruktur. Om anslutningen dÀremot gÄr till port 80, handlar det om en http-förfrÄgan som mÄste vidarebefordras till Zimbra Proxy.
Regel för 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-proxyRegel för 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-proxyRegel för 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-proxyRegel för 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 checkRegel för 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 checkObservera att i reglerna för att vidarebefordra TCP-paket till MTA finns parametern send-proxy. Detta Àr nödvÀndigt för att, i enlighet med de Àndringar vi gjorde tidigare i Postfix-instÀllningarna, det ursprungliga IP-adressen för avsÀndaren ocksÄ ska vidarebefordras med TCP-paketen.
Nu nÀr alla nödvÀndiga Àndringar i HAProxy har gjorts, kan tjÀnsten startas om med kommandot service haproxy restart och börja anvÀnda den.
För alla frÄgor relaterade till Zextras Suite kan ni kontakta företagets representant "Zextras", Ekaterina Triandafiliidi, via e-post katerina@zextras.com
KĂ€lla: habr.com
