8

Установка Zimbra OSE Multi-Server

Zimbra — средство для организации совместной работы. Имеет в себе общую почту, задачи и календари. Работает на OpenSource решениях и взаимодействует по открытым стандартным протоколам. Систему можно развернуть на одном сервере, но моей задачей стоит развернуть Zimbra на несколько серверов, каждый из которых играет свою роль. Кроме того, это позволит лучше понять общие принципы работы системы.

Описание

Zimbra можно разделить на несколько частей, а именно:

  • LDAP сервер — хранит информацию обо всей системе в целом.
  • SMTP — тут все понятно. В качестве SMTP выступает postfix.
  • PROXY — обратный прокси, который обрабатывает http/https, imap/imaps, pop3/pop3s запросы и перенаправляет их к backend.
  • Mailbox — здесь расположен веб интерфейс для пользователей, непосредственно сообщения пользователей.

Сразу обозначу, что команды вида # command выполняются от root, а $ command от пользователя zimbra. Это, конечно, не обязательное условие — можно все делать от root, но я решил разграничить, чтобы потом не разбираться с правами на файлы.

Подготовка

При установке Zimbra пытается проверить A и MX записи в DNS, поэтому стоит об этом позаботиться заранее.

Кроме этого, перед началом установки Zimbra устанавливаю необходимые пакеты:
# yum install perl nc unzip sysstat

В /etc/hosts прописываю хост, в противном случае Zimbra при установке сообщит об этом.

Установка

Получить ссылку на Zimbra Collaboration Server Open Source Edition можно по адресу: Zimbra OSE

Внутри архива находится install.sh. Именно его и запускаю для установки.

LDAP и SMTP

В моем случае я решил объеденить функционал LDAP и SMTP на одном сервере. Не могу сказать на сколько это удачное/неудачное решение, но думаю, что производительность SMTP не сильно будет проседать из-за наличия рядом OpenLdap.

При установке выбираю только ldap и mta:

Installing:
    zimbra-core
    zimbra-ldap
    zimbra-mta
    zimbra-dnscache

Устанавливаю домен, для которого выполняю установку (например, zimbra.local):

DNS ERROR resolving MX for smtp.zimbra.local
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes] Yes

Получаю меню конфигурации:

Main menu

    1) Common Configuration:
    2) zimbra-ldap:                             Enabled
    3) zimbra-mta:                              Enabled
******* +MTA Auth host:                        UNSET
        +Enable Spamassassin:                  yes
        +Enable Clam AV:                       yes
        +Enable OpenDKIM:                      yes
        +Notification address for AV alerts:   *protected email*
        +Bind password for postfix ldap user:  set
        +Bind password for amavis ldap user:   set

    4) zimbra-dnscache:                         Enabled
    s) Save config to file
    x) Expand menu
    q) Quit

Прохожу по всем пунктам, изучаю. Обязательно запоминаю пароль для ldap.
Затем указываю в MTA Auth host: proxy.zimbra.local.

Указываю пока не установленный хост. После завершения настроек применяю их и подтверждаю изменения системы.

В процессе установки получаю следующее предупреждение:

WARNING

You are configuring this host as an MTA server, but the specified mailstore
used for authentication has not been configured to run the mailbox service yet.
This will cause smtp authentication to fail.

To correct this - after installing a mailstore server,
reset the zimbraMtaAuthHost attribute for this server:
/opt/zimbra/bin/zmprov -r -m -l ms smtp.zimbra.local zimbraMtaAuthHost proxy.zimbra.local

Once done, start the MTA:
zmmtactl start

Zimbra Proxy

При установке выбираю только proxy и memcache:

Installing:
    zimbra-core
    zimbra-memcached
    zimbra-proxy

Получаю меню конфигурации, где устанавливаю Ldap master host и Ldap Admin password:

Main menu

    1) Common Configuration:
        +Hostname:                             proxy.zimbra.local
******* +Ldap master host:                     UNSET
        +Ldap port:                            389
******* +Ldap Admin password:                  UNSET
        +LDAP Base DN:                         cn=zimbra
        +Secure interprocess communications:   yes
        +TimeZone:                             Europe/Moscow
        +IP Mode:                              ipv4
        +Default SSL digest:                   sha256

    2) zimbra-proxy:                            Enabled
    s) Save config to file
    x) Expand menu
    q) Quit

Установливаю пароль для ldap nginx пользователя и заодно отключаю POP/IMAP Proxy, устанавливаю порты http и https, на которых будут висеть backend:

2) zimbra-proxy:                            Enabled
        +Enable POP/IMAP Proxy:                FALSE
******* +Bind password for nginx ldap user:    Not Verified
        +Enable HTTP[S] Proxy:                 TRUE
        +Web server HTTP port:                 8080
        +Web server HTTPS port:                8443
        +HTTP proxy port:                      80
        +HTTPS proxy port:                     443
        +Proxy server mode:                    https

В процессе установки получаю следующее предупреждение:
WARNING

You are configuring this host as a proxy server, but there is currently no
mailstore to proxy.  This will cause proxy startup to fail.
Once you have installed a store server, start the proxy service:
zmproxyctl start

Zimbra Mailbox(es)

При установке выбираю только store,logger,spell:

Installing:
    zimbra-core
    zimbra-logger
    zimbra-store
    zimbra-apache
    zimbra-spell

Меню в котором, что нужно будет настроить:
Main menu

    1) Common Configuration:
        +Hostname:                             mailbox1.zimbra.local
******* +Ldap master host:                     UNSET
        +Ldap port:                            389
******* +Ldap Admin password:                  UNSET
        +LDAP Base DN:                         cn=zimbra
        +Secure interprocess communications:   yes
        +TimeZone:                             Europe/Moscow
        +IP Mode:                              ipv4
        +Default SSL digest:                   sha256

    2) zimbra-logger:                           Enabled
    3) zimbra-store:                            Enabled
        +Create Admin User:                    yes
        +Admin user to create:                 *protected email*
******* +Admin Password                        UNSET
        +Anti-virus quarantine user:           *protected email*
        +Enable automated spam training:       yes
        +Spam training user:                   *protected email*
        +Non-spam(Ham) training user:          *protected email*
******* +SMTP host:                            UNSET
        +Web server HTTP port:                 8080
        +Web server HTTPS port:                8443
        +Web server mode:                      https
        +IMAP server port:                     143
        +IMAP server SSL port:                 993
        +POP server port:                      110
        +POP server SSL port:                  995
        +Use spell check server:               yes
        +Spell server URL:                     http://mailbox1.zimbra.local:7780/aspell.php
        +Configure for use with mail proxy:    FALSE
        +Configure for use with web proxy:     TRUE
        +Enable version update checks:         TRUE
        +Enable version update notifications:  TRUE
        +Version update notification email:    *protected email*
        +Version update source email:          *protected email*
        +Install mailstore (service webapp):   yes
        +Install UI (zimbra,zimbraAdmin webapps): yes

    4) zimbra-spell:                            Enabled
    5) Default Class of Service Configuration:
    s) Save config to file
    x) Expand menu
    q) Quit

Обращаю внимание на то, что я указывал при установке zimbra-proxy:
Web server HTTP port: 8080
Web server HTTPS port: 8443
Configure for use with web proxy: TRUE

Для остальных zimbra-mailbox процедуру повторить сразу или по мере необходимости. Данное решение не дает high available, но позволяет распределить

Запуск Zimbra Proxy

Вспоминаю о предупреждениях, которые выдавала zimbra-proxy.

Генерирую кофигурационные файлы:
$ zmproxyconfgen

Затем перезапускаю сервис Zimbra Proxy:
$ zmproxyctl restart

Post Installation

Установка ключей SSH

На каждом сервере
$ zmupdateauthkeys

Будут обновлены ключи в /opt/zimbra/.ssh/

Настройка syslog

На каждом узле:
# /opt/zimbra/libexec/zmsyslogsetup

На узлах, где установлен zimbra-logger исправить /etc/rsyslog.conf:

# Provides UDP syslog reception
- #$ModLoad imudp
- #$UDPServerRun 514
+ $ModLoad imudp
+ $UDPServerRun 514

# Provides TCP syslog reception
- #$ModLoad imtcp
- #$InputTCPServerRun 514
+ $ModLoad imtcp
+ $InputTCPServerRun 514

# service rsyslog restart

Затем перезапускаю каждый узел (для уверенности):
$ zmcontrol restart

Обращаю внимание, что данный пример подходит для CentOs

Все эти манипуляции необходимы для того, что бы в административной панели корректно отображались статусы все серверов системы.

После этого можно заходить в административную панель, которая расположена по адресу https://:7071 под пользователем *protected email* (пароль задавался при настройке mailbox) и продолжать настройку Zimbra.

Alexey Egorychev

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.

  • sea

    zimbra-proxy — не только reverse http proxy, то также imap(s), pop3(s) прокси, для проксирование запросов клиентов к бэкенду.

    • Вы абсолютно правы. В статье поправлю.
      В зависимости от настройки zimbra-proxy умеет проксировать все вышеперечисленное.

  • Sem D

    Возможен ли вариант вынести mysql на отдельный сервер ????

    • Здравствуйте!

      Задавался таким же вопросом, но решения не нашел.
      А в чем необходимость выноса mysql отдельно от mailboxd ?

    • sea

      конечно возможен, только зачем. А вот выделить на отдельные файловые системы директорию с бинарниками и логами зимбры (1), директорию с базами MariaDB (2), и директорию с мейл стораджем (3) — было бы наверняка очень полезно. Т.к. файлы MariaDB в таком случае можно было бы вынести на SSD хранилище например, либо как минимум тюнинговать опции монтирования файловой системы.

      • Подскажите, пожалуйста, где прописать параметры DB для каждого mailstore бекенда?
        Очень интересная возможность.

  • iceflame

    А HA для Mailbox как реализовать?