Внедрение Zimbra Collaboration Open Source, авторизация через AD и автоматическое создание почтовых ящиков

image

1. Исходные данные


ОС сервера: CentOS 7

По поводу ОС
На самом деле разница между CentOS7 и любой другой системой будет заключаться исключительно в командах серверу на установку зависимостей, и, возможно, расположении некоторых файлов. Работа ведется в основном с командлетами Zimbra, так что отличия настройки будет минимальны.

Windows домен: home.local
Адрес и имя почтового сервера: 10.40.0.80 / zimbramail.home.local
Пользователь для доступа к каталогу AD: ZimbraLDAP с паролем qwe123

2. Подводные камни


Сам процесс установки Zimbra довольно прост. Нужно установить зависимые пакеты, скачать архив, запустить скрипт и правильно ответить на вопросы установщика. Но, как и везде, есть свои маленькие сложности.

1) Zimbra чувствительна к hostname. Первое, что нужно сделать перед установкой – привести файл /etc/hosts к виду:

127.0.0.1	 localhost.localdomain	localhost
10.40.0.80	 zimbramail.home.local	zimbramail

2) Без доступа к internet чуда не произойдет. Если доступа в internet не будет, то скрипт будет подвисать на 20-40 минут, и в итоге, естественно, завершится с ошибкой. Казалось бы, зачем нужен почтовый сервер без доступа в интернет, но «чего только не бывает в подлунном мире».

3. Непосредственно установка


Итак, к делу!

1) Установка зависимостей:

$ yum install perl perl-core ntpl nmap sudo libidn gmp libaio libstdc++ unzip sysstat sqlite wget

2) Скачать архив:

$ wget https://files.zimbra.com/downloads/8.8.11_GA/zcs-8.8.11_GA_3737.RHEL7_64.20181207111719.tgz

3) Разархивировать скачанный архив, перейти в каталог и запустить установку:

$ tar –xzf zcs-8.8.11_GA_3737.RHEL7_64.20181207111719.tgz
$ cd zcs-8.8.11_GA_3737.RHEL7_64.20181207111719
$ ./install.sh --platform-override

4) Согласиться с лицензионным соглашением и использованием репозитория Zimbra:

Do you agree with the terms of the software license agreement? [N] Y
Use Zimbra's package repository [Y] Y

5) Выбрать необходимые компоненты и подтвердить изменение:

Выводимый текст
Select the packages to install
Install zimbra-ldap [Y] Y
Install zimbra-logger [Y] Y
Install zimbra-mta [Y] Y
Install zimbra-dnscache [Y] N
Install zimbra-snmp [Y] Y
Install zimbra-store [Y] Y
Install zimbra-apache [Y] Y
Install zimbra-spell [Y] Y
Install zimbra-memcached [Y] Y
Install zimbra-proxy [Y] N
The system will be modified.  Continue? [N] Y

6) Далее нужно ввести пароль администратора для Zimbra:

Выводимый текст
Main menu
   1) Common Configuration:                                                  
   2) zimbra-ldap:                             Enabled                       
   3) zimbra-logger:                           Enabled                       
   4) zimbra-mta:                              Enabled                       
   5) zimbra-snmp:                             Enabled                       
   6) zimbra-store:                            Enabled                       
        +Create Admin User:                    yes                           
        +Admin user to create:                 admin@zimbramail.home.local    
******* +Admin Password                        UNSET                         
        +Anti-virus quarantine user:           virus-quarantine.2hwbbw7msh@zimbramail.ciam.local 
        +Enable automated spam training:       yes                           
        +Spam training user:                   spam.jedk1fhggz@zimbramail.home.local 
        +Non-spam(Ham) training user:          ham.y4nb2o4bt@zimbramail.home.local 
        +SMTP host:                            zimbramail.home.local          
        +Web server HTTP port:                 8080                          
        +Web server HTTPS port:                8443                          
        +Web server mode:                      https                         
        +IMAP server port:                     7143                          
        +IMAP server SSL port:                 7993                          
        +POP server port:                      7110                          
        +POP server SSL port:                  7995                          
        +Use spell check server:               yes                           
        +Spell server URL:                     http:// zimbramail.home.local :7780/aspell.php
        +Enable version update checks:         TRUE                          
        +Enable version update notifications:  TRUE                          
        +Version update notification email:    admin@zimbramail.home.local    
        +Version update source email:          admin@zimbramail.home.local    
        +Install mailstore (service webapp):   yes                           
        +Install UI (zimbra,zimbraAdmin webapps): yes                           

   7) zimbra-spell:                            Enabled                       
   8) zimbra-proxy:                            Enabled                       
   9) Default Class of Service Configuration:                                
   s) Save config to file                                                    
   x) Expand menu                                                            
   q) Quit                                    

