Postfix - Active Directory - Dovecot
6 мая 2009 г.И так было решено связать 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 = $mydomainvirtual_mailbox_base = /home/vmail/virtual_uid_maps = static:800virtual_gid_maps = static:800virtual_transport = virtualvirtual_create_maildirsize = yesvirtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cfvirtual_alias_maps = ldap:/etc/postfix/ldap-groups.cfvirtual_mailbox_limit_override = yesvirtual_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 = 3query_filter = (&(objectclass=person)(mail=%s))(!(userAccountControl=514)))result_attribute = sAMAccountNameresult_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 = 3query_filter = (&(objectclass=group)(mail=%s))leaf_result_attribute = mailresult_attribute = mailspecial_result_attribute = memberbind = 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 = pop3listen = *ssl_disable = yesdisable_plaintext_auth=nomail_location = maildir:~/Maildirmail_access_groups = vmailprotocol pop3 {pop3_uidl_format = %08Xu%08Xvpop3_client_workarounds = outlook-no-nuls oe-ns-eoh}auth_cache_size = 1024auth_username_format = %Lumail_uid=800mail_gid=800auth_ntlm_use_winbind = yesauth_winbind_helper_path = /usr/bin/ntlm_authauth default {mechanisms = plain login ntlmpassdb pam {args = dovecot}userdb ldap {args = /etc/dovecot-ldap.cf}}
О PAM Authentication отлично написано тут
dovecot-ldap.cf
uris = ldap://dn.localbase = dc=dn,DC=localdn = CN=postfix_ldap,OU=Account,DC=dn,DC=localdnpass=passwordldap_version = 3auth_bind = yesderef = neverscope=subtreeuser_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 читаем тут.
----------------------------------
4 коммент.:
- CTpaHHoe комментирует...
-
Спасибо, очень полезная статья. С почтовиками имел дело и раньше, но здорово помогло именно с постфиксом.
>> Как сделать чтобы второй домен автоматом прописывался в otherMailbox читаем тут.
Дмитрий, а где именно ? :) - 31 мая 2010 г. в 19:46
- Enkil комментирует...
-
присоединяюсь к вопросу предыдущего оратора.
а также не подскаже почему при прочих равных с вами(только нет dovecot, но есть внутренний exch2007), когда пишу сообщение юзеру на оба ящика в двух обслуживаемых доменах - само сообщение доходит, но ошибка
550 550 5.1.1 Recipient address rejected: User unknown (state 14).
все равно приходит отправителю(только при отправке сообщения на 2ой домен) - 20 июля 2010 г. в 01:14
- Admin комментирует...
-
Дмитрий, а где именно ? :) тут http://dimsan.blogspot.com/2009/05/ilm-2007.html. :) Но можно скриптом...
- 15 октября 2010 г. в 13:31
- Анонимный комментирует...
-
Статья - гомно!!! Если уж беретесь писать для новичков, то расписывайте как полагается. А если эта статья для опытных пользователей, то... им она и не потребуется!!!
- 3 июня 2014 г. в 04:18