Задачи:
Запросы информации в 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=
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
столкнулся с аналогичной задачей и толком документации нету ( .
ОтветитьУдалитьне вопрос помогу с настройкой,пиши на почту scheford собака post.ru
УдалитьСпасибо за мануал!
ОтветитьУдалить2 дня бился с конфигом ldap, а здесь все как надо )