Address unconfigured (**) items  (? - help) 6
Select, or 'r' for previous menu [r] 4
Password for admin@example.com  (min 6 characters): [MFSPcRW18] qwe123


Остальное в этом меню нас особо не интересует. Но. По умолчанию Zimbra создаст свой внутренний домен по образу и подобию своего zmhostname (читай hostname), то есть это будет домен zimbramail.home.local. Меня такой вариант устраивает, если вас – нет, и имя домена должно строго соответствовать [home.local], то рекомендую сразу изменить адреса получения Version update notification и Version update source на admin@home.local

7) Тут нужно нажать кнопку [a], чтобы применить изменения, затем согласиться с сохранением конфигурации в файл и еще раз нажать [Enter], чтобы продолжить установку.

Система не зависла после слова “done”, она ждет нажатия клавиши.

Выводимый текст
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes]
Save config in file: [/opt/zimbra/config.10925]
Saving config in /opt/zimbra/config.10925...done.


Далее происходит работа скрипта установки, после окончании которой он предлагает нажать любую клавишу для продолжения

8) После завершения установки необходимо открыть нужные порты в фаэрволле. Список портов можно найти в Wiki разработчика по ссылке

9) Настоятельно так же рекомендую убедиться, что Zimbra поняла все правильно, и ее zmhostname совпадает с hostname сервера:

$ su – zimbra
$ zmhostname
  zimbramail.home.local

Если имя не совпадает, делаем следующее:

а) первым делом проверяем, есть ли в DNS записи A и MX для нашего нового zmhostname, если нет – создаем их

б)
$ su – zimbra
/opt/zimbra/libexec/zmsetservername -n [servername]

в) чистим zmloggerhostmap:

$ zmloggerhostmap

Эта команда выводит список всех Hostname Map.

Удалять командой:

$ zmloggerhostmap -d localhost localhost.localdomain

где localhost и localhost.localdomain нужно заменить на строку из списка Hostname Map
после чего перезапустить Zimbra

10) Запускаем сервер:

$ su – zimbra
$ zmcontrol start

Выводимый текст
 Host zimbramail.home.local 
    Starting zmconfigd...Done.
    Starting logger...Done.
    Starting mailbox...Done.
    Starting memcached...Done.
    Starting proxy...Done.
    Starting amavis...Done.
    Starting antispam...Done.
    Starting antivirus...Done.
    Starting opendkim...Done.
    Starting snmp...Done.
    Starting spell...Done.
    Starting mta...Done.
    Starting stats...Done.
    Starting service webapp...Done.
    Starting zimbra webapp...Done.
    Starting zimbraAdmin webapp...Done.
    Starting zimlet webapp...Done.

Теперь сервер доступен по адресу https://zimbramail.home.local:7071

image

11) Для возможности доступа к серверу как по https так и по http делаем следующее:

$ su – zimbra
$ zmtlsctl both
$ zmcontrol restart

12) Для тех, у кого нет доступа к интернет, или если сервер живет за NAT’ом, нужно будет еще прописать команду:

$ su – zimbra
$ zmprov ms mail.example.com zimbraMtaLmtpHostLookup native
$ zmcontrol restart

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

13) Проблема с самоподписанным сертификатом решается импортом сертификата с сервера Zimbra:

$ cd /opt/zimbra/ssl/zimbra/ca
$ openssl x509 -in ca.pem -outform DER -out ~/zimbra-mail-example.cer

с последующим экспортом его клиентским машинам или руками, или групповыми политиками домена, установив сертификат в «Доверенные корневые центры сертификации».
На этом установка и первичная настройка завершена.

4. Настройка авторизации через LDAP


Прежде всего нужно создать в AD пользователя для доступа к каталогу. У меня это ZimbraLDAP, после чего зайти в консоль администратора через web и настроить авторизацию в домене zimbramail.home.local.

1) Заходим в «настройка» – «домены», ПКМ по названию домена – «настроить проверку подлинности»:

image

2) Выбрать “Внешний Active Directory”, нажать далее:

image

3) В поле «Имя домена AD» вводим имя домена, в поле «ldap://» пишем имя домена или имя контроллера домена, или IP контроллера домена. У меня контроллеров несколько, поэтому я пишу имя домена. Порт оставляем без изменений. Жмем далее:

image

4) Привязка LDAP оставляем без изменений.

5) Сводка по конфигурации проверки подлинности. Имя пользователя ZimbraLDAP, пароль qwe123. Жмем кнопку «тест»:

image

Настройка внешней группы отвечает за то, где именно в AD Zimbra будет искать пользователей и какие фильтры будет применять. Можно применить фильтр:

(&(objectClass=user)(objectClass=person))

в этом случае будут отобраны только объекты AD «пользователи» и «персоны». А параметр External Group LDAP Search Base использоваться не будет, он будет заменен на «zimbraAutoProvLdapSearchBase» в ходе настройки EAGER-режима.

Теперь пользователи будут авторизовываться по своим паролям из AD. И даже при создании нового почтового ящика пароль задать будет нельзя.

5. Настройка автоматического создания почтовых ящиков


Немного теории:

Zimbra умеет в 3 варианта создания ящиков:

EAGER – полностью автоматический, который через определенные промежутки времени просматривает AD и создает ящики для новых пользователей.

LAZY – полуавтоматический, который создает почтовый ящик при первом входе пользователя на почтовый сервер под учетными данными домена.

MANUAL – ручной поиск и отбор учетных записей, для которых нужно создать почтовые ящики.

По понятным причинам режим MANUAL пригоден только для маленьких компаний с вялой текучкой кадров. LAZY-режим подходит для использования почты с web-интерфейсом, без подключения почтового клиента. Меня не устраивали оба варианта, так как стояла задача автоматизировать по-максимуму (автоматическая установка клиентского приложения Zimbra Desktop, чтобы пользователю нужно было просто ввести логин-пароль и получить доступ к почте). Поэтому только EAGER. Да он и удобнее, если честно.

Для удобства правки и применения параметров проще и удобнее создать файл. Пусть будет /tmp/prov

Наполнение файла следующее:

Содержимое файла
md zimbramail.home.local zimbraAutoProvAccountNameMap "samAccountName"
md zimbramail.home.local +zimbraAutoProvAttrMap description=description
md zimbramail.home.local +zimbraAutoProvAttrMap displayName=displayName
md zimbramail.home.local +zimbraAutoProvAttrMap givenName=givenName
md zimbramail.home.local +zimbraAutoProvAttrMap cn=cn
md zimbramail.home.local +zimbraAutoProvAttrMap sn=sn
md zimbramail.home.local zimbraAutoProvAuthMech LDAP
md zimbramail.home.local zimbraAutoProvBatchSize 300
md zimbramail.home.local zimbraAutoProvLdapAdminBindDn "CN=ZimbraLDAP,OU=HOME_Users,DC=home,DC=local"
md zimbramail.home.local zimbraAutoProvLdapAdminBindPassword qwe123
md zimbramail.home.local zimbraAutoProvLdapBindDn "admin@zimbramail.home.local"
md zimbramail.home.local zimbraAutoProvLdapSearchBase "CN=HOME_Users,dc=home,dc=local"
md zimbramail.home.local zimbraAutoProvLdapSearchFilter "(&(objectClass=user)(objectClass=person))"
md zimbramail.home.local zimbraAutoProvLdapURL "ldap://home.local:389"
md zimbramail.home.local zimbraAutoProvMode EAGER
md zimbramail.home.local zimbraAutoProvNotificationBody "Your account has been auto provisioned.  Your email address is ${ACCOUNT_ADDRESS}."
md zimbramail.home.local zimbraAutoProvNotificationFromAddress prov-admin@zimbramail.home.local
md zimbramail.home.local zimbraAutoProvNotificationSubject "New account auto provisioned"
ms zimbramail.home.local zimbraAutoProvPollingInterval "1m"
ms zimbramail.home.local +zimbraAutoProvScheduledDomains "zimbramail.home.local"


