Инструменты пользователя

Инструменты сайта


postfix_dovecot_active_directory

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
postfix_dovecot_active_directory [2013/05/07 17:13]
metallic создано
postfix_dovecot_active_directory [2022/03/25 17:00] (текущий)
Строка 1: Строка 1:
 ====== Почта Postfix + Dovecot с интеграцией в MS Active Directory ====== ====== Почта Postfix + Dovecot с интеграцией в MS Active Directory ======
 ===== Введение ===== ===== Введение =====
-В данной статье я хочу структурировать клочки информации по теме, которые мне удалось найти в интернете. Данная тема не новая, но внятного-понятно howto, с пояснениями и т.д. найти не удалось, поэтому решил написать заметку себе на память, вдруг еще доведется подобное где-то разворачивать.+В данной статье я хочу структурировать клочки информации по теме, которые мне удалось найти в интернете. Данная тема не новая, но внятного-понятного howto, с пояснениями и т.д. найти не удалось, поэтому решил написать заметку себе на память, вдруг еще доведется подобное где-то разворачивать.
 Итак, в данном мануале будет рассмотрен вопрос разворачивания внутренней корпоративной почты, т.е. почта которая работает только в пределах локальной сети, для внутренних нужд организации, хотя ничего вам не мешает подобным образом организовать и глобальную почтовую систему. Итак, в данном мануале будет рассмотрен вопрос разворачивания внутренней корпоративной почты, т.е. почта которая работает только в пределах локальной сети, для внутренних нужд организации, хотя ничего вам не мешает подобным образом организовать и глобальную почтовую систему.
 +
 +Для чего все это нужно? Ну, во-первых, удобство использования виртуальных акантов, вместо реальных, на почтовом сервер, вполне очевидно. Во-вторых, интеграция почтовой системы с AD(LDAP) дает нам возможность централизованно управлять всеми акаунтами из одного места(акаутны, почтовые псевдонимы, списки рассылки и т.д.). В данном конкретном случае предполагается, что AD уже развернуто и акаунты уже есть, но имена их не соответствуют желаемому стандарту, например "первая буква имени, фамилия", т.е. для Иванова Ивана акаунт должен был быть iivanov, а на самом деле есть vasya. Т.е. хотелось, чтобы почтовый адрес был iivanov@domain.local, выходом из положения стало использование алиасов, т.е. у каждого пользователя прописано поле E-mail в его профиле, где и указано iivanov@domain.local, но обо всем по порядку.
 +
 +Итак, имеем домен под управлением Windows Server 2012, режим леса и режим домена - 2012. Почтовый сервер - GNU/Debian 7.0 (Postfix 2.9, Dovecot 2.1).
 +
 +===== Установка =====
 +
 +Устанавливаем все необходимое
 +<konsole>
 +# apt-get install dovecot-common dovecot-ldap dovecot-imapd dovecot-pop3d postfix postfix-ldap
 +</konsole>
 +
 +===== Dovecot =====
 +Начнем с Dovecot. Конфиг у него достаточно объемный, буду указывать только то, что правил.
 +
 +/etc/dovecot/conf.d/10-auth.conf
 +  # Включаем plaintext аунтификацию, т.к. по-другому с AD работать не будет(вроде?).
 +  # А если нужна безопасность, то можно использовать SSL-соединение.
 +  disable_plaintext_auth = no
 +  
 +/etc/dovecot/conf.d/10-logging.conf
 +  # Указываем куда класть дополнительные логи
 +  
 +  debug_log_path = /var/log/dovecot_debug.log
 +  
 +  # Ну и включаем всевозможные логи, помогут нам при отладке, главное не забыть потом выключить,
 +  # особенно логирование паролей
 +  
 +  auth_verbose = yes
 +  auth_debug = yes
 +  auth_debug_passwords = yes
 +  mail_debug = yes
 +  
 +/etc/dovecot/conf.d/10-mail.conf
 +  # Указываем путь, по которому будет хранится пользовательская почта, также указываем формат(maildir)
 +  # %u - полное имя пользователя(с доменной частью: user@domail.local)
 +  # %n - короткое имя пользователя(без доменной части: user)
 +  # %d - доменная часть(domail.local), может быть пустой
 +  # %h - домашний каталог, тоже может быть пустым
 +    
 +  mail_location = maildir:/srv/vmail/%u
 +  
 +  # Два нижних параметра очень важны, они указывают дефолтные uid и gid пользователя, если эти данные
 +  # не удалось извлечь из AD. Эти данные используются для установки прав доступа к maildir пользователя.
 +  # Почтовику нужно знать хотя бы uid, иначе, если не указать эти данные, в логах будут ошибки такого типа:
 +  # "Couldn't drop privileges: User is missing UID (see mail_uid setting)". У пользователей в AD есть такие
 +  # поля: uidNumber и gidNumber, но они пусты по-умолчанию, их можно задать через ADSI Edit, но это не иммет
 +  # никакого смысла, ведь наши акаунты виртуальные. Соответственно создаем пользователя vmail(думаю, не надо 
 +  # показывать как это делать) и смотрим идентификатор этого пользователя и идентификатор его группы
 +  # (id vmail), затем вписываем их в параметры ниже. Теперь вся почта будет принадлежать пользователю vmail.
 +  # Поля, в которых Dovecot ищет нужную информацию задаются параметром user_attrs.  
 +  
 +  mail_uid = 1001
 +  mail_gid = 1001
 + 
 +/etc/dovecot/conf.d/15-lda.conf
 +  # Local Delivery Agent - через этот механизм postfix будет контактировать с dovecot.
 +  protocol lda {
 +    hostname = mail.domain.local
 +    mail_plugin_dir = /usr/lib/dovecot/modules
 +    postmaster_address = admin@domail.local
 +    sendmail_path = /usr/sbin/sendmail
 +  }
 +  
 +/etc/dovecot/conf.d/auth-ldap.conf.ext
 +  passdb {
 +    driver = ldap
 +    args = /etc/dovecot/dovecot-ldap.conf.ext
 +  }
 +  
 +  userdb {
 +    driver = ldap
 +    args = /etc/dovecot/dovecot-ldap.conf.ext
 +    
 +    # Тут мы снова задаем дефолтные значения для некоторых важных параметров
 +    default_fields = home=/srv/vmail/%u uid=1001 gid=1001
 +  }
 +  
 +/etc/dovecot/dovecot-ldap.conf.ext
 +  # Задаем адрес нашего DC, либо его имя. А еще лучше указать имя домена domain.local, тогда
 +  # соединение будет устанавливаться с любым доступным DC в домене(при условии корректно
 +  # функционирующего DNS). Но на этапе отладки лучше прописать IP-адрес.
 +  uris = ldap://1.1.1.1
 +  
 +  # Здесь прописываем путь к пользователю, с помощью которого будем подключаться к AD для получения
 +  # необходимой информации. В целях безопасности этот пользователь должен иметь права только на чтение.
 +  # Пользователя в AD нужно создать заранее. Вроде, здесь можно использовать формат reader@domail.local
 +  dn = cn=reader,ou=ServiceUsers,ou=AllUsers,dc=domail,dc=local
 +  
 +  # Пароль этого пользователя.
 +  dnpass = passw0rd
 +  
 +  # Использовать ли защищенное соединение? Мне в локальной сети это не очень нужно.
 +  tls = no
 +  
 +  # Подключаться к AD
 +  auth_bind = yes
 +  
 +  # Формат имени пользователя
 +  auth_bind_userdn = %n@domain.local
 +  
 +  # Версия протокола
 +  ldap_version = 3
 +  
 +  # Где искать пользователей, можно указать самый корень домена, тогда поиск будет выполняться во
 +  # всех подразделениях
 +  base = ou=AllUsers,dc=domain,dc=local
 +  
 +  deref = searching
 +  
 +  scope = subtree
 +  
 +  # Фильтрация пользователей. Также указываем по чему будем идентифицировать их. Если домен AD и
 +  # почтовый домен совпадают - проще всего по userPrincipalName, оно точно уникальное.
 +  # При желании можно с помощью побитовых фильтров отсечь заблокированных пользователей:
 +  # user_filter = (&(objectClass=person)(userPrincipalName=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
 +  # pass_filter = (&(ObjectClass=person)(userPrincipalName=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
 +  
 +  user_filter = (&(objectClass=person)(userPrincipalName=%u))
 +  pass_filter = (&(ObjectClass=person)(userPrincipalName=%u))
 +  
 +На этом все, теперь можно попробовать почтовым клиентом забрать почту. В качестве логина нужно указывать имя пользователя с доменной частью: user@domain.org. Если все прошло успешно, должен появиться maildir /srv/vmail/user@domain.org
 +<note important>
 +Не забудьте назначить владельцем каталога /srv/vmail пользователя vmail.
 +</note>
 +
 +===== Postfix =====
 +Конфиг Postfix привожу целиком, тут ничего особенно нового нет, поэтому буду комментировать только основные моменты, относящиеся к интеграции с AD и Dovecot.
 +
 +/etc/postfix/main.cf
 +  # Понятное дело, тут надо указать свой адрес интерфейса
 +  inet_interfaces = 192.168.0.10
 +  smtpd_banner = $myhostname ESMTP ready
 +  biff = no  
 +  append_dot_mydomain = no
 +  
 +  # Включаем TLS
 +  smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 +  smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 +  smtpd_use_tls=yes
 +  smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
 +  smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
 +  
 +  # Base parameters
 +  
 +  myhostname = mail.domail.local
 +  alias_maps = hash:/etc/aliases
 +  alias_database = hash:/etc/aliases
 +  myorigin = domail.local
 +  mydomain = domail.local
 +  mydestination = $myhostname, localhost.$mydomain, localhost
 +  relayhost =
 +  mynetworks = 127.0.0.0/8, 192.168.0.0/24
 +  recipient_delimiter = +
 +  inet_interfaces = all
 +  unknown_local_recipient_reject_code = 550
 +  debug_peer_level = 2
 +  debug_peer_list = 127.0.0.1, domail.local
 +  message_size_limit = 50000000
 +  
 +  # ---------------------- VIRTUAL DOMAINS START ----------------------
 +  virtual_transport = dovecot
 +  virtual_mailbox_base            = /srv/vmail
 +  virtual_mailbox_domains         = $mydomain
 +  
 +  # Указываем на конфиг, в котором описано как получить данные о почтовом яшике
 +  virtual_mailbox_maps            = ldap:$config_directory/virtual_mbox.conf
 +  
 +  # Указываем на конфиги, в которых описан способ получения данных о псевдонимах почтовых ящиков и о списках рассылки
 +  virtual_alias_maps              = ldap:$config_directory/virtual_alias.conf, ldap:$config_directory/virtual_mlist.conf
 +  
 +  virtual_minimum_uid             = 150
 +  
 +  # Идентификатор пользователя vmail
 +  virtual_uid_maps                = static:1001
 +  virtual_gid_maps                = static:1001
 +  virtual_transport               = dovecot
 +  dovecot_destination_recipient_limit = 1
 +  # ---------------------- VIRTUAL DOMAINS END ----------------------
 +  
 +  # Т.к. у меня почта локальная, я запретил отправку и прием почты на все домена, за исключением domain.local
 +  smtpd_recipient_restrictions = check_recipient_access hash:$config_directory/recipient_access, reject
 +  smtpd_sender_restrictions = check_sender_access hash:$config_directory/recipient_access, reject
 +
 +В этот файл, в конец добавялем описание транспорта Dovecot /etc/postfix/master.cf
 +  # Dovecot LDA
 +  dovecot   unix  -                               pipe
 +    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -d ${recipient}
 +    
 +/etc/postfix/virtual_mbox.conf
 +  # Адрес LDAP-сервера, или как туту имя
 +  server_host = ldap://domain.local
 +  
 +  # Где искать пользователей
 +  search_base = ou=AllUsers,dc=burut,dc=org
 +  version = 3
 +  
 +  # По какому полю идентифицируем пользователей
 +  query_filter = (&(objectclass=person)(userPrincipalName=%s))
 +  result_attribute = userPrincipalName
 +  
 +  result_format = %u/
 +  bind_dn = reader@domain.local
 +  bind_pw = passw0rd
 +  cache = no
 +
 +/etc/postfix/virtual_alias.conf
 +  version = 3
 +  server_host = ldap://burut.org
 +  search_base = ou=AllUsers,dc=burut,dc=org
 +  timeout = 3
 +  
 +  # Поле, в котором будем искать почтовые псевдонимы. Я использовал mail, т.к. оно доступно через редактирование свойств пользователя
 +  # стандартными средствами, но при этом получается можно задать всего один псевдоним. Но если хочется иметь возможность задавать несколько
 +  # псевдонимов, то можно использовать поле otherMailbox
 +  # query_filter = (otherMailbox=%s) 
 +  # но в этом случае придется его редактировать через ADSI edit, что не очень удобно.
 +  # Альтернативный вариант - добавить в main.conf в секцию virtual_alias_maps еще один аналогичный файл, только с otherMailbox вместо mail,
 +  # тогда псевдонимы будут просматриваться в обоих местах.
 +  
 +  query_filter = (mail=%s)
 +  
 +  result_filter = %s
 +  result_attribute = userPrincipalName
 +  special_result_attribute = member
 +  scope = sub
 +  bind = yes
 +  bind_dn = reader@burut.org
 +  bind_pw = readerpass
 +  
 +/etc/postfix/virtual_mlist.conf
 +  #debuglevel = 0
 +  version = 3
 +  server_host = ldap://domain.local
 +  search_base = ou=AllUsers,dc=domain,dc=local
 +  timeout = 3
 +  
 +  # Запрашиваем группы распространения(специальный тип групп в AD), отфильтровываем мы их с помощью sAMAccountType=268435457, посмотреть номер
 +  # любого объекта можно также через ADSI edit, у групп распространения он соответствует 268435457
 +  
 +  query_filter = (&(mail=%s)(sAMAccountType=268435457))
 +  
 +  result_filter = %s
 +  result_attribute = userPrincipalName
 +  special_result_attribute = member
 +  scope = sub
 +  bind = yes
 +  bind_dn = reader@domain.local
 +  bind_pw = passw0rd
 +
 +Чтобы создать группу рассылки, нужно создать группу распространения и задать в ее свойствах поле email, это и будет адресом группы. Имя самой группы может быть любым, это не имеет значение. Далее в группу надо включить нужных пользователей.
 +
 +Теперь создаем список разрешенных доменов (он у нас один).
 +<konsole>
 +# echo "domain.local OK" > /etc/postfix/recipient_access
 +
 +# postmap /etc/postfix/recipient_access
 +</konsole>
 +
 +На этом настройка закончена, при желании можно добавить smtp-авторизацию.
 +
 +===== Почтовый клиент =====
 +Настройка почтового клиента никаких особых хитростей не имеет, единственное что надо учитывать, что в качестве имени пользователя нужно указывать userPrincipalName, т.е. user@domain.local, но чтобы пользователи пользовались только "красивыми" адресами почты, в качестве адреса отправителя в настройках почтового клиента я указываю почтовый псевдоним пользователя, например iivanov@domain.local.
 +
 +Также, при условии, что у пользователей в профиле заполнено поле mail, в почтовом клиенте Mozilla Thunderbird можно настроить адресную книгу, для поиска по базе LDAP, тогда пользователи смогут вводить имена, либо фамилии в поле адресата и будет выполняться автоматический поиск их email-адресов.
 +
 +Для этого заходим в параметры учетной записи -> Составление и адресация -> Адресация, переключаем в положение "Использовать другой LDAP-сервер" и нажимаем кнопку "Изменить сервер каталогов..."
 +
 +{{ :mail_ad_1.png?nolink |}}
 +
 +В появившемся окне жмем "Добавить" и в новом окне заполняем параметры подключения к LDAP. Указываем контейнер в каком искать пользователей, имя пользователя с каким подключаться для поиска.
 +
 +{{ :mail_ad_2.png?nolink |}}
 +
 +Кликаем несколько раз ОК и в последнем окне выбираем наш каталог и еще раз кликаем ОК. Все, на этом настройка завершена.
 +
 +{{ :mail_ad_3.png?nolink |}}
 +===== Использованная литература =====
 +
 +  - [[http://www.opennet.ru|Форум opennet]]
 +  - [[http://support.microsoft.com/kb/269181/ru|Побитовые фильтры AD]]
 +  - [[http://wiki.autosys.tk/Linux%20FAQ.postfix-dovecot-и-Active-Directory.ashx|postfix-dovecot-и-Active-Directory]]
 + 
postfix_dovecot_active_directory.1367932434.txt.gz · Последнее изменение: 2022/03/25 17:04 (внешнее изменение)