avatar 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 воспринимает символ # как перенос, данный символ НЕЛЬЗЯ использовать в паролях!

Подготавливаем инфраструктуру к взаимодействию.
Поднимаем права до 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 комментарий

avatar
ldapsearch -x -h dc1.example.org -p 389 -D 'CN=iredmail,DC=example,DC=org' -W
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#
avatar
Почтовый домен и домен предприятия должны находиться в одном пространстве имен!
1)если у вас контроллер домена dc1.example.org то почтовый сервер должен быть mail.example.org
2) Возможно проблема с обслуживанием зоны .local, Linux плохо с ней взаимодействует, если хотите иметь локальную зону, то лучше использовать .lan
avatar
хм… жаль конечно то что с local, менять его не положено. А даже если я и буду настраивать, то с доменом 9410.roskazna.local почтовый будет выглядеть так — имя_хоста.roskazna.local?
avatar
Нет, скрипты дергают из AD содержимое атрибута mail ничего больше.
Для начала вы попробуйте все это завести на тестовой системе, так как я описал, а уже потом вносите коррективы!
avatar
Вы что в казначействе РФ работаете? Судя по домену…
avatar
Подскажите! Ввел следующую команду:

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)
avatar
Вам ведь система четко написала что она не может разрешить имя testpost.primvoda.local вы его в hosts добавили? Также Invalid credentials указывает на неправильные учетные данные с которыми вы подключаетесь к контроллеру домена.
avatar
Да, спасибо! С этим я разобрался…
Теперь другой вопрос:

прописываю: telnet primvoda.local 389

выдаёт: trying 192.168.8.11…
Connected to primvoda.local (192.168.8.11).
Escape character is '^]'.

и всё… почему?
avatar
Давайте разберемся:
1) Почтовый сервер primvoda.local
2) его IP 192.168.8.11
Тогда зачем вы подключаетесь к LDAP? Вам нужен pop или imap!
avatar
объясняю…
primvoda.local — домен который я хочу прикрутить к Iredmail, 192.168.8.11 — ip домена.
почтовый сервер testpost.primvoda.local, его ip 192.168.8.83. LDAP нужен что бы интегрировать базы домена с новым почтовиком.
avatar
Понятно.
telnet пока не трогайте!
Я так понял подключение к домену по имени вы сделали!
Вы попробовали проверить разрешение членства в группе?
avatar
Да, выдаёт что что должен по вашему мануалу…
avatar
Отлично, заходите в почту через WEB морду по учетным данным пользователя в домене
avatar
Пытаюсь… Но не пускает пишет: Login failed
ввожу: megatronov@primvoda.local
пароль: password@1

Какаие могут быть варианты?
avatar
По пунктам:
1) На почтовом сервере создан почтовый домен primvoda.local ([хотя это только для локальной сети, а не для интернет)?
2) При запросе
postmap -q megatronov@example.org ldap:/etc/postfix/ldap/sender_login_maps.cf

Система возвращает email пользователя?
3) Попробуйте подключаться по megatronov с паролем passworde@1( тоже работает)!
avatar
1) primvoda.local — домен поднятый на Windows server 2008
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 пункт не работает.
avatar
А на почтовом сервере у вас домен создан?
Если перейти по адресу httрs://имя_почтового_сервера/iredadmin в админ панели создайте домен primvoda.local
Я имел в веду именно это запрос
postmap -q megatronov@primvoda.local ldap:/etc/postfix/ldap/sender_login_maps.cf
avatar
зашел в админку, и обнаружил что домен primvoda.local там уже присутствует.
avatar
Что я вам могу посоветовать:
1) Соберите тестовую среду AD DC+mail server
2) Заставьте все это работать в месте
3) Только поле полного тестирования, внедрять в боевую среду! Когда вы разобрались что и куда в этой системе.

З.Ы. По всем вариантам должно работать, но почему-то «не взлетает» гадать можно еще очень долго не видя что и как там у вас, пробуйте на основе моего примера уже внедрять в своих реалиях…
avatar
Спасибо большое за советы! Как разберусь, напишу…
avatar
Отлично, буду ждать результатов!
avatar
У меня возникает несколько другая проблема:
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
и все проходит на «ура»