Еще немного теории:

В данном файле содержатся команды для присвоения переменных. Так, например, параметр zimbraAutoProvAttrMap cn=cn означает, что Zimbra будет формировать свои ящики таким образом, что «выводимое имя» (CN в AD) будет подставляться в поле «выводимое имя» в Zimbra.

Параметр zimbraAutoProvLdapAdminBindDn отвечает за учетную запись, которую будет использовать Zimbra для доступа к каталогу AD. В Данном случае «CN=ZimbraLDAP,OU=HOME_Users,DC=home,DC=local», что значит следующее: будет использоваться учетная запись с отображаемым именем ZimbraLDAP, хранящаяся в OU HOME_Users, который расположен в корне домена home.local

zimbraAutoProvLdapAdminBindPassword хранит пароль от учетной записи ZimbraLDAP

zimbraAutoProvLdapBindDn хранит в себе учетную запись администратора сервера Zimbra для домена zimbramail.home.local

zimbraAutoProvLdapSearchBase отвечает за OU, в котором Zimbra будет искать доменные учетные записи для создания почтовых ящиков. В моем случае это тот же контейнер, в котором лежит и пользователь ZimbraLDAP

zimbraAutoProvPollingInterval это период обращения к AD на предмет поиска появления новых учетных записей.

С остальными параметрами все и так понятно.

На сайте разработчика написано, что если вы используете версию Zimbra до 8.0.8, то для работы EAGER-режима нужно будет еще устанавливать параметр zimbraAutoProvLastPolledTimestamp в пустое значение «», иначе больше одного раза он не отработает.

Далее выполняем команду:

$ su – zimbra
$ zmprov < /tmp/prov

Для просмотра всех значений zmprov можно ввести команду:

$ su – zimbra
$ zmprov gd zimbramail.home.local

Править параметры можно с помощью той же утилиты zmprov, переписывая значения переменных (утилита — действие — домен — переменная — значние), может помочь для дебагинга:

$ su – zimbra
$ zmprov md zimbramail.home.local zimbraAutoProvBatchSize 200

На сайте разработчика есть небольшая табличка траблшутинга LDAP-ошибок. Логи автопровижна пишутся в /opt/zimbra/log/mailbox.log

Ссылка

И еще немного оговорюсь. Получил фидбэк от LevZ, настраивавшего сервер с нуля. Версия 8.8.12_GA_3794.RHEL7_64_20190329045002 RHEL7_64 FOSS edition, Patch 8.8.12_P1 proxy.

Дело вот в чем: после чистой установки параметр «zimbraAutoProvScheduledDomains» нужно проинициализировать — выполнить команду «ms zimbraAutoProvScheduledDomains» без знака "+". Если сразу писать "+zimbraAutoProvScheduledDomains", то он не записывается и процесс не стартует.

Спасибо человеку за информацию!

6. Установка клиентских приложений


Скачиваем с официального сайта msi-пакет свежей версии. Копируем его в расшаренную сетевую папку, доступную всем для чтения. Можно скопировать и в Netlogon, но пакет весит более 100 Мб, поэтому я решил использовать шару.

Zimbra Desktop использует java, а значит, надо скачать еще и её, и положить в ту же папку.
Далее по вкусу – KIX, GPO, руками. Я использую GPO.

В той же шаре создаем файл installZimbra.cmd следующего содержания:

\\SharedFolder\jrex64.exe INSTALL_SILENT=Enable
\\SharedFolder\ZimbraInstall.msi /q /norestart

