вторник, 29 марта 2011 г.

Почта на Debian с доменными пользователими, или как мы подружили postfix, dovecot и Active Directory: Часть 1 - postfix

Доброе время суток, уважаемый Читатель!

Сегодня я расскажу, как мы подружили почту на Linux с Active Directory.

Собственно, как и все в Linux, делать это можно по-разному. В нашем же случае принимает и отправляет, а так же фильтрует почту postfix, по папкам пользователей ее раскладывает dovecot lda, а собственно пользователи забирают ее с сервера по imap, доступ по которому любезно предоставляет нам уже упомянутый dovecot.

А теперь обо всем по порядку:
Начнем с Postfix, но не будем переписывать уже стопицоттысячраз описанный мануал по установке и настройке. Скажу лишь, что postfix фильтрует входящую почту как своими средствами (проверка на различные аспекты соответствия письма и сервера отправителя rfc), а так же прогоняет ее через amavisd, который в свою очередь использует spamassassin для категоризации писем на хорошие и спамные, и проверяет на вирусы. Подробнее тонкости фильтрации писем я опишу в одном из следующих постов.

В этом пункте стоит обратить внимание Читателя на то, как postfix связан c Active Directory, и, главное, зачем.

Как зачем? Конечно же, для доставки почты конечному получателю! В нашей системе есть обычные пользователи, алиасы почтовых ящиков и списки рассылки. И всем этим добром мы командуем через оснастку управления Active Directory Users and computers. А Postfix, использую LDAP, проверяет, есть ли пользователь, которому написано письмо, или же письмо надо отправить кому-то другому, на чей алиас пришла писулька, а может и вовсе эта писулька пришла целой группе юзеров?

Заглянем в наш /etc/postfix/main.cf:
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf
virtual_alias_maps = ldap:/etc/postfix/ldap/redirect.cf,ldap:/etc/postfix/ldap/aliases.cf,ldap:/etc/postfix/ldap/mailgroups.cf,
 

Вон оно что, Михалыч! А что в этих файлах? В /etc/postfix/ldap/local_recipients.cf postfix смотрит, какому пользователю отправить письмо, в /etc/postfix/ldap/redirect.cf, как можно догадаться, адрес получателя проверяется на соответствие редиректам, в /etc/postfix/ldap/aliases.cf - алиасам, а в /etc/postfix/ldap/mailgroups.cf спискам рассылки.

mail:/etc/postfix/ldap# cat local_recipients.cf
debuglevel = 0
version = 3
server_host = ldap://ldap_server_ip
search_base = ou=Users,dc=domain,dc=local
query_filter = (userPrincipalName=%s)
result_attribute = sAMAccountName
result_format = %u/
bind_dn = ldap-bind@domain.local
bind_pw = p@$$word
cache = no

mail:/etc/postfix/ldap# cat aliases.cf
debuglevel = 0
version = 3
server_host = ldap://ldap_server_ip
search_base = ou=Users,dc=domain,dc=local
timeout = 3
query_filter = (otherMailbox=%s)
result_filter = %s
result_attribute = userPrincipalName
special_result_attribute = member
scope = sub
bind = yes
bind_dn = ldap-bind@domain.local
bind_pw = p@$$word

mail:/etc/postfix/ldap# cat redirect.cf
debuglevel = 0
version = 3
server_host = ldap://ldap_server_ip
search_base = ou=Users,dc=domain,dc=local
timeout = 3
query_filter = (&(userPrincipalName=%s)(sAMAccountType=805306368))
result_filter = %s
result_attribute = mail
special_result_attribute = member
scope = sub
bind = yes
bind_dn = ldap-bind@domain.local
bind_pw = p@$$word

Ну и mail:/etc/postfix/ldap# cat ./mailgroups.cf
debuglevel = 0
version = 3
server_host = ldap://ldap_server_ip
search_base = ou=Users,dc=domain,dc=local
timeout = 3
query_filter = (&(mail=%s)(sAMAccountType=268435457))
result_filter = %s
result_attribute = userPrincipalName
special_result_attribute = member
scope = sub
bind = yes
bind_dn = ldap-bind@domain.local
bind_pw = p@$$word

Как видно, юзеров мы ищем по заполненному атрибуту mail, алиас по списку адресов в атрибуте otherMailboxes, для редиректа используем userPrincipalName, ну а список рассылки у нас не что иное, как группа распространения в AD, а список получателей - члены данной группы.


Таким образом, если мы для юзера хотим другой е-мейл, в атрибуте mail пишем требуемый адрес. Получается редирект. Если у юзера будет несколько адресов (алиасов), то в otherMailboxes добавляем их все (ADSIedit в помощ), а если нам нужен ящик для группы рассылки, завоним группу распространения, в атрибуте mail для нее пишем адрес группы и включаем необходимых участников. Вуа-ля! Все красиво и управляемо.


Длинный пост получился, прервемся на рекламу ;) В смысле, продолжение в следующем посте! Я расскажу, как я доставляю почту по папкам юзверей.

1 комментарий:

  1. передирать не хорошо. Хотя бы ссылку указывали на первоисточник

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