Назад | Перейти на главную страницу

Множественная аутентификация Postfix / Dovecot в Active Directory

Итак, у меня есть рабочий почтовый сервер, который аутентифицируется по активному каталогу. Все работает нормально, пока я не попытаюсь добавить дополнительный сервер аутентификации.

Информация о сервере:

Server OS: CentOS 7.1.1503
Postfix version: 2.10.1
Dovecot version: 2.2.10

На данный момент моя конфигурация выглядит так:

Файлы конфигурации Postfix:

/etc/postfix/main.cf

virtual_mailbox_base = /homes/vmail/homes 
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users-primary.cf 
virtual_alias_maps = ldap:/etc/postfix/ldap-groups-primary.cf
virtual_uid_maps = static:989 
virtual_gid_maps = static:987

ldap-users-primary.cf

server_host = 192.168.250.200
search_base = cn=Users, dc=domain, dc=local
version = 3
query_filter = (&(objectclass=person)(mail=%s))
result_attribute = samaccountname
result_format = %s/
bind = yes
bind_dn = user@domain.local
bind_pw = password

ldap-groups-primary.cf

server_host = 192.168.250.200
search_base = ou=Email_Groups, dc=domain,dc=local
version = 3
query_filter = (&(objectclass=group)(mail=%s))
leaf_result_attribute = mail
special_result_attribute = member
bind = yes
bind_dn = user@domain.local
bind_pw = password
start_tls = no

Файлы конфигурации Dovecot:

/etc/dovecot/conf.d/10-auth.conf

passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-primary.conf
}

userdb {
driver = static
args = uid=989 gid=987 home=/homes/vmail/homes/%u
}

dovecot-ldap-primary.conf

hosts = 192.168.250.200
base = cn=Users, dc=domain, dc=local
ldap_version = 3
auth_bind = yes
auth_bind_userdn = domain\%u

Все вышеперечисленные настройки работают нормально и не вызывают никаких проблем. Пока я не попробую добавить дополнительный контроллер домена ..

Для этого я создал новые файлы конфигурации: ldap-users-secondary.cf, ldap-groups-secondary.cf, dovecot-ldap-secondary.conf.

Единственное, что отличается в этих файлах, - это IP-адрес сервера (он просто указывает на вторичный контроллер домена). Если я использую только эти файлы, все работает нормально. Но если я изменю /etc/postfix/main.cf следующим образом:

virtual_mailbox_base = /homes/vmail/homes 
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users-primary.cf, ldap:/etc/postfix/ldap-users-secondary.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-groups-primary.cf, ldap:/etc/postfix/ldap-groups-secondary.cf
virtual_uid_maps = static:989 
virtual_gid_maps = static:987

И /etc/dovecot/conf.d/10-auth.conf

passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-primary.conf
}

passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-secondary.conf
}

userdb {
driver = static
args = uid=989 gid=987 home=/homes/vmail/homes/%u
}

Он просто перестает работать и начинает выдавать такие ошибки:

NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 451 4.3.0 <user@domain.local>: Temporary lookup failure;

Кто-нибудь может мне с этим помочь?

Оказывается, и Postfix, и Dovecot позволяют переключаться при отказе с несколькими хостами ldap в конфигурациях ldap. Однако, насколько я могу судить, конфигурации должны быть одинаковыми на всех серверах LDAP. По крайней мере, для постфикса.

В Postfix это НЕ работает надежно:

virtual_mailbox_maps = ldap:/etc/postfix/ad-users-dc-1.cf, ldap:/etc/postfix/ad-users-dc-2.cf

Это действительно работает. В main.cf:

virtual_mailbox_maps = ldap:/etc/postfix/ad-users.cf

... и в файле ad-users.cf:

server_host     = 192.168.44.75,192.168.44.76
server_port     = 389
version         = ...
bind            = ...
start_tls       = ...
bind_dn         = CN=...
bind_pw         = ...
... etc

В Dovecot это работает. В вашем целевом конфигурационном файле ldap:

hosts   = 192.168.44.75:389, 192.168.44.76:389

Решение было довольно простым .. Так же, как @sam_pan_mariusz предложил вместо IP-адреса, я поставил DNS-имя. Провел какое-то тестирование и все работает как надо.