postfix_dovecot_active_directory
Различия
Показаны различия между двумя версиями страницы.
— | postfix_dovecot_active_directory [2022/03/25 14:00] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Почта Postfix + Dovecot с интеграцией в MS Active Directory ====== | ||
+ | ===== Введение ===== | ||
+ | В данной статье я хочу структурировать клочки информации по теме, которые мне удалось найти в интернете. Данная тема не новая, но внятного-понятного howto, с пояснениями и т.д. найти не удалось, | ||
+ | Итак, в данном мануале будет рассмотрен вопрос разворачивания внутренней корпоративной почты, т.е. почта которая работает только в пределах локальной сети, для внутренних нужд организации, | ||
+ | Для чего все это нужно? Ну, во-первых, | ||
+ | |||
+ | Итак, имеем домен под управлением Windows Server 2012, режим леса и режим домена - 2012. Почтовый сервер - GNU/Debian 7.0 (Postfix 2.9, Dovecot 2.1). | ||
+ | |||
+ | ===== Установка ===== | ||
+ | |||
+ | Устанавливаем все необходимое | ||
+ | < | ||
+ | # apt-get install dovecot-common dovecot-ldap dovecot-imapd dovecot-pop3d postfix postfix-ldap | ||
+ | </ | ||
+ | |||
+ | ===== 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. | ||
+ | # Поля, в которых Dovecot ищет нужную информацию задаются параметром user_attrs. | ||
+ | | ||
+ | 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 = (& | ||
+ | | ||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | На этом настройка закончена, | ||
+ | |||
+ | ===== Почтовый клиент ===== | ||
+ | Настройка почтового клиента никаких особых хитростей не имеет, единственное что надо учитывать, | ||
+ | |||
+ | Также, при условии, | ||
+ | |||
+ | Для этого заходим в параметры учетной записи -> Составление и адресация -> Адресация, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | В появившемся окне жмем " | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Кликаем несколько раз ОК и в последнем окне выбираем наш каталог и еще раз кликаем ОК. Все, на этом настройка завершена. | ||
+ | |||
+ | {{ : | ||
+ | ===== Использованная литература ===== | ||
+ | |||
+ | - [[http:// | ||
+ | - [[http:// | ||
+ | - [[http:// | ||
+ |