Настроил вроде все верно. Где мог ошибиться?
avatar
В принципе разобрался… AD возвращает по CN не логин, как я прописывал, а имя. Имя для данного пользователя iredmail — iRed Mail
То есть запрос нужно было так писать:
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
avatar
Теперь возникла следующая проблема. Проверяю членство в группе:
postmap -q allusers@example.org ldap:/etc/postfix/ldap/virtual_group_maps.cf
Выдает пусто — пользователей в группе нет. Проверяю на AD — в этой группе пользователи есть.
Где может быть здесь ошибка?
avatar
Группа находится в подразделении которое опрашивается?
В моей статье это ou=personal,dc=example,dc=org
avatar
Да, конечно, проверил. Вот содержимое /etc/postfix/ldap/virtual_group_maps.cf
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
avatar
С этим вопрос разобрался — в настройках доменных пользователей не были указаны почтовые адреса. После указания почтовых адресов все заработало
avatar
И еще вопрос по поводу квоты почтового ящика — получается нельзя здесь принципиально ставить квоты разные для разных пользователей?
avatar
В данном варианте нет, квота единая для всех. Возможно если добавить в с Схему AD дополнительный атрибут и указывать уже в нем размер квоты.
avatar
Следующая ошибка такая возникает:
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.
avatar
тут все указывает на не парильный пароль т.к. соединение установлено, пользователь найден.
Попробуйте не использовать доменное имя @sssss.com, а просто логин и пароль (измените пароль в AD, на всякий случай, вдруг дело в нем)
avatar
Пароль менял, просто пользователя без домена тоже указывал — не проходит.
Та же петрушка когда пытаешься входить пользователями через roundcub
avatar
что говорят логи?
avatar
Windows (аудит отказов)
avatar
Просмотрел внимательно журнал Windows на предмет аудита отказов — ничего нет
avatar
Вот лог dovecot.log:
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
avatar
выложите содержимое:
/etc/postfix/ldap/virtual_mailbox_maps.cf
avatar
server_host = dces.sssss.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=person)(userPrincipalName=%s))
result_attribute= userPrincipalName
debuglevel = 0
комментарий был удален
avatar
переведите debuglevel = 1
выполните запрос:
postmap -q kukueva@sssss.com ldap:/etc/postfix/virtual_mailbox_maps.cf
avatar
Сделал, вот что получилось:
root@mailsa:~# postmap -q kukueva@sssss.com ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf
postmap: dict_ldap_debug: ldap_create
postmap: dict_ldap_debug: ldap_url_parse_ext(ldap://dces.sssss.com:389)
postmap: dict_ldap_debug: ldap_sasl_bind
postmap: dict_ldap_debug: ldap_send_initial_request
postmap: dict_ldap_debug: ldap_new_connection 1 1 0
postmap: dict_ldap_debug: ldap_int_open_connection
postmap: dict_ldap_debug: ldap_connect_to_host: TCP dces.sssss.com:389
postmap: dict_ldap_debug: ldap_new_socket: 4
postmap: dict_ldap_debug: ldap_prepare_socket: 4
postmap: dict_ldap_debug: ldap_connect_to_host: Trying 192.168.0.100:389
postmap: dict_ldap_debug: ldap_pvt_connect: fd: 4 tm: 10 async: 0
postmap: dict_ldap_debug: ldap_ndelay_on: 4
postmap: dict_ldap_debug: ldap_int_poll: fd: 4 tm: 10
postmap: dict_ldap_debug: ldap_is_sock_ready: 4
postmap: dict_ldap_debug: ldap_ndelay_off: 4
postmap: dict_ldap_debug: ldap_pvt_connect: 0
postmap: dict_ldap_debug: ldap_open_defconn: successful
postmap: dict_ldap_debug: ldap_send_server_request
postmap: dict_ldap_debug: ber_scanf fmt ({it) ber:
postmap: dict_ldap_debug: ber_scanf fmt ({i) ber:
postmap: dict_ldap_debug: ber_flush2: 54 bytes to sd 4
postmap: dict_ldap_debug: ldap_result ld 0x7f321a20a710 msgid 1
postmap: dict_ldap_debug: wait4msg ld 0x7f321a20a710 msgid 1 (timeout 10000000 usec)
postmap: dict_ldap_debug: wait4msg continue ld 0x7f321a20a710 msgid 1 all 1
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Connections:
postmap: dict_ldap_debug: * host: dces.sssss.com  port: 389  (default)
postmap: dict_ldap_debug:   refcnt: 2  status: Connected
postmap: dict_ldap_debug:   last used: Wed May 30 10:25:41 2012
postmap: dict_ldap_debug:
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Outstanding Requests:
postmap: dict_ldap_debug:  * msgid 1,  origid 1, status InProgress
postmap: dict_ldap_debug:    outstanding referrals 0, parent count 0
postmap: dict_ldap_debug:   ld 0x7f321a20a710 request count 1 (abandoned 0)
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Response Queue:
postmap: dict_ldap_debug:    Empty
postmap: dict_ldap_debug:   ld 0x7f321a20a710 response count 0
postmap: dict_ldap_debug: ldap_chkResponseList ld 0x7f321a20a710 msgid 1 all 1
postmap: dict_ldap_debug: ldap_chkResponseList returns ld 0x7f321a20a710 NULL
postmap: dict_ldap_debug: ldap_int_select
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 1 all 1
postmap: dict_ldap_debug: ber_get_next
postmap: dict_ldap_debug: ber_get_next: tag 0x30 len 16 contents:
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 1 message type bind
postmap: dict_ldap_debug: ber_scanf fmt ({eAA) ber:
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 0 new referrals
postmap: dict_ldap_debug: read1msg:  mark request completed, ld 0x7f321a20a710 msgid 1
postmap: dict_ldap_debug: request done: ld 0x7f321a20a710 msgid 1
postmap: dict_ldap_debug: res_errno: 0, res_error: <>, res_matched: <>
postmap: dict_ldap_debug: ldap_free_request (origid 1, msgid 1)
postmap: dict_ldap_debug: ldap_parse_result
postmap: dict_ldap_debug: ber_scanf fmt ({iAA) ber:
postmap: dict_ldap_debug: ber_scanf fmt (}) ber:
postmap: dict_ldap_debug: ldap_msgfree
postmap: dict_ldap_debug: ldap_search_ext
postmap: dict_ldap_debug: put_filter: "(&(objectClass=person)(userPrincipalName=kukueva@sssss.com))"
postmap: dict_ldap_debug: put_filter: AND
postmap: dict_ldap_debug: put_filter_list "(objectClass=person)(userPrincipalName=kukueva@sssss.com)"
postmap: dict_ldap_debug: put_filter: "(objectClass=person)"
postmap: dict_ldap_debug: put_filter: simple
postmap: dict_ldap_debug: put_simple_filter: "objectClass=person"
postmap: dict_ldap_debug: put_filter: "(userPrincipalName=kukueva@sssss.com)"
postmap: dict_ldap_debug: put_filter: simple
postmap: dict_ldap_debug: put_simple_filter: "userPrincipalName=kukueva@sssss.com"
postmap: dict_ldap_debug: ldap_send_initial_request
postmap: dict_ldap_debug: ldap_send_server_request
postmap: dict_ldap_debug: ber_scanf fmt ({it) ber:
postmap: dict_ldap_debug: ber_scanf fmt ({) ber:
postmap: dict_ldap_debug: ber_flush2: 145 bytes to sd 4
postmap: dict_ldap_debug: ldap_result ld 0x7f321a20a710 msgid 2
postmap: dict_ldap_debug: wait4msg ld 0x7f321a20a710 msgid 2 (timeout 10000000 usec)
postmap: dict_ldap_debug: wait4msg continue ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Connections:
postmap: dict_ldap_debug: * host: dces.sssss.com  port: 389  (default)
postmap: dict_ldap_debug:   refcnt: 2  status: Connected
postmap: dict_ldap_debug:   last used: Wed May 30 10:25:41 2012
postmap: dict_ldap_debug:
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Outstanding Requests:
postmap: dict_ldap_debug:  * msgid 2,  origid 2, status InProgress
postmap: dict_ldap_debug:    outstanding referrals 0, parent count 0
postmap: dict_ldap_debug:   ld 0x7f321a20a710 request count 1 (abandoned 0)
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Response Queue:
postmap: dict_ldap_debug:    Empty
postmap: dict_ldap_debug:   ld 0x7f321a20a710 response count 0
postmap: dict_ldap_debug: ldap_chkResponseList ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ldap_chkResponseList returns ld 0x7f321a20a710 NULL
postmap: dict_ldap_debug: ldap_int_select
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ber_get_next
postmap: dict_ldap_debug: ber_get_next: tag 0x30 len 135 contents:
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 2 message type search-entry
postmap: dict_ldap_debug: wait4msg ld 0x7f321a20a710 9 s 996536 us to go
postmap: dict_ldap_debug: wait4msg continue ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Connections:
postmap: dict_ldap_debug: * host: dces.sssss.com  port: 389  (default)
postmap: dict_ldap_debug:   refcnt: 2  status: Connected
postmap: dict_ldap_debug:   last used: Wed May 30 10:25:41 2012
postmap: dict_ldap_debug:
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Outstanding Requests:
postmap: dict_ldap_debug:  * msgid 2,  origid 2, status InProgress
postmap: dict_ldap_debug:    outstanding referrals 0, parent count 0
postmap: dict_ldap_debug:   ld 0x7f321a20a710 request count 1 (abandoned 0)
postmap: dict_ldap_debug: ** ld 0x7f321a20a710 Response Queue:
postmap: dict_ldap_debug:  * msgid 2,  type 100
postmap: dict_ldap_debug:   ld 0x7f321a20a710 response count 1
postmap: dict_ldap_debug: ldap_chkResponseList ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ldap_chkResponseList returns ld 0x7f321a20a710 NULL
postmap: dict_ldap_debug: ldap_int_select
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 2 all 1
postmap: dict_ldap_debug: ber_get_next
postmap: dict_ldap_debug: ber_get_next: tag 0x30 len 16 contents:
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 msgid 2 message type search-result
postmap: dict_ldap_debug: ber_scanf fmt ({eAA) ber:
postmap: dict_ldap_debug: read1msg: ld 0x7f321a20a710 0 new referrals
postmap: dict_ldap_debug: read1msg:  mark request completed, ld 0x7f321a20a710 msgid 2
postmap: dict_ldap_debug: request done: ld 0x7f321a20a710 msgid 2
postmap: dict_ldap_debug: res_errno: 0, res_error: <>, res_matched: <>
postmap: dict_ldap_debug: ldap_free_request (origid 2, msgid 2)
postmap: dict_ldap_debug: adding response ld 0x7f321a20a710 msgid 2 type 101:
postmap: dict_ldap_debug: ldap_parse_result
postmap: dict_ldap_debug: ber_scanf fmt ({iAA) ber:
postmap: dict_ldap_debug: ber_scanf fmt (}) ber:
postmap: dict_ldap_debug: ldap_first_attribute
postmap: dict_ldap_debug: ber_scanf fmt ({xl{) ber:
postmap: dict_ldap_debug: ber_scanf fmt ({ax}) ber:
postmap: dict_ldap_debug: ldap_get_values_len
postmap: dict_ldap_debug: ber_scanf fmt ({x{{a) ber:
postmap: dict_ldap_debug: ber_scanf fmt ([V]) ber:
postmap: dict_ldap_debug: ldap_next_attribute
postmap: dict_ldap_debug: ldap_msgfree
kukueva@sssss.com
postmap: dict_ldap_debug: ldap_free_connection 1 1
postmap: dict_ldap_debug: ldap_send_unbind
postmap: dict_ldap_debug: ber_flush2: 7 bytes to sd 4
postmap: dict_ldap_debug: ldap_free_connection: actually freed
avatar
Значит так, такая ошибка вылетает в случае если доменное имя почтового сервера, отличается от имени контроллера домена.
Например: почтовый сервер у нас имеет имя mail.example.org, а контроллер домена dc1.contoso.comпо умолчанию идет разрешение имени по атрибуту учетной записи userPrincipalName, которой присваивается значение megatronov@contoso.com нам необходимо производить поиск по атрибуту sAMAccountName тогда логин пользователя будет иметь вид megatronov
Для примера:
Отредактируем файл
nano /etc/postfix/ldap/sender_login_maps.cf

Вставляем в него:
server_host     = dc1.contoso.com
server_port     = 389
version         = 3
bind            = yes
start_tls       = no
bind_dn         = cn=iredmail,dc=contoso,dc=com
bind_pw         = password^1
search_base     = ou=personal,dc=contoso,dc=com
scope           = sub
query_filter    = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute= sAMAccountName
debuglevel      = 0


Теперь попробуем разрешить имя пользователя по его email, выполнив запрос:
postmap -q megatronov@example.org ldap:/etc/postfix/ldap/sender_login_maps.cf


Нам должно выдать его логин:
megatronov

С этой проблемой я разобрался, но появилась новая, при разрешении имени dovecot, выполняет запрос к контроллеру домена, а в виде логина отправляет megatronov@example.org, а атрибуте учетной записи userPrincipalName такого значения нет т.к. домен у нас contoso.com со значением атрибута megatronov@contoso.com, но если выполнять поиск пользователя по атрибуту sAMAccountName, то dovecot отваливается с ошибкой и лечится это только перезагрузкой сервера.

По этому, на данный момент, почтовый сервер и контроллер домена должны находиться в одном пространстве имен, например: пространство имен example.org тогда почтовик должен иметь имя %mail_server_name%.example.org контроллер домена %dc_name%.example.org.
Как сделать чтобы почтовый сервер и контроллер домена могли работать с разными именами, я пока не знаю, но обязательно выясню.
avatar
Стоп, стоп, стоп!
Какое отношение этот комментарий имеет к моей проблеме? У меня домен почты mailsa.sssss.com, домен контроллера — dces.sssss.com (реальное имя домена я заменил на sssss). Но в любом случае у меня оба сервера находят в ОДНОМ ПРОСТРАНСТВЕ ИМЕН.
avatar
Я так понял что в разных.
Тогда все должно работать согласно инструкции.
avatar
Нет, в одинаковых. Но тем не менее не работает. Складывается впечатление, что AD не пропускает в том виде пароль, в котором отправляет на проверку dovecot
Я имею ввиду опцию default_pass_scheme = CRYPT в настройках /etc/dovecot/dovecot-ldap.conf
avatar
Это вариант полностью рабочий, я вчера мин за 15 поднял, методом кпипаста, все заработало.
Нужно проверять учетные данные для подключения к AD ну и сам адрес контроллера домена, к стати вместо имени контроллера домена, можно подключаться по IP
avatar
так подключение к самому домену проходит нормально — первые тесты по вашей документации проходят без проблем. Проблемы начинаются когда уже происходит авторизация пользователя далее, при входе через телнет или через веб, то есть тогда, когда с AD запрашивается уже пользователь вместе с паролем.
avatar
тогда смотреть настройки
/etc/dovecot/dovecot-ldap.conf
avatar
Ок. Сейчас попробую все поставить заново, с нуля. ИМХО, есть подозрения, все проблемы из-за того, что я изначально настраивал сервер для работы с mysql, а уже потом решил прикрутить к ad.
avatar
Вот лог довекота при попытке входа через web:
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
avatar
Аналогичная проблема. Так же домен почты и домен контроллера в одном пространстве.
avatar
что в логах?
avatar
В dovecot.log
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
avatar
Судя по логу, ваш почтовый сервер подключается с неправильными учетными данными, проверьте пароль и логин для подключения к LDAP.
avatar
Прощу прощения. Я идиот. В dovecot-ldap.conf поставил неправильный пароль. В следствии этого и получал binding failed. Спасибо за подробный мануал.
avatar
ИМХО, все эти моменты, на которые я напоролся, неплохо было бы отразить в Вашей документации.
А в целом очень хорошая дока по интеграции с AD. Спасибо!
avatar
Это понятно, проблема в том что на момент написания, я с этими проблемами не сталкивался, а те что были выявлены я устранил- решение я выкладывал уже рабочее.
На самом деле, как я уже советовал выше, просто сделайте как у меня, чтобы понять что и куда, так сказать — «потренироваться на кошках»
avatar
Для начала большое спасибо автору данной статьи за его труд

У меня разные доменные имена как на контролере так и на виртуальном доменном имени
например у вас
DC1.example.org MAIL.example.org

а у меня
DC1.aaa.net MAIL.bbb.ru
я создаю еще под таким аккаунтом почтовый ящик (personal@bbb.ru)
хотя у меня от контроллера создается автоматически personal@aaa.net
и именно второй проходит аутентификацию
как мне привязать personal@bbb.ru домену
чтобы он тоже авторизовался через него

Прошу помогите очень надо…
avatar
Вот эту проблему я сейчас и пытаюсь решить, с postfix проблем нет, он ищет тот атрибут в AD который ему скажут, а вот dovecot при поиске любого атрибута отличного от sAMAccountName, просто отваливается.
По этому, в данный момент, решения у меня нет! Но я его ищу, проблема в том, что у меня не очень много сводного времени…
avatar
Artful т.е. через почтовый клиент он должен работать?
avatar
Какая разница, через что работать, roundcube это тоже почтовый клиент подключающийся через imap, просто он написан на php и работает локально.
avatar
т.е. это нормально что он не проходить авторизацию
avatar
а не подскажите как сделать чтобы он зпходил черех postfix
хот ябы
avatar
Еще раз, если почтовый сервер и контроллер домена находятся в одном пространстве имен, то все приведено в статье, если в разный, то решения, у меня пока нет.
avatar
понятно
спасибо за ответ
avatar
буду ждать вашего положительного ответа по данной затруднительной ситуации
только ваш сайт помог корректно привязать к AD
avatar
Замените у пользователя UPN суффикс, ну и для ознакомления:
howitmake.ru/blog/debian/91.html
avatar
Доброе время суток!
Это вновь я. Решил вновь попробовать привязать AD к iRedMail.
Влпрос:
В пункте:

Изменим настройки транспорта:
nano /etc/postfix/transport

куда нужно добавлять запись
mail.example.org dovecot

он мне выдаёт кучу инфы и всё закаменчено, и похожего ничего нет.
Работаю с CentOS 5.6
avatar
Вот в этот файл и добавляем…
avatar
Вообщем у меня получилось!
Ставил на Ubuntu 12.04! Всё работает! Только вот вопрос, как теперь сделать так чтобы он полностью весь домен просканировал на наличие почтовых ящиков?
А в каком именно файле нужно прописать dc=example,dc=org вместо ou=personal,dc=example,dc=org
avatar
Ну сударь, вы даете :)

nano /etc/postfix/ldap/virtual_mailbox_maps.cf


Строка:
search_base     = ou=personal,dc=example,dc=org


В остальных файлах аналогично, но имейте в виду, что время опроса всего контроллера домена, намного больше, чем опрос только одного подразделения! Соответственно, вход в почту, намного дольше!
avatar
Ура! )
Всё сделал! ) Спасибо за такую мего полезную статью! ) Автору ОГРОМНЫЙ РЕСПЕКТ! )
avatar
Автор принимает респект ;)

Жду от вас наработок по «улучшательству» данной схемы…
avatar
Статья на 5+!!!
У меня пару вопросов:
1)у меня перестал работать iredadmin(он не цепляет пользователей из ад и также из него пользователи не создаются на почте как и домены)
2)когда в адресной книге я ставлю 'base_dn' => 'dc=ssr-russia,dc=lan', то в roundcube пропадает GAD. просто у меня в подразделениее personal созданы еще подразделение и когда я явно указываю корневое подразделение то пользователи видны только из корневого подразделения.
3)как мне создать несколько доменов тоесть некоторые почты будут russia.ru а другие ssr-russia.com
у меня Ubuntu +iRedmail-0.8.3.
avatar
1) Думаю что у учетки, под которой ваш почтовый сервер подключается к AD закончился срок действия пароля.
Подробности можно посмотреть в логах dovecot.
2)Странно, все должно работать, опять же, смотреть логи сервера.
3) Пока для AD у меня решения нет. Вариант оставлять работать с OpenLDAP, там можно напилить кучу доменов, но про авторизацию в AD, можно будет забыть. Проблема в том что UPN суффикс можно прикрутить только 1, к учетной записи пользователя.
avatar
срок действия пароля не мог истечь(
iredmail у меня сразу отвалился я на него захожу под логином при установке postmaster@… а вот на rouncube под этим пользователем зайти не могу.такое ощущение что roundcee и iredadmin живут разными жизнями где смотреть настройки iredadmin может там что надо править.
avatar
логи нужно смотреть, там все написано
avatar
Спасибо за статью!
Очень помогла! поднял iredmail, очень нравится.
Но вот, возник вопрос: насяльника хочет, чтобы postfix через почтовые клиенты принимал почтовые имена без домена. То есть kapustin а не kapustin@sever.local
Если я задаю имя kapustin, в логах получается такое.
Jul 18 03:33:44 intranet postfix/smtpd[7633]: NOQUEUE: reject: RCPT from unknown[10.1.1.99]: 504 5.5.2 <kapustin>: Recipient address rejected: need fully-qualified address; from=<malkin@sever.local> to=<kapustin> proto=ESMTP helo=<1s821>

Roundcube входит без названия домена, а по телнету та же картина
-ERR Authentication failed.

Перекопал весь Интернет ничего не нашел. Помогите, если можно
avatar
Дума что имеет смыл посмотреть сайт разработчика, там подобная тема поднималась, кажется
avatar
Всем привет!

Пробую тест соединение с 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"
Все делаю по инструкции как положено.
дайте совета
avatar
У меня только 2 варинта:
1) Не работает LDAP
2) Не правильный пароль для подключения
Думаю что логи скажут точнее
avatar
а как проверить работает ли LDAP?

