The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Postfix + Dovecot + Active Directory"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / Linux)
Изначальное сообщение [ Отслеживать ]

"Postfix + Dovecot + Active Directory"  +/
Сообщение от metallic (ok) on 06-Май-13, 14:18 
Решил тут перевести свою локальную электропочту на Active Directory (сейчас виртуальные аканты в mysql).
Еще раз: почта локальная, наружу не ходит, домен один.
У всех пользователей в AD поле E-mail заполнено.
Домен в АД - burut.org, почтовый локальный домен - burut.net (ну так сложилось).
Имена пользователей выбирают сами пользователи, поэтому они выглядеть могут как угодно, например username, но в профиле поле E-mail заполнено по стандарту(первая буква имени, фамилия), таким образом, к примеру у пользователя username почта ifamiliya@burut.net

Так вот никак не получается скрестить сабжы.
Начал настройку с dovecot, вроде бы настроил. Привожу основные моменты конфига:


mail_location = maildir:/srv/vmail/%u
mail_uid = 1001
mail_gid = 1001

1001 - это uid и gid пользователя vmail

Ну и вот конфиг ldap:


uris = ldap://burut.org

dn = cn=reader,ou=ServiceUsers,ou=AllUsers,dc=burut,dc=org

dnpass = *********

tls = no

auth_bind = yes

auth_bind_userdn = %n@burut.org

ldap_version = 3

base = ou=AllUsers,dc=burut,dc=org

deref = searching

scope = subtree

user_filter = (&(objectClass=person)(sAMAccountName=%u))
pass_filter = (&(ObjectClass=person)(sAMAccountName=%u))

Настроил почтовый клиент, пробую забрать почту(тестовым пользователем mailuser и e-mail у него mailuser@burut.net), в итоге:

# ls -l /srv/vmail/
итого 4
drwx------ 5 vmail vmail 4096 Май  6 11:55 mailuser

Как видим, мейлдир создался, почтовый клиент отрапортовал, что новых сообщений не найдено, но все ок.

Далее в дебаг-логе:


May 06 12:50:55 auth: Debug: auth client connected (pid=18921)
May 06 12:50:55 auth: Debug: client in: AUTH    1       PLAIN   service=pop3    session=K/uAzAjcewAKABQe        lip=10.0.0.103  rip=10.0.20.30  lport=110       rport=2171      resp=AG1haWx1c2VyAG1haWx1c2Vy
May 06 12:50:55 auth: Debug: client out: OK     1       user=mailuser
May 06 12:50:55 auth: Debug: master in: REQUEST 1003094017      18921   1       a2e66e3f4f8fb795b453410ee87fca63
May 06 12:50:55 auth: Debug: ldap(mailuser,10.0.20.30,<K/uAzAjcewAKABQe>): user search: base=ou=AllUsers,dc=burut,dc=org scope=subtree filter=(&(objectClass=person)(sAMAccountName=mailuser)) fields=homeDirectory,uidNumber,gidNumber
May 06 12:50:55 auth: Debug: ldap(mailuser,10.0.20.30,<K/uAzAjcewAKABQe>): result:  homeDirectory missing; uidNumber missing; gidNumber missing
May 06 12:50:55 auth: Debug: master out: USER   1003094017      mailuser
May 06 12:50:55 pop3(mailuser): Debug: Effective uid=1001, gid=1001, home=
May 06 12:50:55 pop3(mailuser): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/srv/vmail/mailuser
May 06 12:50:55 pop3(mailuser): Debug: maildir++: root=/srv/vmail/mailuser, index=, control=, inbox=/srv/vmail/mailuser, alt=

Как буд-то бы все нормально.

Далее, начал прикручивать postfix, в мастерконфиге прописал транспорт:

# Dovecot LDA
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -d ${recipient}

И сам конфиг постфикса привожу целиком:

inet_interfaces = 10.0.0.103

smtpd_banner = $myhostname ESMTP ready
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

#base = /etc/postfix/hash
myhostname = testapp.burut.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = burut.net
mydomain = burut.net
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =.
mynetworks = 127.0.0.0/8, 10.0.0.0/16
#mailbox_command = procmail -a "$EXTENSION"
recipient_delimiter = +
inet_interfaces = all
unknown_local_recipient_reject_code = 550
debug_peer_level = 2
debug_peer_list = 127.0.0.1, burut.net
message_size_limit = 50000000

