Lastbalancering i Zimbra Open-Source Edition ved hjælp af HAProxy

En af de vigtigste opgaver ved opbygningen af skalerbare infrastrukturer til Zimbra OSE er korrekt lastbalancering. Udover at den øger tjenestens fejlfindingskapacitet, er det umuligt at sikre ensartet responstid for tjenesten til alle brugere uden lastbalancering. For at løse denne opgave anvendes lastbalancer, som er software- og hardwareløsninger, der distribuerer forespørgsler mellem servere. Blandt dem findes der både ret primitive løsninger som RoundRobin, der simpelthen sender den næste forespørgsel til den næste server i rækken, og mere avancerede løsninger som HAProxy, der er vidt anvendt i højbelastede beregningsinfrastrukturer på grund af en række betydelige fordele. Lad os se på, hvordan man kan sikre samarbejdet mellem lastbalanceren HAProxy og Zimbra OSE.

Lastbalancering i Zimbra Open-Source Edition ved hjælp af HAProxy

Så, ifølge betingelserne for opgaven, har vi en Zimbra OSE-infrastruktur, der omfatter to Zimbra Proxy, to LDAP-servere og LDAP-replikat, fire postlagre med 1000 postkasser hver og tre MTA'er. I betragtning af, at vi arbejder med en postserver, vil der være tre typer trafik, der kræver lastbalancering: HTTP til indlæsning af webklienten samt POP og SMTP til videresendelse af e-mails. I denne forbindelse vil HTTP-trafikken gå til servere Zimbra Proxy med IP-adresserne 192.168.0.57 og 192.168.0.58, mens SMTP-trafikken vil blive sendt til MTA-serverne med IP-adresserne 192.168.0.77 og 192.168.0.78.

Som nævnt tidligere vil vi bruge lastbalanceren HAProxy for at sikre en jævn fordeling af forespørgslerne mellem serverne, som vil køre på indgangen til Zimbra-infrastrukturen under Ubuntu 18.04. Installation af haproxy i dette operativsystem udføres med kommandoen sudo apt-get install haproxy. Derefter skal parameteren i filen /etc/default/haproxy ændres fra ENABLED=0 og få en fungerende kommando. tilENABLED=1 . Nu, for at sikre, at haproxy fungerer, er det nok at indtaste kommandoen. Hvis denne tjeneste fungerer, vil dette være tydeligt fra kommandoens output.

En af de vigtigste mangler ved HAProxy er, at den som standard ikke videresender IP-adressen på den tilsluttede klient, men i stedet erstatter den med sin egen. Dette kan føre til situationer, hvor e-mails sendt af angribere ikke kan identificeres ud fra IP-adressen, så de kan tilføjes til en sortliste. Dette problem kan dog løses. Det kræver, at man redigerer filen /opt/zimbra/common/conf/master.cf.in på servere med Postfix og tilføjer følgende linjer:

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

På denne måde åbner vi portene 26, 466 og 588, som vil modtage indgående trafik fra HAProxy. Når filerne er gemt, skal Postfix genstartes på alle servere ved hjælp af kommandoen zmmtactl restart.

Herefter går vi i gang med at konfigurere HAProxy. Først skal vi lave en backup af konfigurationsfilen cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Derefter åbner vi kildefilen i en teksteditor /etc/haproxy/haproxy.cfg og begynder trin for trin at tilføje de nødvendige indstillinger. Den første blok vil inkludere tilføjelsen af serveren, der indsamler logs, opsætning af det maksimalt tilladte antal samtidige forbindelser samt angivelse af navnet og gruppen for den bruger, som den udførende proces skal tilhøre.

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

Tallet på 5000 samtidige forbindelser er ikke tilfældigt. Da vi har 4000 mailbokse i vores infrastruktur, er der behov for at tage højde for muligheden for, at alle de samtidig logger ind i deres arbejds-mail. Derudover er det nødvendigt at efterlade en lille margin, hvis antallet skulle stige.

Lad os nu tilføje en blok med standardindstillinger:

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

I denne blok angives den maksimale ventetid for klienten og serveren til at bryde forbindelsen, når tiden er udløbet, samt driftsindstillingen for HAProxy. I vores tilfælde arbejder load balancer i TCP-tilstand, hvilket betyder, at den blot videresender TCP-pakkerne uden at analysere deres indhold.

Vi vil derefter tilføje regler for forbindelser på forskellige porte. For eksempel, hvis port 25 bruges til SMTP-forbindelser og mailoverførsel, giver det mening at videresende forbindelser til denne port til MTA'erne i vores infrastruktur. Hvis forbindelsen derimod er på port 80, er det en http-anmodning, der skal videresendes til Zimbra Proxy.

Regel for 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

Regel for 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

Regel for 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

Regel for 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

Regel for 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

Bemærk, at i reglerne for videresendelse af TCP-pakker til MTA'er står parameteren send-proxy. Dette er nødvendigt for, at den originale IP-adresse på afsenderen også bliver videresendt sammen med TCP-pakkerne i overensstemmelse med de ændringer, vi tidligere har lavet i Postfix-indstillingerne.

Nu, hvor alle nødvendige ændringer i HAProxy er foretaget, kan tjenesten genstartes med kommandoen service haproxy restart og derefter tages i brug.

Hvis du har spørgsmål vedrørende Zextras Suite, kan du kontakte virksomhedens repræsentant "Zextras", Ekaterina Triandafiliidi, på e-mail katerina@zextras.com

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster