15.06.2010 Интеграция почтового сервера CommuniGate Pro(GNU/Gentoo Linux) c доменом Microsoft Active Directory

[shadowbox=/images/newspost_images/gentoo-new.gif|::|1|]/images/newspost_images/gentoo-new.gif[/shadowbox]
+
[shadowbox=/images/newspost_images/cgplogo.gif|::|1|]/images/newspost_images/cgplogo.gif[/shadowbox]


0.250 Предисловие

Получил я всое распоряжение домен с 500+ пользователей, до этого момента использовался локальный сервер от MDaemon, который постоянно глючил, были проблемы с пересылкой вложений, итд, итп, да и просто виндовая программа Х_х. Решил я от этого гумна избавиться, тем более был уже установленный внешний почтовый сервак построенный на Communigate Pro + Gentoo. И т.к. мы(сисадмины) народ очень ленивый, встал вопрос о переносе почты и последующем использовании пользователей из домена на вновь установленном сервере.
0.500 Имею

  • Установленный и настроенный почтовый сервер CommuniGate Pro под управлением ОС GNU/Gentoo Linux.
  • Почтовый клиент MS Outlook 2003 или другой.
  • Учётные записи в домене Communigate Pro отличаются от учётных записей в домене AD и имеют другие пароли (названия доменов также отличаются).
  • Корректно работающий домен AD под управлением ОС Windows Server 2003 Standart Edition (Связка так же прекрасно работает на домене Windows 2008 R2 Enterprise).


0.750 Хочу

  • Синхронизация учётных записей пользователей в домене AD и в домене Communigate Pro (Пользователи автоматически создаются в домене Communigate Pro, если они существуют в домене AD, и автоматически удаляются, если они там отсутствуют).
  • Аутентификация пользователей Communigate Pro в домене AD.
  • Корректное отображение поля "Полное имя" учётной записи домена AD в поле RealName учётной записи CommunigatePro.
  • Подключение MS Outlook к Communigate Pro при помощи MAPI-коннектора.
  • Общие контакты.
  • Общие папки.


Теперь о том, что для всего этого нам потребуется:

  • MAPI-коннектор к MS Outlook версии 1.1.10 либо позднее. Качаем с сайта Stalker.[MAPI]
  • Скрипт LDAP аутентификации на Perl, который представляет собой немного модифицированный скрипт от Stalker. [Сам скрипт] [Оригинал от Stalker]
  • Следующие Perl модули для работы скрипта:

    Net::LDAP и его зависимости.

    CGP::CLI Это модуль для работы с Communigate Pro из командной строки. Важно использовать последнюю версию 2.6.6 или позднее, т.к. предыдущие имеют очень неприятный дефект - администратор почтовой системы не может авторизоваться с использованием CLI, если в настройках Communigate Pro отключен Advertise APOP method.[CLI.pm]

    Digest::MD5 Требуется для работы CGP::CLI.


Установка и настройка системы

1. Установка модулей Perl

# emerge -pv perl-ldap Digest-MD5

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N    ] dev-perl/XML-NamespaceSupport-1.11  51 kB
[ebuild  N    ] dev-perl/XML-Parser-2.36-r1  225 kB
[ebuild  N    ] dev-perl/Convert-ASN1-0.21  67 kB
[ebuild  N    ] dev-perl/Text-Iconv-1.7  11 kB
[ebuild  N    ] dev-perl/Net-SSLeay-1.36  143 kB
[ebuild  N    ] perl-core/MIME-Base64-3.08  17 kB
[ebuild  N    ] dev-perl/XML-SAX-0.16  59 kB
[ebuild  N    ] virtual/perl-MIME-Base64-3.08  0 kB
[ebuild  N    ] dev-perl/IO-Socket-SSL-1.33  USE="-idn" 66 kB
[ebuild  N    ] dev-perl/URI-1.38  95 kB
[ebuild  N    ] dev-perl/XML-Filter-BufferText-1.01  3 kB
[ebuild  N    ] perl-core/digest-base-1.16  9 kB
[ebuild  N    ] dev-perl/XML-SAX-Writer-0.50  13 kB
[ebuild  N    ] virtual/perl-digest-base-1.16  0 kB
[ebuild  N    ] dev-perl/perl-ldap-0.39  USE="ssl xml -sasl" 254 kB
[ebuild  N    ] perl-core/Digest-MD5-2.39  45 kB

Total: 16 packages (16 new), Size of downloads: 1,049 kB


Узнаём в какие каталоги можно установить CLI.pm.

# perl -V

Копируем CLI.pm в один (лучше сразу в несколько, так надежнее) из этих каталогов.

2. Настройка Communigate Pro

Копируем скрипт аутентификации в /var/CommuniGate/.

Заходим в Domain Settings, ищем группу Unknown Names и в ней выставляем Consult External Authenticator = Yes. Это позволит нам использовать внешний список пользователей, т.е. запрос на аутентификацию от неизвестной учётной записи будет перенаправляться внешнему аутентификатору.

Теперь заходим в Account Defaults для нашего домена и настраиваем следующую опцию: External Authentication=Yes. Это позволит пользователям использовать внешнюю аутентификацию. Далее жмём на галку в левом верхнем углу. В поле Display and Data Input устанавливаем Charset=utf8-получаем корректное отображение имени пользователя, так как Windows Server 2003 использует ту же кодировку utf8.

Заходим в Settings=>Obscure и снимаем все галки. Пароли будут передаваться в открытом виде (шифрованные пароли не будут корректно распознаны LDAP сервером, так как LDAP использует plain text пароли).

Подключаем внешний аутентификатор для всего сервера. Это делается на вкладке Settings=>General=>Helpers. Указываем путь до модуля аутентификации. В нашем случае это /var/CommuniGate/w2k3domain.pl. Запускаем.

3. Механизм работы

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

Вы создаёте учётную запись в домене AD, например, ad_account. При попытке принять или отправить почту с этой учётной записи( логин вида ad_account@cgp_domian.ru) после поиска в LDAP каталоге и успешной аутентификации будет создана учётная запись ad_account в домене cgp_domain.ru. В поле RealName в Communigate Pro передаётся поле "Полное имя", которое можно увидеть при переименовании пользователя. По умолчанию оно совпадает с полем "Выводимое имя".

4. Настройка скрипта w2kdomain.pl

 my $LDAPServerAddress =  '192.168.0.1';   # Адрес вашего контроллера домена
 my $LDAPAdminDN = 'CN=admin,CN=Users,DC=ad_domain,DC=local'; # Учётная запись администратора домена, 
 полезно запустить на контроллере домена Adsiedit.msc
 
 my $LDAPAdminPassword = 'admin_pass'; # пароль администратора домена
 my $LDAPSearchBase = 'DC=ad_domain,DC=local'; # поиск пользователей ведётся по всему дереву каталога
 my $CGServerAddress =  '127.0.0.1';   # Адрес сервера Communigate Pro
 my $CLILogin = 'postmaster@mail.cgp_domain.ru';  # аккаунт постмастера на Communigate Pro
 my $CLIPassword = 'postmaster_pass'; # пароль постмастера


5. Устанавливаем MAPI-коннектор

Для установки MAPI-коннектора на большое количество рабочих станций удобно воспользоваться групповыми политиками домена AD. Есть два варианта установки: для пользователя и для компьютера. Настройки обоих вариантов отличаются незначительно. В качестве примера рассмотрим установку для компьютера. Создаём в домене AD новое подразделение под названием, к примеру, Workstations. Перетаскиваем в него все компьютеры, на которых должен быть установлен MAPI-коннектор. В свойствах подразделения ищем вкладку Групповая политика. Создаём новый объект групповой политики. Далее изменяем его. Идём в Конфигурация компьютера=>Конфигурация Windows=> Сценарии(запуск/завершение)=>Автозагрузка. Далее Свойства=>Показать файлы. Перетаскиваем в открывшуюся папку файлы setup.exe cgmxp32.ini cgmxui32.inf. Копируем полный путь к файлу setup.exe и вставляем его в сценарий автозагрузки. В параметрах сценария указываем ключи /i /q /Q (установить/обновить MAPI-коннектор, не спрашивать о конфигурировании профиля, не выводить сообщения об ошибках). Сообщение об ошибке может появиться в случае установки на компьютер, на котором не установлен MS Outlook. После перезагрузки на рабочих станциях будет установлен MAPI-коннектор. Очень удобен данный метод для обновления MAPI-коннектора по мере выхода новых версий.

6. Настраиваем MS Outlook 2003

Устанавливаем MAPI-коннектор. На вопрос о конфигурировании почтового профиля отвечаем отрицательно. Запускаем MS Outlook. Создаём новую учётную запись. При выборе типа сервера нужно указать Дополнительные типы серверов. Там должен появиться Communigate Pro. В свойствах коннектора указываем учётную запись вида ad_account@cgp_domain.ru и пароль из домена AD. Снимаем галку Использовать безопасную проверку пароля.

На самом деле согласно документации на Communigate Pro можно использовать два пароля для входа-один из Communigate Pro, другой-полученный от внешнего аутентификатора. Они будут проверяться по очереди.

7. Использование общих контактов и папок

Для того, чтобы использовать общие контакты и общие папки, создадим в Communigate Pro специальную учётную запись, например, public. Подключимся к ней через через MS Outlook и перетащим в папку Контакты заранее подготовленные контакты, а также назначим права пользователей на эту папку, к примеру anyone на чтение. Далее создадим подписку всех новых пользователей на эту папку. Для этого идём в Domains=>cgp_domain.ru=>Accounts=>Template и ищем группу Initial Mailbox Aliases. Вносим в поле Alias Name = Контакты, в поле Foreign Mailbox Name = ~public/Контакты.После этого у каждого нового пользователя автоматически будут появляться контакты при подключении с помощью MAPI-коннектора.

Тоже самое можно проделывать с любыми папками. К примеру, удобно складывать почту с таких почтовых ящиков как sales, info, support в соответствующую папку учётной записи public и подписывать на эти папки тех пользователей, кому они нужны, плюс будут полезны права доступа на эти папки. Более подробно об этом можно узнать в документации к Communigate Pro.

Есть ещё один вариант коллективной работы, который кажется мне болле приемлемым с точки зрения масштабируемости и удобства работы. Это не просто подписка на папки в аккаунте public, а подключение этого аккаунта как дополнительного почтового ящика, который будет виден в MS Outlook как отдельная учётная запись. Для автоматического подключения дополнительных почтовых ящиков и использования ряда дополнительных настроек, которые помогут уменьшить количество действий со стороны пользователя при установке MAPI-коннектора, можно использовать специальный файл конфигурации cgmxui32.inf, который должен располагаться в том же каталоге что и setup.exe.

 ;Providers=CGATEMS,CGATEMSP,CGATEXP
 Providers=CGATEMS,CGATEXP


Если раскомментировать первую и закомментировать вторую строки, то при установке MAPI-коннектора аккаунт с именем public автоматически будет добавлен. Информацию об остальных полезных настройках можно почерпнуть из комментариев в этом файле (в частности, можно подключать несколько дополнительных аккаунтов, прописывать имя почтового сервера и прочее). Аналогично предыдущему случаю в аккаунте создаются необходимые общие папки. Доступ пользователей в этом случае будет регулироваться только правами доступа к папкам, тем самым отпадает необходимость в подписке.

Заключение:
Остаётся написать скрипт на Perl, который будет автоматически удалять пользователей из Communigate Pro, если не обнаружит таковых в домене AD, и запускать его допустим раз в день.Также придётся привести в соответствие старые учётные записи Communigate Pro и домена AD. Пример моего скрипта ADsync Communigate PRO. Поддерживатеся уведомление администратора по почте об удалённых аккаунтах и специальные учётные записи, которые не требуется удалять если их нет в AD.




Вас также может заинтересовать:

15.06.2010 Использование CommuniGate Pro как почтового сервера периметра для MS Exchange на GNU/Gentoo Linux
Релиз Samba 4.0, первой свободной реализации контроллера домена с поддержкой Active Directory
Релиз почтового сервера Postfix 2.8.0
Релиз почтового сервера Exim 4.73 с устранением уязвимостей
Релиз почтового сервера Exim 4.74 с устранением уязвимости
После года разработки представлен релиз новой стабильной ветки почтового сервера Postfix - 2.9.0