# ---------------------- VIRTUAL DOMAINS START ----------------------
virtual_transport = dovecot
virtual_mailbox_base            = /srv/vmail
virtual_mailbox_domains         = $mydomain

virtual_mailbox_maps            = ldap:$config_directory/virtual_mbox.conf
virtual_alias_maps              = hash:$config_directory/virtual_alias

virtual_minimum_uid             = 150
virtual_uid_maps                = static:150
virtual_gid_maps                = static:6
virtual_transport               = dovecot
dovecot_destination_recipient_limit = 1
# ---------------------- VIRTUAL DOMAINS END ----------------------

smtpd_recipient_restrictions = check_recipient_access hash:$config_directory/recipient_access, reject
smtpd_sender_restrictions = check_sender_access hash:$config_directory/recipient_access, reject

Ну и конфиг virtual_mbox.conf

server_host = burut.org
search_base = dc=burut,dc=org
version = 3

query_filter = (&(objectclass=person)(mail=%s))
result_attribute = mail

#query_filter = (userPrincipalName=%s)
#result_attribute = sAMAccountName

result_format = %u/
bind_dn = reader@burut.org
bind_pw = *********
cache = no

Теперь пробую отослать сам себе письмо, вот что вижу в логах:

May  6 12:59:56 testapp postfix/smtpd[19631]: connect from vritualpc1.burut.org[10.0.20.30]
May  6 12:59:56 testapp postfix/smtpd[19631]: 8E5D7A0CE9: client=vritualpc1.burut.org[10.0.20.30]
May  6 12:59:56 testapp postfix/cleanup[19634]: 8E5D7A0CE9: message-id=<1564368713.20130506115955@burut.net>
May  6 12:59:56 testapp postfix/qmgr[19617]: 8E5D7A0CE9: from=<mailuser@burut.net>, size=602, nrcpt=1 (queue active)
May  6 12:59:56 testapp dovecot: auth: ldap(mailuser@burut.net): unknown user
May  6 12:59:56 testapp postfix/pipe[19635]: 8E5D7A0CE9: to=<mailuser@burut.net>, relay=dovecot, delay=0.03, delays=0/0/0/0.02, dsn=5.1.1, status=bounced (user unknown)
May  6 12:59:56 testapp postfix/cleanup[19634]: 948BCA0CF2: message-id=<20130506085956.948BCA0CF2@testapp.burut.net>
May  6 12:59:56 testapp postfix/qmgr[19617]: 948BCA0CF2: from=<>, size=2347, nrcpt=1 (queue active)
May  6 12:59:56 testapp postfix/bounce[19639]: 8E5D7A0CE9: sender non-delivery notification: 948BCA0CF2
May  6 12:59:56 testapp postfix/qmgr[19617]: 8E5D7A0CE9: removed
May  6 12:59:56 testapp postfix/smtpd[19631]: disconnect from vritualpc1.burut.org[10.0.20.30]
May  6 12:59:56 testapp dovecot: auth: ldap(mailuser@burut.net): unknown user
May  6 12:59:56 testapp postfix/pipe[19635]: 948BCA0CF2: to=<mailuser@burut.net>, relay=dovecot, delay=0.02, delays=0/0/0/0.02, dsn=5.1.1, status=bounced (user unknown)
May  6 12:59:56 testapp postfix/qmgr[19617]: 948BCA0CF2: removed

В дебаге dovecot вот что:

May 06 12:59:56 lda: Debug: Loading modules from directory: /usr/lib/dovecot/modules
May 06 12:59:56 lda: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
May 06 12:59:56 auth: Debug: master in: USER    1       mailuser@burut.net      service=lda
May 06 12:59:56 auth: Debug: ldap(mailuser@burut.net): user search: base=ou=AllUsers,dc=burut,dc=org scope=subtree filter=(&(objectClass=person)(sAMAccountName=mailuser@burut.net)) fields=homeDirectory,uidNumber,gidNumber
May 06 12:59:56 auth: Debug: master out: NOTFOUND       1
May 06 12:59:56 lda: Debug: auth input:

Что я делаю не так?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Postfix + Dovecot + Active Directory"  +1 +/
Сообщение от McLeod095 (ok) on 06-Май-13, 18:34 
>[оверквотинг удален]
> May 06 12:59:56 auth: Debug: master in: USER    1
>       mailuser@burut.net    
>  service=lda
> May 06 12:59:56 auth: Debug: ldap(mailuser@burut.net): user search: base=ou=AllUsers,dc=burut,dc=org
> scope=subtree filter=(&(objectClass=person)(sAMAccountName=mailuser@burut.net))
> fields=homeDirectory,uidNumber,gidNumber
> May 06 12:59:56 auth: Debug: master out: NOTFOUND    
>   1
> May 06 12:59:56 lda: Debug: auth input:
> Что я делаю не так?

