Итак, по условиям задачи нам дана инфраструктура Zimbra OSE, в которой имеются два Zimbra Proxy, два сервера LDAP и LDAP Replica, четыре почтовых хранилища с 1000 почтовых ящиков на каждом и три MTA. Учитывая то, что мы имеем дело с почтовым сервером, на него будет поступать три вида трафика, нуждающегося в балансировке: HTTP для загрузки веб-клиента, а также POP и SMTP для пересылки электронной почты. При этом HTTP-трафик будет уходить на серверы Zimbra Proxy с ip-адресами 192.168.0.57 и 192.168.0.58, а трафик SMTP будет уходить на MTA-серверы с ip-адресами 192.168.0.77 и 192.168.0.78.
Как уже говорилось, для обеспечения равномерного распределения запросов между серверами мы будем использовать балансировщик нагрузки HAProxy, который будет работать на входном узле инфраструктуры Zimbra под управлением Ubuntu 18.04. Установка haproxy в этой операционной системе осуществляется при помощи команды sudo apt-get install haproxy. После этого необходимо в файле /etc/default/haproxy изменить параметр ENABLED=0 на ENABLED=1. Теперь, для того, чтобы убедиться в том, что haproxy работает, достаточно ввести команду service haproxy. В том случае, если эта служба работает, это будет понятно по выводу команды.
Одним из главных недочетов HAProxy является то, что он по умолчанию не передает IP-адрес подключаемого клиента, подменяя его своим собственным. Это может привести к ситуациям, когда присылаемые злоумышленниками письма нельзя будет идентифицировать по IP-адресу, чтобы добавить его в черный список. Впрочем, этот вопрос можно решить. Для этого необходимо отредактировать файл /opt/zimbra/common/conf/master.cf.in на серверах с Postfix и добавить в него следующие строки:
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
За счет этого мы откроем порты 26, 466 и 588, которые будут принимать входящий трафик из HAProxy. После того как файлы будут сохранены, следует перезапустить Postfix на всех серверах с помощью команды zmmtactl restart.
После этого приступим к настройке HAProxy. Для этого сперва создадим резервную копию файла с настройками cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. Затем откроем в текстовом редакторе исходный файл /etc/haproxy/haproxy.cfg и начнем поэтапно добавлять в него необходимые настройки. Первым блоком станет добавление сервера, снимающего логи, установка максимально разрешенного числа одновременных подключений, а также указание имени и группы пользователя, к которому будет относиться исполняемый процесс.
global user daemon group daemon daemon log 127.0.0.1 daemon maxconn 5000 chroot /var/lib/haproxy
Цифра в 5000 одновременных подключений появилась неспроста. Поскольку в нашей инфраструктуре 4000 почтовых ящиков, необходимо предусмотреть вероятность того, что все они одновременно зайдут в свою рабочую почту. Кроме того, необходимо оставить небольшой запас на тот случай, если их число увеличится.
Теперь добавим блок с настройками по умолчанию:
defaults timeout client 1m log global mode tcp timeout server 1m timeout connect 5s
В этом блоке задается максимальное время ожидания клиента и сервера, чтобы разрывать соединение при его истечении, а также задается режим работы HAProxy. В нашем случае балансировщик нагрузки работает в режиме TCP, то есть просто передает пакеты TCP не анализируя их содержимое.
Далее мы добавим правила для соединений на различных портах. Например, если порт 25 используется для SMTP-подключений и передачи почты, то имеет смысл перенаправлять подключения к нему на MTA, имеющиеся в нашей инфраструктуре. Если же соединение идет на порту 80, то это http-запрос, который необходимо переправить на Zimbra Proxy.
Правило для порта 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
Правило для порта 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
Правило для порта 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
Правило для порта 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
Правило для порта 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
Обратите внимание, что что в правилах для пересылки TCP-пакетов к MTA рядом с их адресами стоит параметр send-proxy. Это нужно для того, чтобы, в соответствии с внесенными нами ранее изменений в настройки Postfix, вместе с TCP-пакетами пересылался и оригинальный IP-адрес его отправителя.
Теперь, когда все необходимые изменения в HAProxy внесены, можно перезапустить сервис при помощи команды service haproxy restart и приступать к его использованию.
По всем вопросам, связанными c Zextras Suite вы можете обратиться к Представителю компании «Zextras» Екатерине Триандафилиди по электронной почте katerina@zextras.com
ссылка на оригинал статьи https://habr.com/ru/company/zimbra/blog/479536/

Добавить комментарий