Ubuntu → Интеграция почтового сервера iRedMail (Ubuntu/Debian) с Active Directory (Windows Server 2003/2008/2008R2 ) ( в одном пространстве имен!)
     Что-то я дано ничего путного не писал, на этот раз, я расскажу как интегрировать iRedMail и MS Windows Server с Active Directory на борту. Допустим, у вас есть небольшого или среднего размера компания, в ней уже есть контроллер домена (AD DC) и все функционирует как надо, но через некоторое время, появляется необходимость в настройке корпоративного почтового сервера. Необходимо подобрать будущую платформу для почтовой инфраструктуры, если руководствоваться соображениями разумного минимализма, то замену MS Exchange, можно найти в лице iRedMail, еще и бесплатной. Правда тут появляется один момент, что придется настраивать руками учетные записи пользователей в службе каталогов (Active Directory), а затем, создавать почтовые ящики на почтовом сервере и все это руками, в этой ситуации, обязательно возникнут сложности с пользователями и паролями (на вход в систему один пароль, на вход в почту другой), железобетонным, решением данной проблемы, будет интеграция этих систем между собой.
Для чего это нужно?!
Служба каталогов (Active Directory) представляет из себя централизованную базу хранения пользовательских данных и иных объектов, которая может обеспечить проверку подлинности пользователей. По сути, у нас уже есть база данных, с заполненной информацией о пользователях с сохраненными, в виде хешей, паролями и другими данными. Так почему ее не использовать?! Но переносить данные руками-совершенно не правильно, нам необходимо, этот процесс автоматизировать. Идея довольно проста, при попытке входа в почту, введенные данные пользователя будут пересылаться, для проверки подлинности, на контроллер домена, он, в свою очередь, проверив введенный пользователем пароль, разрешает вход или не разрешает- если пароль не верен, предположим, что введенный пароль верен, то пользователь получит доступ к своей почте.
У данной системы есть несомненный плюс, пользователю достаточно знать пароль, от собственной учетной записи, в Active Directory, в случае если он его забудет, то от вас, как от системного администратора, требуется его сбросить и пользователь снова может работать.
Как все это будет работать, я изобразил на схеме ниже:
Данное руководство рассчитано на работу контроллера домена и почтового сервера, в одном пространстве имен, в случае если ваши сервера имеют разные доменные имена, в настройке имеются существенные различия, для этого смотрите обновленный вариант статьи