Добавляем в раздел «конфигурации компьютера»-«конфигурация Windows»-«Сценарии (запуск\завершение)»-«Автозагрузка» сценарий установки, созданный ранее. Сценарий установит java и Zimbra Desktop в silent режиме и не будет требовать перезагрузуку. Далее — разгул фантазии администратору.

Но. Для того, чтобы Zimbra Desktop настроить на наш сервер – надо руками вбить параметры.

image

Поэтому для пользователей нужно создать некую памятку-инструкцию, в какие поля что нужно вбивать, и на какую кнопочку нажать, чтобы получить доступ к почте. В целом – не сложно.

Заключение


Таким образом мы весьма несложно и достаточно быстро внедрили совершенно бесплатную систему корпоративного взаимодействия на базе Zimbra Collaboration Suite, настроили ее взаимодействие с доменом, упростив создание почтовых ящиков и избавившись от проблем с кучей лишних учетных записей.

На мой взгляд Zimbra – достаточно мощный инструмент для корпоративного сегмента. Но по этому поводу статей было написано уже огромное множество, не буду распыляться.

P.S.:
В следующей статье речь пойдет о резервном копировании и восстановлении почтовых ящиков Zimbra OSE.
В третьей статье речь идет об автоматическом формировании и обновлении списков рассылки на основе групп пользователей AD в Zimbra OSE.
Поддержать автора
Поделиться публикацией

Комментарии 12

    0
    разве в OSE есть поддержка LDAP/AD?
    вот тут www.zimbra.com/email-server-software/product-edition-comparison утверждают обратное
      0
      Хм. Судя по табличке работать не должно, но, как ни странно, у меня ящики создаются и все отрабатывает. Может быть это «пасхалка» или баг\фича. Не могу знать.
        0
        да, ящики создаются, до полного счастья не хватает только поддержки создания списков рассылки на основе групп в AD.
          0
          На Zimbra Wiki есть пост на данную тему. Так как ничего сложного в этом нет, в статье упоминать не стал.
            0
            Не, там другая идеология, сами списки рассылки создаются ручками и пишутся фильтры ldap для включения пользователей.
            А вот автоматического создания групп на основе АД нет. Это позволило бы вывести рутинные операции по почте за пределы админки почтового сервера.
              0
                0
                Вообще, у Zimbra есть инструмент zmprov. У него есть ключи управления списками рассылки, gdl и cdl. С их помощью можно накидать скрипт, который будет, например смотреть в AD и с определенным периодом создавать\править список рассылки на основе состава групп безопасности. Надо это обмозговать.
                Сейчас со временем туго, так что если я и буду этим заниматься, то не скоро. Но если сделаю — набросаю статью тут, на Хабре, и скину ссылку.
                  0
                  Я сделяль! (с)
                  Статья тут.
                  Несколько костыльно, но работает.
            0
            вот тут тоже люди использовали OSE: wiki.univention.de/index.php/Cool_Solution_-_Setting_up_Zimbra_with_LDAP_authentication
            возможно, сведения на сайте устарели, и в платной версии есть какие-то дополнительные возможности, вроде SSO (как у Gitlab).
              0
              В этой статье они просто привязывают Zimbra к LDAP, что позволит лишь авторизовывать пользователей с учетными записями домена, но это лишь часть функционала, представленного выше, так как им придется ящики создавать вручную, а это очень неудобно.
            0
            Первый раз ставил Zimbra 8.6.0, взял образ Open Source Edition. При установке в конце задал пароль администратора с нехорошим символом апострофа (там где тильда), установщик пользователя не создал. Я расценил это как «забыли экранировать». Я прав?
            Позже из интерфейса я наверняка смогу поставить какой угодно пароль, но на этапе установки это возможно критично.
            При следующей установке кстати пароль задал пароль без экранируемых символов, ошибок не было.
              0
              Тут дело скорее всего в баше, ибо он интерпретирует вводимые символы. Я не могу с уверенностью сказать, что он в итоге передал в Zimbra. Скорее всего вообще ничего. И скорее всего вы правы насчет «забыли экранировать».

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое