четверг, 20 мая 2010 г.

Настройка Postfix+Active Directory

Настроем почтовый сервер Postfix в операционной системе Freebsd 8.0,запрашивающий информацию из Active Directory

Задачи:
Запросы информации в AD
Аунтификация SMTP
Настройка pop3 и imap /ssl

Примечание:
Дело в том,что pop3 и imap поднимался за счет courier-imap,но аутентификацию smtp не смог завести за счет cyrus-sasl,поэтому для аутентификация SMTP был применен Dovecot c его sasl,хотя все можно было подвесить на dovecot (pop3 , imap ),но, так как все работало менять не стал

Шаг 1

Postfix должен быть собран с поддержкой ldap,dovecot,остальные опции по потребностям

Я не буду подробно расписывать конфиги всех пакетов, остановлюсь только на важном,чтоб в конечном итоге все работало

Почта будет хранится по пути:
/var/spool/mail

Конечная папка пользователя будет размещена таким образом:
/var/spool/mail/имя домена/имя пользователя@домен



Создадим пользователя и группу vmail
pw group add vmail -g 3000
pw user add vmail -g vmail -s /sbin/nologin -u 3000

mkdir /var/spool/mail
chown vmail:vmail /var/spool/mail/
chmod -R 740 /var/spool/mail/


ШАГ 2

Мы должны настроить конфиг main.cf

Описать,где храняться пользователи
virtual_alias_maps = hash:/usr/local/etc/postfix/virtual_alias
virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /var/spool/mail
virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap.conf
virtual_uid_maps = static:3000
virtual_gid_maps = static:3000

Сам конфиг ldap.conf,через который будет формироваться запросы по протоколу ldap к AD для поиска пользователей


server_host = 172.16.32.70:3268
search_base = dc=company,dc=local
version = 3
query_filter = (&(objectclass=person)(mail=%s))
result_attribute = mail
result_format = %d/%s/Maildir/
bind_dn = ldap@company.local
bind_pw = 12345


Разберем конфиг

%d Доменная часть без локальной части и символа @ (например, test.org).
%s Полный почтовый адрес (например, lena@test.org).
%u Локальная часть без символа @ и указания домена (например, lena).

Когда пользователь, в первый раз настроит свою почтовую программу, и отправит сам себе письмо, то для него будет создана его личная папка, где хранится его почта
/var/spool/mail/test.org/lena@test.org

Для того, что бы этого добиться нам нужно правильно сформировать запрос по протоколу ldap к контроллеру домена (Active Directory)
Для правильность формирования запросов можно поиграться с мощной утилитой из пакета support tools windows server, ldp

И так:
Для начала нас интересует, чтоб пользовательская папка была типа:

имя пользователя@домен

Для этого, в Active Directory,должен уже быть создан пользователь, или его нужно создать, после этого заходим в свойства данного пользователя, нас интересует строка как e-mail,ее нужно заполнить:



Таким образом, когда будет проверяться наличие пользователя, будет создан запрос к Active Directory,будет проверен аттребут mail ,который содержит lena@test.org
А результат будет таким согласно конфигу ldap.conf
/var/spool/mail/test.org/lena@test.org
В место %d подставится домен исключая локальную часть

ШАГ 3

Настройка SMTP аунтификации

Если,smtp аунтификация не нужна,т.е удаленные пользователи не используют корпоративный почтовый сервер,для пересылки почты,тогда шаг 3 опустим

Dovecot должен быть собран с ldap

Dovecot будет осуществлять аутентификацию SMTP за счет своего механизма sasl осуществлять запросы по протоколу ldap к AD,он будет связан с postfix.

основной конфиг dovecot
/usr/local/etc/dovecot.conf

ssl no
first_valid_uid = 3000
last_valid_uid = 3000
first_valid_gid = 3000
last_valid_gid = 3000

auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

auth default {
mechanisms = plain login
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = vmail
group = vmail
}

client {
path = /var/run/dovecot/auth-client
mode = 0660
user = postfix
group = postfix
}

}
}
Как видно конфиг краткий ,так как описывает только процесс и источник аутентификации

Если dovecot не настраивается для работы с pop3 и imap, то поддержку ssl нужно отключить иначе, dovecot не запустится,выдавая ошибку мол нейдены сертификаты

конфиг dovecot-ldap.conf,описывающий запросы к контроллеру домену для проверки валидности