Теперь, более подробно, о том, что я там изобразил.
У нас есть 2 сервера:
Сервер №1-Windows Server 2003/2008/2008R2 (с поднятыми ролями AD DC, DNS, NTP)
(данные службы присутствуют на любом контроллере домена!) с IP адресом 172.16.0.20 и ДНС именем DC1.example.org
Сервер №2-Linux (Ubuntu/Debian) сервер с установленной системой iRedMail (Postfix,OpenLDAP,RoundCube и прочее), который имеет IP адрес 172.16.0.100 и ДНС имя MAIL.example.org.
О том, как его поднять, я писал ранее в статье: Настройка почтового сервера iRedMail. Его необходимо только установить, никаких настроек делать, пока, не требуется.
Предполагается что оба сервера установлены и готовы к работе. Вся дальнейшая конфигурация представлена ИСКЛЮЧИТЕЛЬНО в тестовых целях, имена серверов, логины пользователей, IP адреса, пароли-необходимо заменить на свои, а пароли желательно вообще генерировать с помощью ПО, добавив им сложности!
Единственное ограничение — Dovecot воспринимает символ # как перенос, данный символ НЕЛЬЗЯ использовать в паролях!
В Ubuntu
В Debian
нам необходимо добавить имя сервера в hosts
Добавляем туда:
Сохраняем изменения и выходим
Пробуем пинговать dc1.example.org
Если пинги, проходят все отлично! Если нет, то проверяем правильность написания и IP адрес контроллера домена.
Маленький, полезный, но не обязательный момент
Настроим синхронизацию времени почтового сервера с контроллером домена, это нужно для корректного отображения даты и времени получения писем, с другой стороны ничего не мешает использовать поставщиков времени в интернете, но если мы хотим получить полноценную систему, то лучше сделать это.
Находим строку и вписываемым туда DNS адрес контроллера домена:
Перезагружаем почтовый сервер, вуаля, все работает, время синхронизировалось.
Переходим на наш Windows Server 2003/2008/2008R2
Нам необходимо создать пользователя с именем iredmail, логином iredmail и паролем: password^1 Никаких админских прав, мы ему не даем-это важно! Его мы создаем в самом корне контроллера домена.
Чтобы путь к учетной записи в LDAP каталоге был cn=iredmail,dc=example,dc=org
Также, нам необходимо создать подразделение (Organization Unit), в нашей индустрии, его еще называют ОУшка-с ударением на У. Назовем подразделение personal путь в LDAP каталоге, будет иметь вид: ou=personal,dc=example,dc=org
Внутри подразделения personal, создадим 3 учетные записи, пользователей домена с паролем password@1 с именами:
Федя Мегатронов с логином megatronov и адресом электронной почты megatronov@example.org
Кеша Фуфлометов с логином fuflometov и адресом электронной почты fuflometov@example.org
Светлана Кукуева с логином kukueva и адресом электронной почты kukueva@example.org
Пути в каталоге LDAP, будут иметь вид:
В этом подразделении, создадим группу распространения, allusers и электронной почтой allusers@example.org.
Вопрос на засыпку-какой путь в LDAP будет иметь данная группа?
В эту группу добавим трех наших пользователей.
Нам должно вывалить кучу всякой инфы из AD, в которой содержатся информация о группах, пользователях и т.п. Я не буду ее тут выкладывать т.к. там целая портянка, на пару страниц. Для желающих посмотреть какая инфа там содержится, вывод результата всегда можно перенаправить в текстовый файл и потом, в спокойной обстановке, посмотреть что и к чему там.
Меняем настройки транспорта для сообщений:
Изменим настройки транспорта:
Добавим в него следующее:
Экспортируем все это, в базу данных Postfix:
Внесу ясность в происходящее! Нам необходимо разрешить поиск пользователей, групп и отправителей в Active Directory.
Теперь, нам необходимо настроить Postfix, чтобы он опрашивал Active Directory (В пойске учетных данных пользователей)
Указываем пользователя, от имени которого, будет выполняться опрос Active Directory ( по умолчанию, анонимные запросы к AD запрещены, их можно разрешить через политики безопасности, но это, очень хреновая идея, в плане безопасности!)
Подключаться к AD мы будем от имени пользователя iredmail (cn=iredmail,dc=example,dc=org) с паролем password^1, мы будем искать пользователей, которые находятся в аУшке personal (ou=presonal,dc=example,dc=org)
Нам необходимо отредактировать содержимое следующих файлов (то что там находится удаляем и заменяем на приложенное снизу)
Разрешаем подключение к AD с целью поиска групп и их членов. (содержимое данного файла думаю понятно)
Активируем поиск логинов отправителей в AD:
Отредактируем main.cf
Там нам необходимо найти и удалить строку:
Проверка логина отправителя:
Должно выдать:
Проверим разрешение членства в группе:
Должно выдать:
Если нет вывода то возможно 2 причины:
1) Не правильные данные для подключения к AD
2) В указанную группу не добавлены пользователи.
Нам также необходимо перенастроить Dovecot для запросов в Active Directory, все что там написано сотрем и записываем свое:
Вставляем
Квота на размер почтового ящика.
По умолчанию, iRedMail позволяет задавать квоты на размер почтового ящика, но перейдя с OpenLDAP на работу с AD эта возможность теряется, но мы можем указать дисковую квоту для всех пользователей, одним махом.
Находим строку:
Это и есть размер почтового ящика для каждого пользователя- 1Гб.
Перезапускаем службы:
Алгоритм работы очень простой-создали учетку, лезем в почту. Все остальное, сделает сервер самостоятельно.
Почтовые ящики пользователей находятся в:
Эта информация вам пригодится, когда понадобится настроить резервное копирование почтовых ящиков пользователей!
Пробуем подключиться через telnet
Получаем:
Получаем:
Получаем:
Получаем:
нам выдаст:
Отлично, все работает.
Заходим через WEB интерфейс.
Пользователь: megatronov@example.org
Пароль:password@1
Пробуем подключиться под другими пользователям, с паролем, который мы указывали на сервере Windows- при создании учетных записей.
Нас должно пускать под всеми тремя!
Пробуем написать письмо, но тут нас ждет маленький сюрприз, авто заполнение получателя письма не работает, но мы напишем email ручками полностью и жмем отправить, заходи под пользователем которому мы отправили письмо, у него появилось новое письмо.
Приятным бонусом будет возможность входа по логину т.е. достаточно указать login пользователя, для примера:
login: megatronov
pass: password@1
Пользователь также получит доступ к почтовому ящику.
Но заполнять получателей руками это не есть гуд, прикрутим адресную книгу из Active Directory
Находим строку:
Приводим ее к виду:
Далее, нам необходимо найти раздел:
И привести его к виду, указанному ниже:
(Я специально ничего не удалал, а просто за комментировал строки, которые там были изначально и добавил свои, также слегка переделал порядок сортировки, теперь он идет по алфавиту)
Вставляем туда:
Сохраняем изменения, пробуем под пользователем зайти в адресную книгу, у нас там появиться пункт Global AD Address Book нажимаем на него и получаем список пользователей домена, которые имеют почтовые ящики.
Ну а теперь легкий тюнинг вида ящика. Слегка изменим порядок отображения колонок в почтовом ящике, лично мне нравится дефонтный порядок отображения колонок писем в Outlook, на мой взгляд, он удобный, по этому я решил привести отображение писем немного похожим на него.
Открываем файл:
находим строку:
Закоментриуем ее и сразу под ней добавим, готовую строку:
В данной статье, я указывал базу для поиска пользователей ou=personal,dc=example,dc=org, но ничего не запрещает вам опрашивать весь контроллер домена целиком расширив зону поиска до dc=example,dc=org, но есть одно НО! Время опроса получается очень большим, так Dovecot, при опросе всего LDAP каталога, пускает пользователя в почтовый ящик почти 1 минуту, это очень много, по этому я и сузил параметры поиска, так поиск учетных данных пользователя, происходит практически мгновенно. Обязательно попробуете это, в настройках указав адресной книге искать по всему LDAP dc=example,dc=org вы сразу увидите как долго идет поиск пользователей.
На этом все.
Обо всех найденных недостатках, ошибках и возможных улучшениях, а также, если просто возникли вопросы, прошу в комментарии.
Данная схема была протестирована на Windows Server 2008/2008R2 на Windows 2k3 все должно работать т.к. атрибуты учетных записей не изменились.
Статья была написана с использованием материалов:
iRedMail-WiKi Но видимо, она написана для совсем старой версии iRedMail.
А также форума, на сайте разработчиков. На котором написано как у них все здорово работает, но не написано как это сделать.
Для чего это нужно?!
Служба каталогов (Active Directory) представляет из себя централизованную базу хранения пользовательских данных и иных объектов, которая может обеспечить проверку подлинности пользователей. По сути, у нас уже есть база данных, с заполненной информацией о пользователях с сохраненными, в виде хешей, паролями и другими данными. Так почему ее не использовать?! Но переносить данные руками-совершенно не правильно, нам необходимо, этот процесс автоматизировать. Идея довольно проста, при попытке входа в почту, введенные данные пользователя будут пересылаться, для проверки подлинности, на контроллер домена, он, в свою очередь, проверив введенный пользователем пароль, разрешает вход или не разрешает- если пароль не верен, предположим, что введенный пароль верен, то пользователь получит доступ к своей почте.
У данной системы есть несомненный плюс, пользователю достаточно знать пароль, от собственной учетной записи, в Active Directory, в случае если он его забудет, то от вас, как от системного администратора, требуется его сбросить и пользователь снова может работать.
Как все это будет работать, я изобразил на схеме ниже:
Данное руководство рассчитано на работу контроллера домена и почтового сервера, в одном пространстве имен, в случае если ваши сервера имеют разные доменные имена, в настройке имеются существенные различия, для этого смотрите обновленный вариант статьи