/etc/init.d/slapd restart — OK

А вот на счет пароля — как я правильно понимаю, но надо вводить пароль юзера iredmail, который размещен в самом корне?
avatar
Кстати, подскажите где лежат логи
avatar
смотреть кто слушает порт можно через netstat порт 389
логи лежат в /var/log/
avatar
После того как банально пароль сделал 12345 стало выдаать вот это.


Помогите решить, а то как то не вариант для тцать сотен юзверей вручную ящики делать
avatar
Ящик создается автоматически, при при первом входе пользователя в почту, при условии что iredmail может нормально подключиться к контроллеру домена, а там или данные для подключения правильные или нет.
avatar
исходя из скрина пользователь iredmail подключился в DC или нет?
По идее эта команда должна не так отработать.
avatar
нет, там вываливает большую портянку из AD
avatar
Спасибо за помощь, сделал, все работает, но…
Помогите с адресной книгой.
Делаю все как у вас написано, сохраняюсь и воаля… меня не пускает на веб интерфейс почты, не говоря уже об адресной книге.

Вот код


// ADDRESSBOOK SETTINGS
// ----------------------------------
// Global LDAP address book.
$rcmail_config['ldap_public']["mail.domen.com"] = array(
    'name'          => 'Global AD Address Book',
    'hosts'         => array('dc1.domen.com'),
    'port'          => 389,
    'use_tls'       => false,
    'ldap_version'  => '3',
    'user_specific' => false, // If true the base_dn, bind_dn and bind_pass def$

    // Search accounts in the same domain.
    'base_dn'       => 'ou=personal,dc=domen,dc=com',
    'bind_dn'       => 'cn=iredmail,dc=domen,dc=com',
    'bind_pass'     => 'qwer1234',
    //'searchonly'    => false,
    'writable'      => false,
    'search_fields' => array('mail', 'cn', 'sAMAccountName', 'displayname', 'sn$
    'email_field'   => 'mail',
    'surname_field' => 'displayName',
    'firstname_field' => 'givenName',
    'scope'         => 'sub',
    'filter'        => "(mail=*@*)",
    'fuzzy_search'  => true);
avatar
Значит вы что-то делаете не так.
смотрите что в логах.
avatar
А можно у Вас попросить этот файл целиком, где все прописано, если конечно не жалко
avatar
готового у меня нет т.к. отказались от использования iRedMAil.
avatar
А можно еще вопрос.
Есть пользователь ну например user и почта у него соответственно user@corp.domain.com.
А можно ли сделать так, что бы имя учетной записи осталось user, а адрес почты был другим ну к примеру inanov@corp.domain.com
Пробую изменить поле email в свойствах учетки, вылетает ошибка:


SMTP Error (550): Невозможно добавить получателя "user@corp.domain.com" 
(5.1.1 <user@corp.domain.com>: Recipient address rejected: User unknown in virtual mailbox table)
avatar
Теоретически возможно, если вы научите контроллер домена, авторизировать по полю в email и сопоставлять его с паролем, у меня это не получилось, хотя я и не пытался.
Думаю что возможно чтобы все это провернуть можно использовать AD LDS, то есть, данные из AD реплецируются в AD LDS, а в LDS уже можно крутить как угодно, но это в теории, сам я ее не проверял!
avatar
И по данному гайду все завелось прям на лету :)
Автор, можно, в таком случае, ещё 1 вопрос?
В случае, если почтовый сервер был mail.blablabla.example.org, AD — blablabla.example.org, при необходимости перевода юзеров к виду vasya_pupkin@example.org какими должны быть действия?
Добавить суффикс в AD вида example.org, домен example.org в iredmail и, в принципе, все? Либо ещё где-то грабли есть?
Заранее благодарю за помощь :)
avatar
Так этому вопросу статья и посвящена, в которой вы отметились…
Или вариант номер 2: howitmake.ru/blog/debian/91.html
avatar
Прошу прощения, второй вариант пропустил…