hosts = 172.16.32.70:3268
dn = ldap@company.local
dnpass = 12345
auth_bind = yes
ldap_version = 3
base = cn=Users,dc=company,dc=local
user_attrs = sAMAccountName=home
user_filter = (&(ObjectClass=person)(sAMAccountName=%u))
pass_filter = (&(ObjectClass=person)(sAMAccountName=%u))



В main.cf Postfix

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
dovecot_destination_recipient_limit = 1
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

В master.cf Postfix

dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -d ${user}


Шаг 4

Нам нужно настроить pop3 и imap в месте с Active Directory,использовались пакет courier-authlib нужна поддержка ldap, courier-imap

После этого нам нужно отредактировать файл

/usr/local/etc/authlib

authdaemonrc

authmodulelist="authldap"
authmodulelistorig="authldap"
daemons=5
authdaemonvar=/var/run/authdaemond
subsystem=mail
DEBUG_LOGIN=2
DEFAULTOPTIONS="wbnodsn=1"
LOGGEROPTS=""

И настроить подключения к AD,для аунтификации пользователей

/usr/local/etc/authlib

authldaprc

LDAP_URI ldap://172.16.32.70
LDAP_PORT 3268
LDAP_PROTOCOL_VERSION 3
LDAP_BASEDN cn=Users,dc=company, dc=local
LDAP_BINDDN ldap@company.local
LDAP_BINDPW 12345
LDAP_TIMEOUT 5
LDAP_AUTHBIND 1
LDAP_MAIL mail
LDAP_FILTER (objectclass=person)
LDAP_HOMEDIR description
LDAP_MAILROOT /var/spool/mail
LDAP_MAILDIR ./
LDAP_DEFAULTDELIVERY defaultDelivery
LDAP_FULLNAME cn
LDAP_CRYPTPW userPassword
LDAP_DEREF never
LDAP_GLOB_UID vmail
LDAP_GLOB_GID vmail
LDAP_CLEARPW clearPassword
LDAP_CRYPTPW userPassword


И так нам нужно добится ,что бы когда пользователь заходит на сервер, его имя и
пароль корректно проходили процесс аутентификации,и imap или pop3 находил нужную
папку, а не писал все время в логах:
pop3d: chdir “cur”: No such file or directory

Т.е когда пользователь будет проверять почту а логах должно быть приблительно так:
mail authdaemond: Authenticated: sysusername=, sysuserid=3000, sysgroupid=3000,
homedir=/var/spool/mail/test.org/lena@test.org, address=lena@test.org, fullname=lena



Для того,что бы добится правельного формирования пути к конечной папки пользователя,чтоб pop3 или imap не кричали, мол нету такой папки
Нужно снова внести изменения в свойство учетной записи хранящаяся в AD

Я использовал строку description в свойствах учетной записи т.е



Изходя из конфига выше:
LDAP_MAIL mail
LDAP_FILTER (objectclass=person)
LDAP_HOMEDIR description

После этого, когда клиент пройдет аутентификацию,он получит свою почту, так как pop3
или imap корректно найдет нужный путь т.е



Шаг 5

Возможно нужно просматривать и отправлять почту через web,тогда будем использовать Squirrelmail

Установили,скофигурировали

Когда,все настроено,configtest Squirrelmail,говорит мол ошибок нет все нормально,и когда мы вводим пароль и имя,возникает ошибка IMAP СЕРВЕР СБРОСИЛ ПОДКЛЮЧЕНИЯ
То в настройках Squirrelmail,в параметрах сервера меню под номером 2, вместо полного доменного имени imap сервера нужно ввести ip адресс,по крайне мере у меня так заработал,разбираться не стал,забил

Шаг 6

При отладки почтовой ситемы имеет смысл на время включить отладку

Postfix:

В main.cf
debug_peer_level = 3
debug_peer_list = 127.0.0.1, test.org

либо
В master.cf

напротив smtpd ,выставить ключь -v (smtpd -v)


Для dovecot:

log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot.log

auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes

Для courier:

в конфиге authdaemonrc
DEBUG_LOGIN=2

Так же не рекомендуется испольовать порт 389 для запрос к AD,это может привести к проблемам репликации,поэтому правельное решение использовать глобальный каталог на порту 3268

После того,как система заработала нормально,я снизил уровень отладки,чтоб журналы не забивались лишним.......


freebsd 8.0
windows server 2008

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

  1. столкнулся с аналогичной задачей и толком документации нету ( .

    ОтветитьУдалить
    Ответы
    1. не вопрос помогу с настройкой,пиши на почту scheford собака post.ru

      Удалить
  2. Спасибо за мануал!
    2 дня бился с конфигом ldap, а здесь все как надо )

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