6 мая 2009 г.

Postfix - Active Directory - Dovecot

И так было решено связать Postfix с AD и Dovecot с AD. Я не буду останавливаться на описании сборке дистрибутивов, скажу только что нужно собрать из с поддержкой LDAP.
rpm пакеты Postfix-a для RH Enterprise Linux с поддержкой LDAP, pcre, mysql, SMTP AUTH (SASL) and TLS есть тут
Postfix:
Все пользователи у нас в присутствуют в AD и вся почта у нас будет принадлежать одному пользователю vmail(uid=800,gid=800) в первую очередь создаем его с домашней директорией /home/vmail
Теперь в конфиге postfix-a main.cf добавляем
virtual_mailbox_domains = $mydomain 
virtual_mailbox_base = /home/vmail/ 
virtual_uid_maps = static:800 
virtual_gid_maps = static:800 
virtual_transport = virtual 
virtual_create_maildirsize = yes 
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf 
virtual_alias_maps = ldap:/etc/postfix/ldap-groups.cf 
virtual_mailbox_limit_override = yes 
virtual_mailbox_limit_maps = hash:/etc/postfix/vquota


из переменной mydestination нужно удалить домен который прописан в

mydomain, иначе будет выдавать ошибку при отправке письма

Recipient address rejected: User unknown in virtual mailbox table


Теперь о ldap-users.cf:



server_host = ldap://dc1.dn.local 
ldap://dc2.dn.local 
search_base = dc=dn,dc=local 
version = 3 
query_filter = (&(objectclass=person)(mail=%s))(!(userAccountControl=514))) 
result_attribute = sAMAccountName 
result_format = %s/Maildir/ 
bind = yes 
bind_dn = postfix_ldap@dn.local 
bind_pw = password


Фильтр выбирает пользователя если у него заполнено поле Эл. почта и учетная запись не отключена, а также указываем что домашняя директория для этого пользователя sAMAccountName/Maildir


Проверим как это работает, выполним:


postmap -q test@mail.domain ldap:/etc/postfix/ldap-users.cf


если все нормально получим ответ:


Tets-User/Maildir/


Я решил использовать sAMAccountName для определения домашнего каталога пользователя, так как e-mail у пользователя может быть не один а почту нужно складывать в один каталог. Но об этом попозже.


ldap-groups.cf:


server_host = ldap://dc1.dn.local 
ldap://dc2.dn.local 
search_base = dc=dn,dc=local 
version = 3 
query_filter = (&(objectclass=group)(mail=%s)) 
leaf_result_attribute = mail 
result_attribute = mail 
special_result_attribute = member 
bind = yes 
bind_dn = postfix_ldap@dn.local 
bind_pw = password


Проверяем




postmap -q test-gr@mail.domain ldap:/etc/postfix/ldap-users.cf


и получим в ответ эл. адреса всех пользователей, кто является членом этой группы.


О квотах на почтовые ящики есть хорошая статья


Dovecot:





dovecot.conf


protocols = pop3 
listen = * 
ssl_disable = yes 
disable_plaintext_auth=no 
mail_location = maildir:~/Maildir 
mail_access_groups = vmail 
protocol pop3 { 
pop3_uidl_format = %08Xu%08Xv 
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh 
} 
auth_cache_size = 1024 
auth_username_format = %Lu 
mail_uid=800 
mail_gid=800 
auth_ntlm_use_winbind = yes 
auth_winbind_helper_path = /usr/bin/ntlm_auth 
auth default { 
mechanisms = plain login ntlm 
passdb pam { 
args = dovecot 
} 
userdb ldap { 
args = /etc/dovecot-ldap.cf 
} 
}


О PAM Authentication отлично написано тут


dovecot-ldap.cf


uris = ldap://dn.local 
base = dc=dn,DC=local 
dn = CN=postfix_ldap,OU=Account,DC=dn,DC=local 
dnpass=password 
ldap_version = 3 
auth_bind = yes 
deref = never 
scope=subtree 
user_filter = (&(objectClass=Person)(sAMAccountName=%n)(!(userAccountControl=514))) 
user_attrs = sAMAccountName=home=/home/vmail/%$


user_attrs – мы указали домашний каталог аналогично как у postfix.


Так сложилось что у меня 2-ва равноправных внешних домена, и почту доставлять для второго тоже нужно. Адрес второго домена мы пропишем в атрибут otherMailbox . Далее мы добавим в main.cf к переменной virtual_mailbox_domains еще один домен:


virtual_mailbox_domains = $mydomain, mail.doman2.


В /etc/postfix/ldap-users.cf меняем query_filter на


query_filter = (&(objectclass=person)(|(mail=%s)(otherMailbox=%s))(!(userAccountControl=514))) 


Вот и все.


Как сделать чтобы второй домен автоматом прописывался в otherMailbox читаем тут.

----------------------------------
P.S. Если Вам понравилась статья, или статья была Вам интересна – кликните на рекламе :)

4 комментария:

  1. Спасибо, очень полезная статья. С почтовиками имел дело и раньше, но здорово помогло именно с постфиксом.

    >> Как сделать чтобы второй домен автоматом прописывался в otherMailbox читаем тут.

    Дмитрий, а где именно ? :)

    ОтветитьУдалить
  2. присоединяюсь к вопросу предыдущего оратора.

    а также не подскаже почему при прочих равных с вами(только нет dovecot, но есть внутренний exch2007), когда пишу сообщение юзеру на оба ящика в двух обслуживаемых доменах - само сообщение доходит, но ошибка
    550 550 5.1.1 Recipient address rejected: User unknown (state 14).

    все равно приходит отправителю(только при отправке сообщения на 2ой домен)

    ОтветитьУдалить
  3. Дмитрий, а где именно ? :) тут http://dimsan.blogspot.com/2009/05/ilm-2007.html. :) Но можно скриптом...

    ОтветитьУдалить
  4. Статья - гомно!!! Если уж беретесь писать для новичков, то расписывайте как полагается. А если эта статья для опытных пользователей, то... им она и не потребуется!!!

    ОтветитьУдалить