Спасибо Вам! Будем внедрять пробовать :)
avatar
пожалуйста, пользуйтесь… ;)
avatar
Поставил. все очень замечательно работает.Спасибо!!!
Можно ли как то сделать чтоб в адресной книге кроме адреса электронной почты выводилась бы и информация об отделе, должности или просто из поля описание из AD?
avatar
И еще после интеграции пропадают учетные записи которые были до интеграции, в том числе и postmaster
avatar
Можно настроить отображение нужных полей в адресной книге
Конечно пропадают, почтовик начинает искать информацию в AD, а там таких записей нет, их просто нужно создать, но это такая элементарщина, что я даже описывать этот момент не стал
avatar
просто там письмо приходит на постмастер со всеми явками и паролями, а когда делаешь интеграцию то оно пропадает))) соответственно все явки и пароли тоже
avatar
так из файлов на сервере всегда можно достать :) Что вы, ей богу…
avatar
В общем, поставил рабочий вариант без нареканий.

Что использовалось:

debian_7.1.0_amd64
iRedMail-0.8.5

Небольшое замечание (в тексте аналогия с руководством):

При указании в файлах

virtual_mailbox_maps.cf
virtual_group_maps.cf
sender_login_maps.cf

bind_dn = cn=iredmail,dc=example,dc=org


