ActiveDirectory/PostfixDovecot
Материал из ALT Linux Wiki
Настройка Postfix и Dovecot для аутентификации пользователей в Active Directory.
Содержание |
Задача
Настроить почтовую систему на базе Postfix и Dovecot для работы с базой пользователей Active Directory.
Параметр | Значение |
---|---|
Имя домена | test.alt |
Размещение почты | /var/mail/<имя домена>/<имя пользователя> (формат maildir) |
Доступ на чтение почты | IMAP (порт 993), SSL |
Доступ на отправку почты | SMTP (порт 465), SSL/STARTTLS |
Данные аутентификации: | Полный email с доменом (например, petrov@test.alt) или имя пользователя |
Журнал работы | /var/log/maillog |
Принятые ограничения
- В текущей конфигурации не рассматриваются многодоменные конфигурации;
- Доступ к службам реализован только с помощью SSL по соображениям безопасности;
- Уровень домена и леса Active Directory должен быть не выше Windows 2008 R2;
- В данной версии инструкции не рассматривается конфигурация для подключения Microsoft Exchange на основе MAPI или EWS;
- Для подключения в данной конфигурации можно использовать Microsoft Outlook версии, начиная с 2003 в режиме подключения почты по IMAP;
- Внимание! Доступ к серверу LDAP осуществляется по протоколу ldap без шифрования. Для SambaDC отключите обязательный ldaps в /etc/samba/smb.conf в секции [global]:
ldap server require strong auth = no
Подготовка
Создание пользователя в Active Directory
Создаётся пользователь vmail с не истекающей учётной записью:
samba-tool user create -W Users vmail samba-tool user setexpiry vmail --noexpiry
Настройка Postfix
apt-get install postfix-ldap
Изменение файлов
В каталоге /etc/postfix изменяем файлы для домена test.alt:
main.cf
# Global Postfix configuration file. This file lists only a small subset # of all parameters. For the syntax, and for a complete parameter list, # see the postconf(5) manual page. For a commented and more complete # version of this file see /etc/postfix/main.cf.dist mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT" inet_protocols = ipv4 # Mappings virtual_mailbox_domains = test.alt virtual_mailbox_maps = ldap:/etc/postfix/ad_local_recipients.cf virtual_alias_maps = ldap:/etc/postfix/ad_mail_groups.cf virtual_transport = dovecot # SSL/TLS smtpd_use_tls = yes smtpd_tls_security_level = encrypt #smtpd_tls_security_level = may smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = test.alt smtpd_sasl_path = private/auth smtpd_sasl_type = dovecot smtpd_sender_login_maps = ldap:/etc/postfix/ad_sender_login.cf smtpd_tls_auth_only = yes smtpd_tls_cert_file = /var/lib/ssl/certs/dovecot.cert smtpd_tls_key_file = /var/lib/ssl/private/dovecot.key smtpd_tls_CAfile = /var/lib/ssl/certs/dovecot.pem smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit_sasl_authenticated, reject smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch
master.cf
В файл master.cf необходимо добавить:
dovecot unix - n n - - pipe flags=DRhu user=mail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient} smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
ad_local_recipients.cf
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt scope = sub query_filter = (&(|(mail=%s)(otherMailbox=%u@%d))(sAMAccountType=805306368)) result_filter = %s result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
ad_mail_groups.cf
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt timeout = 3 scope = sub query_filter = (&(mail=%s)(sAMAccountType=268435456)) result_filter = %s result_attribute = mail special_result_attribute = member bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
ad_sender_login.cf
version = 3 server_host = test.alt:389 search_base = dc=test,dc=alt scope = sub query_filter = (&(objectClass=user)(|(sAMAccountName=%s)(mail=%s))) result_attribute = mail bind = yes bind_dn = cn=vmail,cn=users,dc=test,dc=alt bind_pw = Pa$$word
Тестируем работу
Проверка конфигурации Postfix (не должно быть никаких сообщений:
# postconf >/dev/null
Проверка пользователя почты petrov:
# postmap -q petrov@test.alt ldap:/etc/postfix/ad_local_recipients.cf petrov@test.alt
Проверка входа:
# postmap -q petrov@test.alt ldap:/etc/postfix/ad_sender_login.cf petrov@test.alt
Проверка общего адреса e-mail:
# samba-tool group add --mail-address=sales@test.alt Sales Added group Sales # samba-tool group addmembers Sales ivanov,petrov Added members to group Sales # postmap -q sales@test.alt ldap:/etc/postfix/ad_mail_groups.cf sales@test.alt,ivanov@test.alt,petrov@test.alt
Перезапуск службы
Перезапускаем службу postfix:
service postfix restart
Настройка Dovecot
Устанавливаем Dovecot:
apt-get install dovecot
Изменение файлов
dovecot-ldap.conf.ext
Создаём файл /etc/dovecot/dovecot-ldap.conf.ext
hosts = test.alt:3268 ldap_version = 3 auth_bind = yes dn = cn=vmail,cn=Users,dc=test,dc=alt dnpass = Pa$$word base = cn=Users,dc=test,dc=alt scope = subtree deref = never user_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) user_attrs = =uid=8,gid=12,mail=user pass_filter = (&(objectClass=user)(|(mail=%Lu)(sAMAccountName=%Lu))) pass_attrs = mail=user
В каталоге /etc/dovecot/conf.d изменяем файлы для домена test.alt:
10-auth.conf
#auth_username_format = %Lu #auth_gssapi_hostname = "$ALL" #auth_krb5_keytab = /etc/dovecot/dovecot.keytab #auth_use_winbind = no #auth_winbind_helper_path = /usr/bin/ntlm_auth #auth_failure_delay = 2 secs auth_mechanisms = plain !include auth-ldap.conf.ext
10-mail.conf
mail_location = maildir:/var/mail/%d/%n:INBOX=/var/mail/%d/%n/Inbox mail_uid = mail mail_gid = mail first_valid_uid = 5 first_valid_gid = 5
10-master.conf
service imap-login { inet_listener imap { port = 0 } inet_listener imaps { } } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 0 } } service lmtp { unix_listener lmtp { } } service imap { } service pop3 { } service auth { unix_listener auth-userdb { } unix_listener /var/spool/postfix/private/auth { mode = 0600 user = postfix group = postfix } } service auth-worker { } service dict { unix_listener dict { } }
15-lda.conf
protocol lda { hostname = test.alt postmaster_address = administrator@test.alt }
15-mailboxes.conf
namespace inbox { mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Trash { auto = subscribe special_use = \Trash } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } }
Проверка конфигурации
Выполните
doveconf >/dev/null
Если конфигурация правильная, ничего не должно вывестись.
Перезапуск службы
Перезапускаем службу dovecot и включаем её в автозапуск:
chkconfig dovecot on service dovecot restart
Безопасность
В связи с тем, что конфигурационные файлы содержат пароль пользователя LDAP, их необходимо сделать недоступным для чтения прочим пользователям:
chown dovecot:root /etc/dovecot/dovecot-ldap.conf.ext chmod 0640 /etc/dovecot/dovecot-ldap.conf.ext chown root:postfix /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf chmod 0640 /etc/postfix/ad_local_recipients.cf /etc/postfix/ad_mail_groups.cf /etc/postfix/ad_sender_login.cf
Перезапустите службы:
service dovecot restart service postfix restart
Отладка
Для Postfix в файле /etc/postfix/master.cf добавьте параметр -v — вместо
smtps inet n - n - - smtpd
должно быть
smtps inet n - n - - smtpd -v
Для Dovecot добавьте в /etc/dovecot/conf.d/10-logging.conf
auth_verbose = yes auth_debug = yes mail_debug = yes