Теперь, более подробно, о том, что я там изобразил.
У нас есть 2 сервера:
Сервер №1-Windows Server 2003/2008/2008R2 (с поднятыми ролями AD DC, DNS, NTP)
(данные службы присутствуют на любом контроллере домена!) с IP адресом 172.16.0.20 и ДНС именем DC1.example.org
Сервер №2-Linux (Ubuntu/Debian) сервер с установленной системой iRedMail (Postfix,OpenLDAP,RoundCube и прочее), который имеет IP адрес 172.16.0.100 и ДНС имя MAIL.example.org.
О том, как его поднять, я писал ранее в статье: Настройка почтового сервера iRedMail. Его необходимо только установить, никаких настроек делать, пока, не требуется.
Предполагается что оба сервера установлены и готовы к работе. Вся дальнейшая конфигурация представлена ИСКЛЮЧИТЕЛЬНО в тестовых целях, имена серверов, логины пользователей, IP адреса, пароли-необходимо заменить на свои, а пароли желательно вообще генерировать с помощью ПО, добавив им сложности!
Единственное ограничение — Dovecot воспринимает символ # как перенос, данный символ НЕЛЬЗЯ использовать в паролях!
Подготавливаем инфраструктуру к взаимодействию.
Поднимаем права до root:В Ubuntu
sudo su
В Debian
su
нам необходимо добавить имя сервера в hosts
nano /etc/hosts
Добавляем туда:
172.16.0.20 dc1.example.org
Сохраняем изменения и выходим
Пробуем пинговать dc1.example.org
Если пинги, проходят все отлично! Если нет, то проверяем правильность написания и IP адрес контроллера домена.
Маленький, полезный, но не обязательный момент
Настроим синхронизацию времени почтового сервера с контроллером домена, это нужно для корректного отображения даты и времени получения писем, с другой стороны ничего не мешает использовать поставщиков времени в интернете, но если мы хотим получить полноценную систему, то лучше сделать это.
nano /etc/default/ntpdate
Находим строку и вписываемым туда DNS адрес контроллера домена:
NTPSERVERS="dc1.example.org"
Перезагружаем почтовый сервер, вуаля, все работает, время синхронизировалось.
Переходим на наш Windows Server 2003/2008/2008R2
Нам необходимо создать пользователя с именем iredmail, логином iredmail и паролем: password^1 Никаких админских прав, мы ему не даем-это важно! Его мы создаем в самом корне контроллера домена.
Чтобы путь к учетной записи в LDAP каталоге был cn=iredmail,dc=example,dc=org
Также, нам необходимо создать подразделение (Organization Unit), в нашей индустрии, его еще называют ОУшка-с ударением на У. Назовем подразделение personal путь в LDAP каталоге, будет иметь вид: ou=personal,dc=example,dc=org
Внутри подразделения personal, создадим 3 учетные записи, пользователей домена с паролем password@1 с именами:
Федя Мегатронов с логином megatronov и адресом электронной почты megatronov@example.org
Кеша Фуфлометов с логином fuflometov и адресом электронной почты fuflometov@example.org
Светлана Кукуева с логином kukueva и адресом электронной почты kukueva@example.org
Пути в каталоге LDAP, будут иметь вид:
cn=Федя Мегатронов,ou=personal,dc=example,dc=org
cn=Кеша Фуфлометов,ou=personal,dc=example,dc=org
cn=Светлана Кукуева,ou=personal,dc=example,dc=org
В этом подразделении, создадим группу распространения, allusers и электронной почтой allusers@example.org.
Вопрос на засыпку-какой путь в LDAP будет иметь данная группа?
В эту группу добавим трех наших пользователей.
Настраиваем сервер Linux
Протестуем соединение с LDAP:ldapsearch -x -h dc1.example.org -p 389 -D 'CN=iredmail,DC=example,DC=org' -W
Enter password: Вводим пароль password^1
Нам должно вывалить кучу всякой инфы из AD, в которой содержатся информация о группах, пользователях и т.п. Я не буду ее тут выкладывать т.к. там целая портянка, на пару страниц. Для желающих посмотреть какая инфа там содержится, вывод результата всегда можно перенаправить в текстовый файл и потом, в спокойной обстановке, посмотреть что и к чему там.
Меняем настройки транспорта для сообщений:
postconf -e transport_maps='hash:/etc/postfix/transport'
Изменим настройки транспорта:
nano /etc/postfix/transport
Добавим в него следующее:
mail.example.org dovecot
Экспортируем все это, в базу данных Postfix:
postmap hash:/etc/postfix/transport
Внесу ясность в происходящее! Нам необходимо разрешить поиск пользователей, групп и отправителей в Active Directory.
Теперь, нам необходимо настроить Postfix, чтобы он опрашивал Active Directory (В пойске учетных данных пользователей)
Указываем пользователя, от имени которого, будет выполняться опрос Active Directory ( по умолчанию, анонимные запросы к AD запрещены, их можно разрешить через политики безопасности, но это, очень хреновая идея, в плане безопасности!)
Подключаться к AD мы будем от имени пользователя iredmail (cn=iredmail,dc=example,dc=org) с паролем password^1, мы будем искать пользователей, которые находятся в аУшке personal (ou=presonal,dc=example,dc=org)
Нам необходимо отредактировать содержимое следующих файлов (то что там находится удаляем и заменяем на приложенное снизу)
nano /etc/postfix/ldap/virtual_mailbox_maps.cf
server_host = dc1.example.org
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=iredmail,dc=example,dc=org
bind_pw = password^1
search_base = ou=personal,dc=example,dc=org
scope = sub
query_filter = (&(objectclass=person)(userPrincipalName=%s))
result_attribute = userPrincipalName
debuglevel = 0
Разрешаем подключение к AD с целью поиска групп и их членов. (содержимое данного файла думаю понятно)
nano /etc/postfix/ldap/virtual_group_maps.cf
server_host = dc1.example.org
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=iredmail,dc=example,dc=org
bind_pw = password^1
search_base = ou=personal,dc=example,dc=org
scope = sub
query_filter = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail
#result_attribute= userPrincipalName
debuglevel = 0
Активируем поиск логинов отправителей в AD:
nano /etc/postfix/ldap/sender_login_maps.cf
server_host = dc1.example.org
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=iredmail,dc=example,dc=org
bind_pw = password^1
search_base = ou=personal,dc=example,dc=org
scope = sub
query_filter = (&(userPrincipalName=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= userPrincipalName
debuglevel = 0
Отредактируем main.cf
nano /etc/postfix/main.cf
Там нам необходимо найти и удалить строку:
check_policy_service inet:127.0.0.1:7777
Тестируем подключение к Active Directory
Проверка логина отправителя:
postmap -q megatronov@example.org ldap:/etc/postfix/ldap/sender_login_maps.cf
Должно выдать:
megatronov@example.org
Проверим разрешение членства в группе:
postmap -q allusers@example.org ldap:/etc/postfix/ldap/virtual_group_maps.cf
Должно выдать:
kukueva@example.org,fuflometov@example.org,megatronov@example.org
Если нет вывода то возможно 2 причины:
1) Не правильные данные для подключения к AD
2) В указанную группу не добавлены пользователи.
Нам также необходимо перенастроить Dovecot для запросов в Active Directory, все что там написано сотрем и записываем свое:
nano /etc/dovecot/dovecot-ldap.conf
Вставляем
hosts = dc1.example.org:389
ldap_version = 3
auth_bind = yes
dn = iredmail
dnpass = password^1
base = ou=personal,dc=example,dc=org
scope = subtree
deref = never
user_filter = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_filter = (&(userPrincipalName=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs = userPassword=password
default_pass_scheme = CRYPT
user_attrs = =home=/var/vmail/vmail1/%Ld/%Ln/Maildir/,=mail=maildir:/var/vmail/vmail1/%Ld/%Ln/Maildir/
Квота на размер почтового ящика.
По умолчанию, iRedMail позволяет задавать квоты на размер почтового ящика, но перейдя с OpenLDAP на работу с AD эта возможность теряется, но мы можем указать дисковую квоту для всех пользователей, одним махом.
nano /etc/dovecot/dovecot.conf
Находим строку:
quota_rule = *:storage=1G
Это и есть размер почтового ящика для каждого пользователя- 1Гб.
Перезапускаем службы:
/etc/init.d/postfix restart
/etc/init.d/dovecot restart
Создание пользователей на почтовом сервере:
Создавать пользователей, на почтовом сервере больше не требуется, достаточно на контроллере домена создать учетную запись с заполненным полем электронной почты, при первом подключении пользователя, его папка будет создана автоматически!Алгоритм работы очень простой-создали учетку, лезем в почту. Все остальное, сделает сервер самостоятельно.
Почтовые ящики пользователей находятся в:
/var/vmail/vmail1/example.org/$userlogin
Эта информация вам пригодится, когда понадобится настроить резервное копирование почтовых ящиков пользователей!
Пробуем подключиться через telnet
telnet localhost 110
Получаем:
Trying 127.0.0.1…Пишем туда:
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user megatronov@example.org
Получаем:
+OKВводим пароль:
pass password@1
Получаем:
+OK Logged in.Проверим количество писем( у меня там лежит 2 письма):
list
Получаем:
+OK 2 messages:Отключимся от сервера:
1 1554
2 1554
.
quit
нам выдаст:
+OK Logging out.
Connection closed by foreign host.
Отлично, все работает.
Заходим через WEB интерфейс.
Пользователь: megatronov@example.org
Пароль:password@1
Пробуем подключиться под другими пользователям, с паролем, который мы указывали на сервере Windows- при создании учетных записей.
Нас должно пускать под всеми тремя!
Пробуем написать письмо, но тут нас ждет маленький сюрприз, авто заполнение получателя письма не работает, но мы напишем email ручками полностью и жмем отправить, заходи под пользователем которому мы отправили письмо, у него появилось новое письмо.
Приятным бонусом будет возможность входа по логину т.е. достаточно указать login пользователя, для примера:
login: megatronov
pass: password@1
Пользователь также получит доступ к почтовому ящику.
Но заполнять получателей руками это не есть гуд, прикрутим адресную книгу из Active Directory
Прикрутим адресную книгу:
nano /usr/share/apache2/roundcubemail/config/main.inc.php
Находим строку:
$rcmail_config['autocomplete_addressbooks']
Приводим ее к виду:
$rcmail_config['autocomplete_addressbooks'] = array("sql", "mail.example.org");
Далее, нам необходимо найти раздел:
// Global LDAP address book.
И привести его к виду, указанному ниже:
(Я специально ничего не удалал, а просто за комментировал строки, которые там были изначально и добавил свои, также слегка переделал порядок сортировки, теперь он идет по алфавиту)
Вставляем туда:
$rcmail_config['ldap_public']["mail.example.org"] = array(
'name' => 'Global AD Address Book',
'hosts' => array('dc1.example.org'),
'port' => 389,
'use_tls' => false,
// Search accounts in the same domain.
'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
'base_dn' => 'ou=personal,dc=example,dc=org',
'bind_dn' => 'cn=iredmail,dc=example,dc=org',
'bind_pass' => 'password^1',
'writable' => false, //запретим запись в AD
'ldap_version' => '3',
// 'search_fields' => array('mail', 'cn', 'givenName', 'sn'),
'search_fields' => array('mail', 'cn', 'sAMAccountName', 'displayname', 'sn', 'givenName'),
// 'name_field' => 'cn',
'email_field' => 'mail',
'surname_field' => 'displayName',
'firstname_field' => 'givenName',
// 'sort' => 'cn',
'scope' => 'sub',
// 'filter' => '(&(enabledService=mail)(enabledService=deliver)(enabledService=displayedInGlobalAddressBook)(|(objectClass=mailList)(objectClass=mailAlias)(objectClass=mailUser)))',
'filter' => "(mail=*@*)",
'fuzzy_search' => true);
Сохраняем изменения, пробуем под пользователем зайти в адресную книгу, у нас там появиться пункт Global AD Address Book нажимаем на него и получаем список пользователей домена, которые имеют почтовые ящики.
Ну а теперь легкий тюнинг вида ящика. Слегка изменим порядок отображения колонок в почтовом ящике, лично мне нравится дефонтный порядок отображения колонок писем в Outlook, на мой взгляд, он удобный, по этому я решил привести отображение писем немного похожим на него.
Открываем файл:
nano /usr/share/apache2/roundcubemail/config/main.inc.php
находим строку:
$rcmail_config['list_cols'] = array
Закоментриуем ее и сразу под ней добавим, готовую строку:
$rcmail_config['list_cols'] = array('flag','attachment', 'from', 'subject', 'status', 'date', 'size' );
Важный и тонкий момент!
Поиск пользователей и скорость работы системы!В данной статье, я указывал базу для поиска пользователей ou=personal,dc=example,dc=org, но ничего не запрещает вам опрашивать весь контроллер домена целиком расширив зону поиска до dc=example,dc=org, но есть одно НО! Время опроса получается очень большим, так Dovecot, при опросе всего LDAP каталога, пускает пользователя в почтовый ящик почти 1 минуту, это очень много, по этому я и сузил параметры поиска, так поиск учетных данных пользователя, происходит практически мгновенно. Обязательно попробуете это, в настройках указав адресной книге искать по всему LDAP dc=example,dc=org вы сразу увидите как долго идет поиск пользователей.
На этом все.
Обо всех найденных недостатках, ошибках и возможных улучшениях, а также, если просто возникли вопросы, прошу в комментарии.
Данная схема была протестирована на Windows Server 2008/2008R2 на Windows 2k3 все должно работать т.к. атрибуты учетных записей не изменились.
Статья была написана с использованием материалов:
iRedMail-WiKi Но видимо, она написана для совсем старой версии iRedMail.
А также форума, на сайте разработчиков. На котором написано как у них все здорово работает, но не написано как это сделать.
121 комментарий
Enter password: Вводим пароль password^1
от тут выдает такое…
root@mail:/home/murad# ldapsearch -x -h ofk9410.roskazna.local -p 389 -D 'CN=iredmail,DC=naur,DC=fk' -W
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
additional info: 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece
root@mail:/home/murad#
1)если у вас контроллер домена dc1.example.org то почтовый сервер должен быть mail.example.org
2) Возможно проблема с обслуживанием зоны .local, Linux плохо с ней взаимодействует, если хотите иметь локальную зону, то лучше использовать .lan
Для начала вы попробуйте все это завести на тестовой системе, так как я описал, а уже потом вносите коррективы!
postmap -q megatronov@primvoda.local ldap:/etc/postfix/ldap/sender_login_maps.cf
выдало:
postmap: warning: dict_ldap_connect: Unable to bind to server ldap://testpost.primvoda.local:389 as cn=testpost,dc=primvoda,dc=local: 49 (Invalid credentials)
(для CentOS 5.6)
Теперь другой вопрос:
прописываю: telnet primvoda.local 389
выдаёт: trying 192.168.8.11…
Connected to primvoda.local (192.168.8.11).
Escape character is '^]'.
и всё… почему?
1) Почтовый сервер primvoda.local
2) его IP 192.168.8.11
Тогда зачем вы подключаетесь к LDAP? Вам нужен pop или imap!
primvoda.local — домен который я хочу прикрутить к Iredmail, 192.168.8.11 — ip домена.
почтовый сервер testpost.primvoda.local, его ip 192.168.8.83. LDAP нужен что бы интегрировать базы домена с новым почтовиком.
telnet пока не трогайте!
Я так понял подключение к домену по имени вы сделали!
Вы попробовали проверить разрешение членства в группе?
ввожу: megatronov@primvoda.local
пароль: password@1
Какаие могут быть варианты?
1) На почтовом сервере создан почтовый домен primvoda.local ([хотя это только для локальной сети, а не для интернет)?
2) При запросе
Система возвращает email пользователя?
3) Попробуйте подключаться по megatronov с паролем passworde@1( тоже работает)!
2) При запросе:
postmap -q megatronov@example.org ldap:/etc/postfix/ldap/sender_login_maps.cf
он ничего не выдаёт!
при запросе:
postmap -q megatronov@primvoda/local ldap:/etc/postfix/ldap/sender_login_maps.cf
Система возвращает email пользователя.
3) 3 пункт не работает.
Если перейти по адресу httрs://имя_почтового_сервера/iredadmin в админ панели создайте домен primvoda.local
Я имел в веду именно это запрос
1) Соберите тестовую среду AD DC+mail server
2) Заставьте все это работать в месте
3) Только поле полного тестирования, внедрять в боевую среду! Когда вы разобрались что и куда в этой системе.
З.Ы. По всем вариантам должно работать, но почему-то «не взлетает» гадать можно еще очень долго не видя что и как там у вас, пробуйте на основе моего примера уже внедрять в своих реалиях…
root@mailsa:~# ldapsearch -x -h dces.sssss.com -p 389 -D 'CN=iredmail,DC=sssss,DC=com' -W
Enter LDAP Password:
ldap_bind: Invalid credentials (49)
additional info: 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
Меня данные для ldapsearch:
root@mailsa:~# ldapsearch -x -h dces.somonair.com -p 389 -D 'iredmail@SSSSS.COM' -W
и все проходит на «ура»
Настроил вроде все верно. Где мог ошибиться?
То есть запрос нужно было так писать:
root@mailsa:~# ldapsearch -x -h dces.sssss.com -p 389 -D 'CN=iRed Mail,DC=sssss,DC=com' -W
После этого заработало
Помог мне анализ информации, который выдался по запросу:
root@mailsa:~# ldapsearch -x -h dces.somonair.com -p 389 -D 'iredmail@SSSSS.COM' -W
postmap -q allusers@example.org ldap:/etc/postfix/ldap/virtual_group_maps.cf
Выдает пусто — пользователей в группе нет. Проверяю на AD — в этой группе пользователи есть.
Где может быть здесь ошибка?
В моей статье это ou=personal,dc=example,dc=org
root@mailsa:~# cat /etc/postfix/ldap/virtual_group_maps.cf
#
# File generated by iRedMail (2012.05.29.20.19.27):
#
# Version: 0.8.0
# Project: www.iredmail.org/
#
# Community: www.iredmail.org/forum/
#
server_host = dces.somonair.com
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=iRed Mail,dc=sssss,dc=com
bind_pw = passwd^1
search_base = ou=personal,dc=sssss,dc=com
scope = sub
query_filter = (&(objectClass=group)(mail=%s))
special_result_attribute = member
leaf_result_attribute = mail
#result_attribute= userPrincipalName
debuglevel = 0
root@mailsa:~# telnet localhost 110
Trying 127.0.0.1…
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.
user kukueva@sssss.com
+OK
pass password@1
-ERR [IN-USE] Temporary authentication failure.
list
-ERR Unknown command.
quit
+OK Logging out
Connection closed by foreign host.
Попробуйте не использовать доменное имя @sssss.com, а просто логин и пароль (измените пароль в AD, на всякий случай, вдруг дело в нем)
Та же петрушка когда пытаешься входить пользователями через roundcub
May 30 09:29:53 auth: Error: ldap(root@mailsa.sssss.com): ldap_search((&(userPrincipalName=root@mailsa.sssss.com)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))) failed: Referral
May 30 09:40:35 auth: Error: ldap(kukueva@sssss.com,127.0.0.1): ldap_search((&(userPrincipalName=kukueva@sssss.com)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))) failed: Referral
May 30 09:42:13 pop3-login: Info: Disconnected: Inactivity (auth failed, 1 attempts): user=<kukueva@sssss.com>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
/etc/postfix/ldap/virtual_mailbox_maps.cf
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=iRed Mail,dc=sssss,dc=com
bind_pw = passwd^1
search_base = ou=personal,dc=sssss,dc=com
scope = sub
query_filter = (&(objectClass=person)(userPrincipalName=%s))
result_attribute= userPrincipalName
debuglevel = 0
выполните запрос:
Например: почтовый сервер у нас имеет имя mail.example.org, а контроллер домена dc1.contoso.comпо умолчанию идет разрешение имени по атрибуту учетной записи userPrincipalName, которой присваивается значение megatronov@contoso.com нам необходимо производить поиск по атрибуту sAMAccountName тогда логин пользователя будет иметь вид megatronov
Для примера:
Отредактируем файл
Вставляем в него:
Теперь попробуем разрешить имя пользователя по его email, выполнив запрос:
Нам должно выдать его логин:
megatronov
С этой проблемой я разобрался, но появилась новая, при разрешении имени dovecot, выполняет запрос к контроллеру домена, а в виде логина отправляет megatronov@example.org, а атрибуте учетной записи userPrincipalName такого значения нет т.к. домен у нас contoso.com со значением атрибута megatronov@contoso.com, но если выполнять поиск пользователя по атрибуту sAMAccountName, то dovecot отваливается с ошибкой и лечится это только перезагрузкой сервера.
По этому, на данный момент, почтовый сервер и контроллер домена должны находиться в одном пространстве имен, например: пространство имен example.org тогда почтовик должен иметь имя %mail_server_name%.example.org контроллер домена %dc_name%.example.org.
Как сделать чтобы почтовый сервер и контроллер домена могли работать с разными именами, я пока не знаю, но обязательно выясню.
Какое отношение этот комментарий имеет к моей проблеме? У меня домен почты mailsa.sssss.com, домен контроллера — dces.sssss.com (реальное имя домена я заменил на sssss). Но в любом случае у меня оба сервера находят в ОДНОМ ПРОСТРАНСТВЕ ИМЕН.
Тогда все должно работать согласно инструкции.
Я имею ввиду опцию default_pass_scheme = CRYPT в настройках /etc/dovecot/dovecot-ldap.conf
Нужно проверять учетные данные для подключения к AD ну и сам адрес контроллера домена, к стати вместо имени контроллера домена, можно подключаться по IP
May 30 10:20:40 auth: Error: ldap(kukueva@sssss.com,127.0.0.1): ldap_search((&(userPrincipalName=kukueva@somonair.com)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))) failed: Referral
May 30 10:20:40 imap-login: Info: Aborted login (auth failed, 1 attempts): user=<kukueva@somonair.com>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
Jun 25 14:20:34 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:20:40 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<postmaster@company.local>, method=PLAIN, rip=192.168.1.58, lip=192.168.1.5, TLS
Jun 25 14:30:14 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:30:24 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:30:34 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:30:40 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<postmaster@company.local>, method=PLAIN, rip=192.168.1.58, lip=192.168.1.5, TLS
Jun 25 14:40:14 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:40:24 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:40:34 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:40:40 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<postmaster@company.local>, method=PLAIN, rip=192.168.1.58, lip=192.168.1.5, TLS
Jun 25 14:50:16 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:50:24 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:50:34 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 14:50:40 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<postmaster@company.local>, method=PLAIN, rip=192.168.1.58, lip=192.168.1.5, TLS
Jun 25 15:00:14 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 15:00:24 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 15:00:34 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 15:00:40 imap-login: Info: Disconnected (auth failed, 3 attempts): user=<postmaster@company.local>, method=PLAIN, rip=192.168.1.58, lip=192.168.1.5, TLS
Jun 25 15:10:14 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 15:10:14 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
Jun 25 15:10:24 auth: Error: LDAP: binding failed (dn CN=mail,dc=company,dc=local): Invalid credentials, 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v23f0
А в целом очень хорошая дока по интеграции с AD. Спасибо!
На самом деле, как я уже советовал выше, просто сделайте как у меня, чтобы понять что и куда, так сказать — «потренироваться на кошках»
У меня разные доменные имена как на контролере так и на виртуальном доменном имени
например у вас
DC1.example.org MAIL.example.org
а у меня
DC1.aaa.net MAIL.bbb.ru
я создаю еще под таким аккаунтом почтовый ящик (personal@bbb.ru)
хотя у меня от контроллера создается автоматически personal@aaa.net
и именно второй проходит аутентификацию
как мне привязать personal@bbb.ru домену
чтобы он тоже авторизовался через него
Прошу помогите очень надо…
По этому, в данный момент, решения у меня нет! Но я его ищу, проблема в том, что у меня не очень много сводного времени…
хот ябы
спасибо за ответ
только ваш сайт помог корректно привязать к AD
howitmake.ru/blog/debian/91.html
Это вновь я. Решил вновь попробовать привязать AD к iRedMail.
Влпрос:
В пункте:
Изменим настройки транспорта:
nano /etc/postfix/transport
куда нужно добавлять запись
mail.example.org dovecot
он мне выдаёт кучу инфы и всё закаменчено, и похожего ничего нет.
Работаю с CentOS 5.6
Ставил на Ubuntu 12.04! Всё работает! Только вот вопрос, как теперь сделать так чтобы он полностью весь домен просканировал на наличие почтовых ящиков?
А в каком именно файле нужно прописать dc=example,dc=org вместо ou=personal,dc=example,dc=org
Строка:
В остальных файлах аналогично, но имейте в виду, что время опроса всего контроллера домена, намного больше, чем опрос только одного подразделения! Соответственно, вход в почту, намного дольше!
Всё сделал! ) Спасибо за такую мего полезную статью! ) Автору ОГРОМНЫЙ РЕСПЕКТ! )
Жду от вас наработок по «улучшательству» данной схемы…
У меня пару вопросов:
1)у меня перестал работать iredadmin(он не цепляет пользователей из ад и также из него пользователи не создаются на почте как и домены)
2)когда в адресной книге я ставлю 'base_dn' => 'dc=ssr-russia,dc=lan', то в roundcube пропадает GAD. просто у меня в подразделениее personal созданы еще подразделение и когда я явно указываю корневое подразделение то пользователи видны только из корневого подразделения.
3)как мне создать несколько доменов тоесть некоторые почты будут russia.ru а другие ssr-russia.com
у меня Ubuntu +iRedmail-0.8.3.
Подробности можно посмотреть в логах dovecot.
2)Странно, все должно работать, опять же, смотреть логи сервера.
3) Пока для AD у меня решения нет. Вариант оставлять работать с OpenLDAP, там можно напилить кучу доменов, но про авторизацию в AD, можно будет забыть. Проблема в том что UPN суффикс можно прикрутить только 1, к учетной записи пользователя.
iredmail у меня сразу отвалился я на него захожу под логином при установке postmaster@… а вот на rouncube под этим пользователем зайти не могу.такое ощущение что roundcee и iredadmin живут разными жизнями где смотреть настройки iredadmin может там что надо править.
Очень помогла! поднял iredmail, очень нравится.
Но вот, возник вопрос: насяльника хочет, чтобы postfix через почтовые клиенты принимал почтовые имена без домена. То есть kapustin а не kapustin@sever.local
Если я задаю имя kapustin, в логах получается такое.
Roundcube входит без названия домена, а по телнету та же картина
Перекопал весь Интернет ничего не нашел. Помогите, если можно
Пробую тест соединение с LDAP:
ldapsearch -x -h dc1.example.org -p 389 -D 'CN=iredmail,DC=example,DC=org' -W
Enter password: Вводим пароль password^1
А В ОТВЕТ: "ldap_sasl_bind (simple) can't contact ldap server -1"
Все делаю по инструкции как положено.
дайте совета
1) Не работает LDAP
2) Не правильный пароль для подключения
Думаю что логи скажут точнее
/etc/init.d/slapd restart — OK
А вот на счет пароля — как я правильно понимаю, но надо вводить пароль юзера iredmail, который размещен в самом корне?
логи лежат в /var/log/
Помогите решить, а то как то не вариант для тцать сотен юзверей вручную ящики делать
По идее эта команда должна не так отработать.
Помогите с адресной книгой.
Делаю все как у вас написано, сохраняюсь и воаля… меня не пускает на веб интерфейс почты, не говоря уже об адресной книге.
Вот код
смотрите что в логах.
Есть пользователь ну например user и почта у него соответственно user@corp.domain.com.
А можно ли сделать так, что бы имя учетной записи осталось user, а адрес почты был другим ну к примеру inanov@corp.domain.com
Пробую изменить поле email в свойствах учетки, вылетает ошибка:
Думаю что возможно чтобы все это провернуть можно использовать AD LDS, то есть, данные из AD реплецируются в AD LDS, а в LDS уже можно крутить как угодно, но это в теории, сам я ее не проверял!
Автор, можно, в таком случае, ещё 1 вопрос?
В случае, если почтовый сервер был mail.blablabla.example.org, AD — blablabla.example.org, при необходимости перевода юзеров к виду vasya_pupkin@example.org какими должны быть действия?
Добавить суффикс в AD вида example.org, домен example.org в iredmail и, в принципе, все? Либо ещё где-то грабли есть?
Заранее благодарю за помощь :)
Или вариант номер 2: howitmake.ru/blog/debian/91.html
Спасибо Вам! Будем внедрять пробовать :)
Можно ли как то сделать чтоб в адресной книге кроме адреса электронной почты выводилась бы и информация об отделе, должности или просто из поля описание из AD?
Конечно пропадают, почтовик начинает искать информацию в AD, а там таких записей нет, их просто нужно создать, но это такая элементарщина, что я даже описывать этот момент не стал
Что использовалось:
debian_7.1.0_amd64
iRedMail-0.8.5
Небольшое замечание (в тексте аналогия с руководством):
При указании в файлах
virtual_mailbox_maps.cf
virtual_group_maps.cf
sender_login_maps.cf
никоим образом не хотело запускаться…
Решилось исправлением строки на
Не стал копаться, в чем юмор, разбираться времени не было…
Автору ещё раз спасибо за проделанный труд!
В логах: Sender address rejected: User unknown in virtual mailbox table;
В чем может быть проблема?
Но есть одно НО. У меня зона *local. Письма с сервера прекрасно приходят на мой внешний мэйл, друг другу с внутренних доменных учеток письма тоже прекрасно ходят. А теперь вопрос: как сделать так, чтоб могла приходить почта извне? Например, с gmail.com или мэйл.ру?
В случае, если настроена интеграция с АД, ни у кого не появлялось мысли, как можно добавить алиас к ящику? Допустим, есть ящик test@example.org и нужно, чтобы был ящик как алиас с именем test1@example.org. Как такое привинтить-то?
Буду благодарен за помощь.
Ну а если идти по сложному пути, то напилить алиасов в postfix
То есть, просто создается в админке группа рассылки с именем test1@example.org, туда добавляется лишь 1 ящик test@example.org ..
А при связке с АД добавление через админку не будет ничему мешть?
Либо проще в конфигах прописать все?
Ради этого вся статья и затевалась, чтобы почтовик работал сам по себе, а все данные хранились в AD…
Ещё раз спасибо )
Пожалуйста.
У меня всё заработало, кроме получения почты.
Выдаёт такие ошибки
лог
Dec 25 15:47:55 mail2 postfix/qmgr[17873]: 02BA17FCD8: from=<dursunov-ruslan@mail.ru>, size=3380, nrcpt=1 (queue active)
Dec 25 15:47:55 mail2 postfix/qmgr[17873]: 6B6D67FCD6: from=<dursunov-ruslan@mail.ru>, size=3359, nrcpt=1 (queue active)
Dec 25 15:47:55 mail2 postfix/smtp[18323]: 02BA17FCD8: to=<RUSTESTA@corp.bcc.kz>, orig_to=<RUSTESTA@starbank.kz>, relay=10.1.25.88[10.1.25.88]:10025, delay=4536, delays=4536/0.01/0/0.01, dsn=4.1.2, status=deferred (host 10.1.25.88[10.1.25.88] said: 450 4.1.2 <RUSTESTA@corp.bcc.kz>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Dec 25 15:47:55 mail2 postfix/smtp[18324]: 6B6D67FCD6: to=<RUSTESTA@corp.bcc.kz>, orig_to=<RUSTESTA@starbank.kz>, relay=10.1.25.88[10.1.25.88]:10025, delay=4779, delays=4779/0.01/0/0.04, dsn=4.1.2, status=deferred (host 10.1.25.88[10.1.25.88] said: 450 4.1.2 <RUSTESTA@corp.bcc.kz>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
Dec 25 15:50:54 mail2 postfix/postsuper[18343]: Deleted: 27 messages
Как сделать чтобы он понимал to orig_to orig_to делал пересылку. Возможно ли такое что в компании где блосит фаервол?
Чтобы сервер мог сам себе письма отправлять?