LDAP в почтовом сервере Carbonio является одним из ключевых элементов. LDAP представляет из себя структурированное хранилище настроек учетных записей, доменов, Классов обслуживания, а также серверов, входящих в состав инфраструктуры Carbonio. В Carbonio допускается использование и внешних серверов LDAP, в том числе Active Directory. В данной статье мы расскажем о том, что именно и как именно хранится в Carbonio LDAP и как администратор может взаимодействовать с ним.

Одна из главных функций Carbonio LDAP - аутентификация пользователей при использовании внутреннего механизма аутентификации. Именно в LDAP хранятся хеши паролей пользователей, которые сверяются при попытке входа. В случае использования для аутентификации внешних серверов LDAP, таких как Active Directory и другие, Carbonio LDAP передает им хеш пароля и на основании полученного ответа, осуществляет вход пользователя в учетную запись или отказывает ему.

Данная статья подходит как для пользователей коммерческой версии Carbonio, так и для пользователей Carbonio Community Edition.

Функции и устройство LDAP

При аутентификации учитывается статус пользователя. К примеру, если администратор заблокировал учетную запись или приостановил ее действие, вход не удастся, даже если пароль был введен верно. Данные о статусе учетной записи также хранятся в LDAP.

Данные, хранимые в LDAP представляют из себя дерево вложенных друг в друга каталогов. Благодаря такому устройству, каждый хранимый объект в LDAP может быть найден при помощи конкретного поискового запроса и, соответственно, загружены его параметры. Наглядно просмотреть структуру Carbonio LDAP можно в любом LDAP-браузере.

Получить данные из Carbonio LDAP можно и при помощи утилиты ldapsearch. Для этого нужно указать поисковый запрос, указывающий на пользователя, от которого будет осуществляться вход, а также указать его пароль. Пример:

ldapsearch -x -h email.carbonio.loc -D uid=zextras,ou=People,dc=carbonio,dc=loc -w P@$$w0rD

В данной команде мы определили нашего пользователя как имеющего имя zextras, лежащего в категории People домена carbonio.loc. Результатом этого запроса будет получение папок из LDAP, доступных данному пользователю.

Редактирование LDAP

Данные в Carbonio LDAP хранятся на нескольких уровнях. Среди них:

  • Глобальная конфигурация

  • Пользователь

  • Сервер

  • Домен

  • Класс обслуживания

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

В графической Консоли администратора на данный момент на глобальном уровне можно настроить только внешнее оформление веб-клиента Carbonio, включая логотип, фоновую картинку и Favicon.

Командная строка в настоящее время предоставляет больше возможностей для администратора. Используйте команды carbonio prov getConfig для получения текущего значения настройки и carbonio prov modifyConfig для ее изменения. Для получения списка всех глобальных настроек используйте carbonio prov getAllConfig

В настройках домена можно настроить множество вещей, связанных с механизмами аутентификации, формированием глобальной адресной книги и прочим. К примеру, допускается использование разных LDAP в разных почтовых доменах, находящихся в одной почтовой системе, чтобы одни пользователи аутентифицировались при помощи Carbonio LDAP, а другие при помощи Active Directory.

Графическая консоль администратора Carbonio позволяет настроить для домена SMTP-релей, публично доступное доменное имя, глобальную адресную книгу, графическое оформление веб-клиента, квоты, параметры аутентификации, включая SAML, и многое другое.

Для того, чтобы настроить домен в командной строке, используйте команды carbonio prov getDomain carbonio.loc для получения текущих настроек домена и carbonio prov modifyDomain carbonio.loc для их изменения. Для получения списка всех доменов используйте carbonio prov getAllDomains.

Для настройки пользователей в Консоли администратора сперва нужно выбрать домен, а затем в соответствующем списке требуемую учетную запись. Помимо учетных записей в домене также могут быть списки рассылки, ресурсные учетные записи и алиасы. Их, как и пользователей, можно создавать, удалять и редактировать в графической консоли после выбора соответствующего домена.

Для того, чтобы настроить пользователя в командной строке, используйте команды carbonio prov getAccount zextras@carbonio.loc для получения текущих настроек учетной записи пользователя и carbonio prov modifyAccount zextras@carbonio.loc для их изменения. Для получения списка всех учетных записей на сервере используйте carbonio prov -l getAllAccounts. При использовании параметров getAccount и modifyAccount данные загружаются и записываются в Carbonio LDAP в соответствующую папку. 

Если глобальные настройки содержат параметры по умолчанию для создаваемых в Carbonio доменов, то Классы обслуживания содержат параметры по умолчанию для создаваемых пользователей. В отличие от глобальных настроек, которые могут быть только одни, в рамках одной почтовой системы допускается создание множества Классов Обслуживания с различными настройками. Благодаря этому, создавая пользователя и присваивая ему Класс Обслуживания, администратор может буквально в один клик определить, какие именно функции почтовой системы будут доступны новому пользователю.

Создавать и удалять Классы обслуживания можно на специальной вкладке в Консоли администратора. Для редактирования их возможностей, следует выбрать нужный класс обслуживания и перейти на соответствующие разделы.

В командной строке для редактирования Классов обслуживания используется carbonio prov getCos default для получения текущих настроек Класса обслуживания и carbonio prov modifyCos default для их изменения.

Управлять параметрами серверов можно в командной строке при помощи команд carbonio prov getServer email.carbonio.loc для получения текущих настроек сервера и carbonio prov modifyServer email.carbonio.loc для их изменения.

При использовании команды вида carbonio prov чтение и запись параметров в Carbonio LDAP идет через API. Администратор может записывать в LDAP напрямую используя параметр -l. Для безопасности рекомендуется записывать данные только через API, так как любая опечатка может привести к появлению параметров с некорректными значениями, а вместе с этим и к возникновению самых непредсказуемых ошибок в работе почтовой системы.

LDAP также участвует в формировании Глобальной адресной книги и предложений для автозаполнения. И то, и другое формируется на основе поисковых запросов к Carbonio LDAP. По умолчанию GAL формируется на основе пользователей одного домена. Для того, чтобы в него попадали все пользователи почтовой системы, установите значение параметра zimbraGalInternalSearchBase для домена на ROOT

carbonio prov modifyDomain carbonio.loc zimbraGalInternalSearchBase ROOT

Репликация LDAP

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

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

Для того, чтобы создать пассивную реплику, включите на основном узле LDAP репликацию при помощи команды /opt/zextras/libexec/zmldapenablereplica и получите пароль от LDAP, выполнив команду zmlocalconfig -s zimbra_ldap_password.

На дополнительном узле LDAP установите необходимые компоненты apt install carbonio-directory-server service-discover-agent и запустите процесс первоначальной настройки carbonio-bootstrap.

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

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

zmlocalconfig -e ldap_url="ldap://MASTER_hostname ldap://REPLICA_hostname"

zmlocalconfig -e ldap_url="ldap://REPLICA_hostname ldap://MASTER_hostname"

В них указаны адреса LDAP Master и LDAP Replica в разном порядке. Именно порядок серверов определяет то, к какому из них сервер будет обращаться в первую очередь. 

Выполнять эти команды надо на всех серверах, предварительно остановив службы Carbonio. Выполните на части узлов почтовой системы первую команду, а на оставшихся - вторую. Это позволит одновременно сбалансировать нагрузку на них и добиться отказоустойчивости. Кстати, после изменения настроек LDAP на сервере MTA необходимо выполнить команду /opt/zextras/libexec/zmmtainit для их корректного сохранения.