Я не силен в постфиксе, но все же, у Вас настроена аутентификация пользователей через dovecot, в dovecot прописано что для того что бы авторизоваться нужно просто ввести логин и пароль, после чего все работает. Dovecot авторизует пользователя и все нормально, но вот postfix когда пытается аутентифицировать пользователя вместо логина передает его почтовый адрес, и конечно же dovecot не может найти такого пользователя. Вообще конечно не помешало бы иногда читать комменнты к конфигам, вот какие у меня комментарии перед строкой user_filter в dovecot.conf


# Filter for user lookup. Some variables can be used (see
# http://wiki.dovecot.org/Variables for full list):
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if user there's no domain

ну и вот что у меня там находится


user_filter = (&(objectClass=user)(sAMAccountName=%n)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

здесь все просто
только автикные пользователи могут авторизоваться, нефиг нам заблокированных дергать, ну и те у которых заполнено поле mail.
Аналогично прописан и pass_filter
Ну и мне еще понадобилось добавить вот это

user_attrs = =uid=497, =gid=12, sAMAccountName=home=/var/spool/mail/%$


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Postfix + Dovecot + Active Directory"  +/
Сообщение от metallic (ok) on 07-Май-13, 16:17 
Все заработало, привязал и постфикс и довекот к userPrincipalName
Плюс в довекоте обозначил дефолтные опции:
default_fields = home=/srv/vmail/%u uid=1001 gid=1001

И все поехало, плюс прикрутил алиасы и списки рассылки, все работает :)

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Postfix + Dovecot + Active Directory"  +/
Сообщение от metallic (ok) on 07-Май-13, 16:19 
> user_filter = (&(objectClass=user)(sAMAccountName=%n)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

Только каким образом вы отличаете заблокированных и с пустым полем email ?
Что это за страшные цифры*

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Postfix + Dovecot + Active Directory"  +1 +/
Сообщение от McLeod095 (ok) on 07-Май-13, 16:36 
>> user_filter = (&(objectClass=user)(sAMAccountName=%n)(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
> Только каким образом вы отличаете заблокированных и с пустым полем email ?
> Что это за страшные цифры*

http://msdn.microsoft.com/en-us/library/windows/desktop/ms68...
Тамже найдете еще кучу всего интересного по АД.
Я думаю не составит труда также найти что значит 1.2.840.113556.1.4.803
Ну и хоть в mail стоит * которая в регулярных выражениях совпадает и с пустой строкой, в лдап запросе это обозначает поле mail не пустое. Мне например поле userPrincipalName не нравится тем что при авторизации на dovecot в настройках почтового клиента пользователь должен будет вводить в поле логин полностью логин с доменным именем, а с учетом того что имя домена АД не всегда может совпадать с почтовым доменом, то это вносит определенную путаницу.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Postfix + Dovecot + Active Directory"  +/
Сообщение от metallic (ok) on 07-Май-13, 17:38 
А есть каки-либо идеи, как прикрутить квоты?
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Postfix + Dovecot + Active Directory"  +/
Сообщение от McLeod095 (ok) on 08-Май-13, 11:50 
> А есть каки-либо идеи, как прикрутить квоты?

Какие квоты?
если квоты на размер ящика, то их скорее всего лучше делать через dovecot, он более гибче. НО. у меня появились некоторые проблемы с их внедрением, поэтому пока отказался. У меня связка exim+dovecot. Первая трабла. я не смог сделать так что бы при достижении квоты пользователь мог принимать почту, но не мог отправить. Т.к. exim вообще ничего не знает про квоты, здесь у меня не получилось победить траблу. Вторая трабла, при отправке письма пользователем оно копируется клиентом в папку отправленные по IMAP, и если у пользователя достигнута квота, то письмо естественно не сохранится. ну и так далее в этом духе. Хотелось сделать функуционал аналогичный exchange, но задача по квотированию была снята и я ее забросил. А вообще квоты привязываются легко. По ссылке которую дал ищете атрибут который подходит и который не используется и настраиваете квоты на него.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру