ActiveDirectory/PostfixDovecot
Настройка 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
samba-tool user add -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/bin/procmail -a $DOMAIN -d $LOGNAME
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_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_CAfile = /var/lib/ssl/certs/postfix.pem
smtpd_tls_cert_file = /var/lib/ssl/certs/postfix.cert
smtpd_tls_key_file = /var/lib/ssl/private/postfix.key
smtpd_tls_security_level = encrypt
smtpd_use_tls = yes
master.cf
В файл master.cf необходимо добавить:
smtp      inet  n       -       -       -       -       smtpd
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 = ldap://test.alt:3268
bind_dn = cn=vmail,cn=users,dc=test,dc=alt
bind_pw = Pa$$word
search_base = dc=test,dc=alt
search_scope = subtree
query_filter = (&(|(mail=%s)(otherMailbox=%u@%d))(sAMAccountType=805306368))
result_attribute = mail
cache = no
ad_mail_groups.cf
debuglevel = 0
version = 3
server_host = ldap://test.alt
bind = yes
bind_dn = cn=vmail,cn=users,dc=test,dc=alt
bind_pw = Pa$$word
search_base = dc=test,dc=alt
timeout = 3
query_filter = (&(mail=%s)(sAMAccountType=268435456))
result_filter = %s
result_attribute = mail
special_result_attribute = member
scope = sub
ad_sender_login.cf
debuglevel = 0
version = 3
server_host = test.alt:3268
bind = yes
bind_dn = cn=vmail,cn=users,dc=test,dc=alt
bind_pw = Pa$$word
search_base = dc=test,dc=alt
query_filter = (&(|(mail=%s)(otherMailbox=%s))(sAMAccountType=805306368))
result_attribute = userPrincipalName
transport
test.alt        dovecot
Запуск postmap
postmap hash:/etc/postfix/transport
Тестируем работу
Проверка пользователя почты 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
Изменение файлов
Создаём файл /etc/dovecot/dovecot-ldap.conf.ext
hosts            = test.alt:3268
ldap_version     = 3
auth_bind        = yes
auth_bind_userdn = %Lu
dn               = cn=vmail,cn=Users,dc=test,dc=alt
dnpass           = Pa$$word
base             = cn=Users,dc=test,dc=alt
scope            = subtree
deref            = finding
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu)))
user_attrs  = =uid=8
pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu))
pass_attrs = userPrincipalName=user
В каталоге /etc/dovecot/conf.d изменяем файлы для домена test.alt:
10-auth.conf
auth_username_format = %Lu
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
  }
}
Перезапуск службы
Перезапускаем службу dovecot и включаем её в автозапуск:
chkconfig dovecot on service dovecot restart
Отладка
Внимание! Журнал работы Postfix и Dovecot ведётся в файле /var/log/maillog
Для 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