Показаны различия между двумя версиями страницы.
postfix_dovecot_active_directory [2013/05/08 16:49] metallic [Postfix] |
postfix_dovecot_active_directory [2022/03/25 17:00] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Почта Postfix + Dovecot с интеграцией в MS Active Directory ====== | ||
- | ===== Введение ===== | ||
- | В данной статье я хочу структурировать клочки информации по теме, которые мне удалось найти в интернете. Данная тема не новая, но внятного-понятно howto, с пояснениями и т.д. найти не удалось, | ||
- | Итак, в данном мануале будет рассмотрен вопрос разворачивания внутренней корпоративной почты, т.е. почта которая работает только в пределах локальной сети, для внутренних нужд организации, | ||
- | Для чего все это нужно? Ну, во-первых, | ||
- | |||
- | Итак, имеем домен под управлением Windows Server 2012, режим леса и режим домена - 2012. Почтовый сервер - GNU/Debian 7.0 (Postfix 2.9, Dovecot 2.1). | ||
- | |||
- | ===== Dovecot ===== | ||
- | Начнем с Dovecot. Конфиг у него достаточно объемный, | ||
- | |||
- | / | ||
- | # Включаем plaintext аунтификацию, | ||
- | # А если нужна безопасность, | ||
- | disable_plaintext_auth = no | ||
- | | ||
- | / | ||
- | # Указываем куда класть дополнительные логи | ||
- | | ||
- | debug_log_path = / | ||
- | | ||
- | # Ну и включаем всевозможные логи, помогут нам при отладке, | ||
- | # особенно логирование паролей | ||
- | | ||
- | auth_verbose = yes | ||
- | auth_debug = yes | ||
- | auth_debug_passwords = yes | ||
- | mail_debug = yes | ||
- | | ||
- | / | ||
- | # Указываем путь, по которому будет хранится пользовательская почта, также указываем формат(maildir) | ||
- | # %u - полное имя пользователя(с доменной частью: | ||
- | # %n - короткое имя пользователя(без доменной части: user) | ||
- | # %d - доменная часть(domail.local), | ||
- | # %h - домашний каталог, | ||
- | | ||
- | mail_location = maildir:/ | ||
- | | ||
- | # Два нижних параметра очень важны, они указывают дефолтные uid и gid пользователя, | ||
- | # не удалось извлечь из AD. Эти данные используются для установки прав доступа к maildir пользователя. | ||
- | # Почтовику нужно знать хотя бы uid, иначе, если не указать эти данные, | ||
- | # " | ||
- | # поля: uidNumber и gidNumber, но они пусты по-умолчанию, | ||
- | # никакого смысла, | ||
- | # показывать как это делать) и смотрим идентификатор этого пользователя и идентификатор его группы | ||
- | # (id vmail), затем вписываем их в параметры ниже. Теперь вся почта будет принадлежать пользователю vmail. | ||
- | | ||
- | mail_uid = 1001 | ||
- | mail_gid = 1001 | ||
- | |||
- | / | ||
- | # Local Delivery Agent - через этот механизм postfix будет контактировать с dovecot. | ||
- | protocol lda { | ||
- | hostname = mail.domain.local | ||
- | mail_plugin_dir = / | ||
- | postmaster_address = admin@domail.local | ||
- | sendmail_path = / | ||
- | } | ||
- | | ||
- | / | ||
- | passdb { | ||
- | driver = ldap | ||
- | args = / | ||
- | } | ||
- | | ||
- | userdb { | ||
- | driver = ldap | ||
- | args = / | ||
- | | ||
- | # Тут мы снова задаем дефолтные значения для некоторых важных параметров | ||
- | default_fields = home=/ | ||
- | } | ||
- | | ||
- | / | ||
- | # Задаем адрес нашего DC, либо его имя. А еще лучше указать имя домена domain.local, | ||
- | # соединение будет устанавливаться с любым доступным DC в домене(при условии корректно | ||
- | # функционирующего DNS). Но на этапе отладки лучше прописать IP-адрес. | ||
- | uris = ldap:// | ||
- | | ||
- | # Здесь прописываем путь к пользователю, | ||
- | # необходимой информации. В целях безопасности этот пользователь должен иметь права только на чтение. | ||
- | # Пользователя в AD нужно создать заранее. Вроде, здесь можно использовать формат reader@domail.local | ||
- | dn = cn=reader, | ||
- | | ||
- | # Пароль этого пользователя. | ||
- | dnpass = passw0rd | ||
- | | ||
- | # Использовать ли защищенное соединение? | ||
- | tls = no | ||
- | | ||
- | # Подключаться к AD | ||
- | auth_bind = yes | ||
- | | ||
- | # Формат имени пользователя | ||
- | auth_bind_userdn = %n@domain.local | ||
- | | ||
- | # Версия протокола | ||
- | ldap_version = 3 | ||
- | | ||
- | # Где искать пользователей, | ||
- | # всех подразделениях | ||
- | base = ou=AllUsers, | ||
- | | ||
- | deref = searching | ||
- | | ||
- | scope = subtree | ||
- | | ||
- | # Фильтрация пользователей. Также указываем по чему будем идентифицировать их. Если домен AD и | ||
- | # почтовый домен совпадают - проще всего по userPrincipalName, | ||
- | user_filter = (& | ||
- | pass_filter = (& | ||
- | | ||
- | На этом все, теперь можно попробовать почтовым клиентом забрать почту. В качестве логина нужно указывать имя пользователя с доменной частью: | ||
- | <note important> | ||
- | Не забудьте назначить владельцем каталога /srv/vmail пользователя vmail. | ||
- | </ | ||
- | |||
- | ===== Postfix ===== | ||
- | Конфиг Postfix привожу целиком, | ||
- | |||
- | / | ||
- | # Понятное дело, тут надо указать свой адрес интерфейса | ||
- | inet_interfaces = 192.168.0.10 | ||
- | smtpd_banner = $myhostname ESMTP ready | ||
- | biff = no | ||
- | append_dot_mydomain = no | ||
- | | ||
- | # Включаем TLS | ||
- | smtpd_tls_cert_file=/ | ||
- | smtpd_tls_key_file=/ | ||
- | smtpd_use_tls=yes | ||
- | smtpd_tls_session_cache_database = btree: | ||
- | smtp_tls_session_cache_database = btree: | ||
- | | ||
- | # Base parameters | ||
- | | ||
- | myhostname = mail.domail.local | ||
- | alias_maps = hash:/ | ||
- | alias_database = hash:/ | ||
- | myorigin = domail.local | ||
- | mydomain = domail.local | ||
- | mydestination = $myhostname, | ||
- | relayhost = | ||
- | mynetworks = 127.0.0.0/ | ||
- | 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 | ||
- | virtual_mailbox_domains | ||
- | | ||
- | # Указываем на конфиг, | ||
- | virtual_mailbox_maps | ||
- | | ||
- | # Указываем на конфиги, | ||
- | virtual_alias_maps | ||
- | | ||
- | virtual_minimum_uid | ||
- | | ||
- | # Идентификатор пользователя vmail | ||
- | virtual_uid_maps | ||
- | virtual_gid_maps | ||
- | virtual_transport | ||
- | dovecot_destination_recipient_limit = 1 | ||
- | # ---------------------- VIRTUAL DOMAINS END ---------------------- | ||
- | | ||
- | # Т.к. у меня почта локальная, | ||
- | smtpd_recipient_restrictions = check_recipient_access hash: | ||
- | smtpd_sender_restrictions = check_sender_access hash: | ||
- | |||
- | В этот файл, в конец добавялем описание транспорта Dovecot / | ||
- | # Dovecot LDA | ||
- | dovecot | ||
- | flags=DRhu user=vmail: | ||
- | | ||
- | / | ||
- | # Адрес LDAP-сервера, | ||
- | server_host = ldap:// | ||
- | | ||
- | # Где искать пользователей | ||
- | search_base = ou=AllUsers, | ||
- | version = 3 | ||
- | | ||
- | # По какому полю идентифицируем пользователей | ||
- | query_filter = (& | ||
- | result_attribute = userPrincipalName | ||
- | | ||
- | result_format = %u/ | ||
- | bind_dn = reader@domain.local | ||
- | bind_pw = passw0rd | ||
- | cache = no | ||
- | |||
- | / | ||
- | version = 3 | ||
- | server_host = ldap:// | ||
- | search_base = ou=AllUsers, | ||
- | timeout = 3 | ||
- | | ||
- | # Поле, в котором будем искать почтовые псевдонимы. Я использовал mail, т.к. оно доступно через редактирование свойств пользователя | ||
- | # стандартными средствами, | ||
- | # псевдонимов, | ||
- | # 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 | ||
- | | ||
- | / | ||
- | #debuglevel = 0 | ||
- | version = 3 | ||
- | server_host = ldap:// | ||
- | search_base = ou=AllUsers, | ||
- | timeout = 3 | ||
- | | ||
- | # Запрашиваем группы распространения(специальный тип групп в AD), отфильтровываем мы их с помощью sAMAccountType=268435457, | ||
- | # любого объекта можно также через ADSI edit, у групп распространения он соответствует 268435457 | ||
- | | ||
- | query_filter = (& | ||
- | | ||
- | result_filter = %s | ||
- | result_attribute = userPrincipalName | ||
- | special_result_attribute = member | ||
- | scope = sub | ||
- | bind = yes | ||
- | bind_dn = reader@domain.local | ||
- | bind_pw = passw0rd | ||
- | |||
- | Чтобы создать группу рассылки, | ||
- | |||
- | Теперь создаем список разрешенных доменов (он у нас один). | ||
- | < | ||
- | # echo " | ||
- | # postmap / | ||
- | </ | ||
- | |||
- |