никоим образом не хотело запускаться…

Решилось исправлением строки на

bind_dn = iredmail@example.org


Не стал копаться, в чем юмор, разбираться времени не было…

Автору ещё раз спасибо за проделанный труд!
avatar
Добрый день. Есть один вопрос поставил версию iRedMail-0.8.5, все прописал, авторизация пользователей проходить через AD. Через web авторизация проходит, но при отправке вылетает ошибка 550 — что пользователь не найдет. Через telnet 110 и 25 порт доступны…
В логах: Sender address rejected: User unknown in virtual mailbox table;
В чем может быть проблема?
avatar
проверяйте конфигурационные файлы для подключения к AD
avatar
Автор, добрый день. Огромное спасибо за такой труд!) Я четко следовал инструкции (до места импорта адресной книги) и такая тестовая конфигурация работает на ура. Юзеры подцепились, вновь созданные — тоже. Все класс.
Но есть одно НО. У меня зона *local. Письма с сервера прекрасно приходят на мой внешний мэйл, друг другу с внутренних доменных учеток письма тоже прекрасно ходят. А теперь вопрос: как сделать так, чтоб могла приходить почта извне? Например, с gmail.com или мэйл.ру?
avatar
Создаете MX Запись в DNS указывающую на IP адрес вашего почтового сервера, обеспечиваете доступность 25 порта из интернета и пользуетесь
avatar
сделал так. та же проблема(
avatar
как вы считаете, человек который понятия не имеет как у вас там все настроено, может разобраться в вашей проблеме?!
avatar
Вот ещё вопрос возник.
В случае, если настроена интеграция с АД, ни у кого не появлялось мысли, как можно добавить алиас к ящику? Допустим, есть ящик test@example.org и нужно, чтобы был ящик как алиас с именем test1@example.org. Как такое привинтить-то?

Буду благодарен за помощь.
avatar
Самое простое-создать группу рассылки и добавить туда учетную запись нужного пользователя, у данной схемы есть и еще один плюс, если пользователь уволится то в эту группу можно добавить ученую запись, для сбора писем, чтобы важные письма, на несуществующие адреса не пропадали.
Ну а если идти по сложному пути, то напилить алиасов в postfix
avatar
Спасибо, интересное решение )
То есть, просто создается в админке группа рассылки с именем test1@example.org, туда добавляется лишь 1 ящик test@example.org ..
А при связке с АД добавление через админку не будет ничему мешть?
Либо проще в конфигах прописать все?
avatar
Админка почтового сервера тут не нужна, группа рассылки создается AD.
Ради этого вся статья и затевалась, чтобы почтовик работал сам по себе, а все данные хранились в AD…
avatar
Понял, извините, ступил )
Ещё раз спасибо )
avatar
Бывает… :)
Пожалуйста.
avatar
Добрый день!

У меня всё заработало, кроме получения почты.

Выдаёт такие ошибки

лог

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
avatar
так у вас пишет что не найден домен:
<RUSTESTA@corp.bcc.kz>: Recipient address rejected: Domain not found (in reply to RCPT TO command))
avatar
С домена всю информацию Я вытаскиваю, пингую домен, аутентификация на отправку и получения то же через домен работает.

Как сделать чтобы он понимал to orig_to orig_to делал пересылку. Возможно ли такое что в компании где блосит фаервол?
avatar
Честно говоря, не совсем понял что вы хотите сделать…
Чтобы сервер мог сам себе письма отправлять?
Есть что добавить? Регистрируйся и оставляй комментарии!