Eine der Hauptaufgaben beim Aufbau großer Zimbra OSE-Infrastrukturen ist der kompetente Lastausgleich. Abgesehen von der Tatsache, dass dadurch die Fehlertoleranz des Dienstes erhöht wird, ist es ohne Lastausgleich unmöglich, allen Benutzern die gleiche Reaktionsfähigkeit des Dienstes zu bieten. Um dieses Problem zu lösen, werden Load Balancer verwendet - Software- und Hardwarelösungen, die Anforderungen zwischen Servern umverteilen. Unter ihnen gibt es einige ziemlich primitive wie RoundRobin, die einfach jede nächste Anfrage an den nächsten Server in der Liste senden, und es gibt fortgeschrittenere wie beispielsweise HAProxy, das aufgrund einer Reihe bedeutender Vorteile in stark ausgelasteten Computerinfrastrukturen weit verbreitet ist. Schauen wir uns an, wie HAProxy und Zimbra OSE Load Balancer zusammenarbeiten können.

Entsprechend den Aufgabenbedingungen erhielten wir die Zimbra OSE-Infrastruktur, in der sich zwei Zimbra Proxy-, zwei LDAP- und LDAP Replica-Server, vier Mail-Stores mit jeweils 1000 Postfächern und drei MTAs befinden. In Anbetracht der Tatsache, dass es sich um einen Mailserver handelt, werden drei Arten von Datenverkehr empfangen, die ausgeglichen werden müssen: HTTP zum Herunterladen des Webclients und POP und SMTP zum Senden von E-Mails. Gleichzeitig wird der HTTP-Datenverkehr an Zimbra Proxy-Server mit den IP-Adressen 192.168.0.57 und 192.168.0.58 und der SMTP-Datenverkehr an MTA-Server mit den IP-Adressen 192.168.0.77 und 192.168.0.78 gesendet.
Wie bereits erwähnt, verwenden wir zur Gewährleistung einer gleichmäßigen Verteilung der Anforderungen zwischen den Servern den HAProxy Load Balancer, der auf dem Eingabeknoten der Zimbra-Infrastruktur unter Ubuntu 18.04 ausgeführt wird. Die Installation von haproxy unter diesem Betriebssystem erfolgt mit dem
Befehl sudo apt-get install haproxy .
Ändern Sie anschließend in der Datei / etc / default / haproxy den Parameter
ENABLED = 0 in
ENABLED = 1 . Um sicherzustellen, dass Haproxy funktioniert, geben Sie einfach den
Befehl service haproxy ein . Für den Fall, dass dieser Dienst funktioniert, wird dies aus der Ausgabe des Befehls ersichtlich.
Einer der Hauptnachteile von HAProxy ist, dass es standardmäßig nicht die IP-Adresse des verbundenen Clients überträgt und diese durch seine eigene ersetzt. Dies kann zu Situationen führen, in denen von Angreifern gesendete E-Mails nicht anhand der IP-Adresse identifiziert werden können, um sie der schwarzen Liste hinzuzufügen. Dieses Problem kann jedoch behoben werden. Bearbeiten Sie dazu die Datei
/opt/zimbra/common/conf/master.cf.in auf Servern mit Postfix und fügen Sie die folgenden Zeilen hinzu:
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
Aus diesem Grund werden wir die Ports 26, 466 und 588 öffnen, die eingehenden Datenverkehr von HAProxy empfangen. Nach dem Speichern der Dateien sollten Sie Postfix auf allen Servern mit dem Befehl zmmtactl restart neu starten.
Danach richten wir HAProxy ein. Erstellen Sie dazu zunächst eine Sicherungskopie der Datei mit den Einstellungen
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak . Öffnen Sie dann die Quelldatei
/etc/haproxy/haproxy.cfg in einem Texteditor und fügen Sie nach und nach die erforderlichen Einstellungen hinzu. Im ersten Block wird ein Server hinzugefügt, der die Protokolle entfernt, die maximal zulässige Anzahl gleichzeitiger Verbindungen festlegt und den Namen und die Gruppe des Benutzers angibt, zu dem der ausführbare Prozess gehört.
global user daemon group daemon daemon log 127.0.0.1 daemon maxconn 5000 chroot /var/lib/haproxy
Die Zahl von 5000 gleichzeitigen Verbindungen erschien aus einem Grund. Da sich in unserer Infrastruktur 4000 Postfächer befinden, ist es erforderlich, die Wahrscheinlichkeit vorauszusagen, dass alle gleichzeitig ihre Arbeitspost erhalten. Zusätzlich müssen Sie einen kleinen Rand lassen, falls sich deren Anzahl erhöht.
Fügen Sie nun einen Block mit den Standardeinstellungen hinzu:
defaults timeout client 1m log global mode tcp timeout server 1m timeout connect 5s
In diesem Block wird das maximale Zeitlimit für den Client und den Server festgelegt, um die Verbindung bei Ablauf zu unterbrechen, und der HAProxy-Modus wird ebenfalls festgelegt. In unserem Fall arbeitet der Load Balancer im TCP-Modus, dh er überträgt einfach TCP-Pakete, ohne deren Inhalt zu analysieren.
Als Nächstes werden Regeln für Verbindungen an verschiedenen Ports hinzugefügt. Wenn beispielsweise Port 25 für SMTP-Verbindungen und E-Mail-Übertragung verwendet wird, ist es sinnvoll, Verbindungen zu den in unserer Infrastruktur verfügbaren MTAs umzuleiten. Wenn sich die Verbindung auf Port 80 befindet, handelt es sich um eine http-Anforderung, die an Zimbra Proxy weitergeleitet werden muss.
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-proxy
Regel 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-proxy
Regel 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-proxy
Regel 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 check
Regel 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 check
Beachten Sie, dass sich in den Regeln zum Senden von TCP-Paketen an den MTA der Parameter
send-proxy neben deren Adressen befindet. Dies ist erforderlich, damit gemäß den zuvor an den Postfix-Einstellungen vorgenommenen Änderungen die ursprüngliche IP-Adresse des Absenders zusammen mit den TCP-Paketen gesendet wird.
Nachdem alle erforderlichen Änderungen an HAProxy vorgenommen wurden, können Sie den Dienst mit dem
Befehl service haproxy restart neu starten und verwenden.
Bei allen Fragen zur Zextras Suite können Sie sich per E-Mail an die Vertreterin von Zextras, Ekaterina Triandafilidi, wenden: katerina@zextras.com