Postfix+Dovecot+AD+groups

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Graf
сержант
Сообщения: 205
Зарегистрирован: 2008-10-29 18:44:32
Контактная информация:

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Graf » 2017-06-23 18:01:20

Приветствую!

Имеем:

AD DC - 192.168.10.212 (pdc.mydom.lan) - samba 4+
Postfix+Dovecot - 192.168.10.214 (mail.mydom.ru)
Пользователь для ldap поиска : llu
Пользователи: graf (mail=graf@mydom.ru), v_pupkin(mail=v_pupkin@mydom.ru)
Группа: it (mail=it@mydom.ru), члены graf и v_pupkin.
Нужные данные берутся из AD (логин, почта и т.д.)

На время тестирования, все тесты идут в локалке, во вне, пока, не выкидывается.
И почта ходит. Но, если оправить письмо в группу (it@mydom.ru), члены группы письмо получают, но отправителю приходит: "<it@mydom.ru>: user unknown.

Оно, как бы верно, такого пользователя нет. Вот не соображу, как сделать, чтобы отправитель получал такой ответ только лишь в отсутствии такой группы, а при ее наличии не получал ничего?

За ранее, спасибо!

Код: Выделить всё

# postmap -q "graf@mydom.ru" ldap:/etc/postfix/ldap/ldap-users.cf
graf

# postmap -q "it@mydom.ru" ldap:/etc/postfix/ldap/ldap-groups.cf 
it@mydom.ru,v_pupkin@mydom.ru,graf@mydom.ru

# ldapsearch -h 192.168.10.212 -W -x -D cn=llu,ou=IT,dc=mydom,dc=lan -b "dc=mydom,dc=lan" "(mail=graf@mydom.ru)" | grep graf
Enter LDAP Password: 
# filter: (mail=graf@mydom.ru)
sAMAccountName: graf
userPrincipalName: graf@mydom.lan
mail: graf@mydom.ru
Привожу часть конфигов, если надо все или что-то конкретное, скажите, выложу.

/etc/dovecot/dovecot-ldap-passdb.conf (/etc/dovecot/dovecot-ldap-userdb.conf)

Код: Выделить всё

hosts            = 192.168.10.212
dn               = CN=llu,OU=IT,DC=mydom,DC=lan
dnpass           = Test123
auth_bind        = yes
auth_bind_userdn = %u@mydom.lan
ldap_version     = 3
tls              = no
debug_level      = 1
base             = dc=mydom,dc=lan
scope            = subtree
deref            = never

pass_filter = (&(objectClass=person)(sAMAccountName=%Ln))
pass_attrs  = sAMAccountName=%Ln
/etc/dovecot/conf.d/ldap.conf

Код: Выделить всё

passdb ldap_p {
    driver = ldap
    args = /etc/dovecot/dovecot-ldap-passdb.conf
}
userdb ldap_u {
    driver = static
    args = /etc/dovecot/dovecot-ldap-userdb.conf
}
/etc/postfix/ldap/ldap-groups.cf

Код: Выделить всё

ebuglevel = 0
version = 3
server_host = 192.168.10.212
server_port = 389
bind = yes
bind_dn = llu@mydom.lan
bind_pw = Test123
search_base = dc=mydom,dc=lan
scope = sub
timeout = 3

query_filter = (&(objectClass=group)(mail=%s))
result_filter = %s
result_attribute = mail
special_result_attribute = member
/etc/postfix/ldap/ldap-users.cf

Код: Выделить всё

server_host = 192.168.10.212
bind = yes
bind_dn = cn=llu,ou=IT,dc=mydom,dc=lan
bind_pw = Test123

search_base = dc=mydom,dc=lan
search_scope = subtree
version = 3
debuglevel = 0

query_filter = (&(objectClass=User)(mail=%s))
result_attribute = sAMAccountName
/etc/postfix/main.cf

Код: Выделить всё

...
virtual_mailbox_domains = $mydomain
virtual_mailbox_maps = ldap:/etc/postfix/ldap/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap/ldap-groups.cf
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes

alias_maps =
...
/etc/postfix/master.cf по дефолту +

Код: Выделить всё

...
...
dovecot   unix  -       n       n       -       -       pipe
   flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}
...
...
С кем поведешься - так тебе и надо!
http://slackware.su

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Amaka
мл. сержант
Сообщения: 78
Зарегистрирован: 2016-02-03 12:05:11
Откуда: Москва

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Amaka » 2017-07-06 16:43:49

Graf писал(а):Приветствую!

Имеем:

/etc/postfix/main.cf

Код: Выделить всё

...
virtual_mailbox_domains = $mydomain
virtual_mailbox_maps = ldap:/etc/postfix/ldap/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap/ldap-groups.cf
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot
...
Т.е. когда приходит письмо на адрес it@mydom.ru, то postfix проверяет, есть ли mydom.ru в списке виртуальных доменов (virtual_mailbox_domains = $mydomain). Ответ - ЕСТЬ.
Далее postfix смотрит, если ли почтовый ящик it@mydom.ru (virtual_mailbox_maps = ldap:/etc/postfix/ldap/ldap-users.cf). Ответ - НЕТ.
Далее смотрит, если алиас it@mydom (virtual_alias_maps = ldap:/etc/postfix/ldap/ldap-groups.cf). Ответ - ЕСТЬ.

Как postfix получает реальный адрес получателя из алиаса? Так же как и ты, т.е.:

Код: Выделить всё

# postmap -q "it@mydom.ru" ldap:/etc/postfix/ldap/ldap-groups.cf 
it@mydom.ru,v_pupkin@mydom.ru,graf@mydom.ru

# ldapsearch -h 192.168.10.212 -W -x -D cn=llu,ou=IT,dc=mydom,dc=lan -b "dc=mydom,dc=lan" "(mail=graf@mydom.ru)" | grep graf
Enter LDAP Password: 
# filter: (mail=graf@mydom.ru)
sAMAccountName: graf
userPrincipalName: graf@mydom.lan
mail: graf@mydom.ru
Т.е. на вопрос какие адреса имеют алиас it@mydom ?
Ответ: it@mydom.ru,v_pupkin@mydom.ru,graf@mydom.ru.
Как видишь, postfix после этого пытается отправить письма 3-м реальным получателям, вместо 2-х (v_pupkin@mydom.ru,graf@mydom.ru).
Положить письмо в п/ящик it@mydom.ru не удается, т.к. его нет. Это значит, что отправителю нужно отправить уведомление о недоставке.
Все логично.
Всем удачи!

Аватара пользователя
Graf
сержант
Сообщения: 205
Зарегистрирован: 2008-10-29 18:44:32
Контактная информация:

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Graf » 2017-07-06 17:10:00

Да, спасибо большое за ответ.
Решилось изменением запросов в /etc/postfix/ldap/ldap-groups.cf

Код: Выделить всё

query_filter = (|(&(objectClass=group)(mail=%s))(&(objectclass=User)(|(mail=%s)(otherMailbox=%s))))
и в /etc/dovecot/dovecot-ldap-passdb.conf

Код: Выделить всё

pass_filter =(|(&(ObjectClass=user)(sAMAccountName=%Ln))(&(ObjectClass=group)(sAMAccountName=%Ln)))
С кем поведешься - так тебе и надо!
http://slackware.su

Icom
проходил мимо
Сообщения: 4
Зарегистрирован: 2019-01-22 4:57:26

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Icom » 2019-01-22 5:10:31

Глупый вопрос: где вы берете списки объектов AD?
Делаю ACL для общих папок в Dovecot и хотелось бы получить помимо логина пользователя еще и список групп в которых он состоит?
На текущий момент для запроса логина:

Код: Выделить всё

pass_attrs = sAMAccountName=user
pass_filter = (&(objectClass=Person)(sAMAccountName=%n)(!(userAccountControl=66050)))

Аватара пользователя
Graf
сержант
Сообщения: 205
Зарегистрирован: 2008-10-29 18:44:32
Контактная информация:

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Graf » 2019-01-22 10:50:11

Компьютер член домена.
Группы в которых состоит пользователь graf:

Код: Выделить всё

# id graf
uid=10107(graf) gid=10004(пользователи домена) группы=10004(пользователи домена),10025(cloud-users),10001(BUILTIN\users)
Или я вопрос не так понял? :)
С кем поведешься - так тебе и надо!
http://slackware.su

Icom
проходил мимо
Сообщения: 4
Зарегистрирован: 2019-01-22 4:57:26

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Icom » 2019-01-22 11:42:42

Компьютер не член домена и получить список групп надо именно при запросе dovecot в active directory, пользователя для проверки наличия оного и авторизации по imap проверяем таким запросом:

Код: Выделить всё

pass_attrs = sAMAccountName=user
pass_filter = (&(objectClass=Person)(sAMAccountName=%n)(!(userAccountControl=66050)))
Что нужно добавить чтоб в переменной userdb_acl_groups был список групп, в которых сей пользователь находится, запрос делается по ldap к серверу microsoft. Нужно это для того что б в dovecot-acl можно было расставить права для групп, пользователей более тысячи и общих папок десятка три, руками прописывать я позеленею на второй неделе.

Код: Выделить всё

pass_attrs = sAMAccountName=user, "Что-то в каталоге"=userdb_acl_groups
pass_filter = (&(objectClass=Person)(sAMAccountName=%n)(!(userAccountControl=66050))(objectClass=Group)("список групп где есть этот %n"))
Поидее чем-то таким должен стать вопрос.

Аватара пользователя
Graf
сержант
Сообщения: 205
Зарегистрирован: 2008-10-29 18:44:32
Контактная информация:

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Graf » 2019-01-22 14:33:14

Ищем к каким группам принадлежит Василий Иванович Пупкин находящийся в подразделении IT домена mydom.lan.
192.168.10.244 - IP-адрес контролера домена;
adreader - пользователь домена в подразделении IT. Создан специально для чтения из AD.
member:1.2.840.113556.1.4.1941:=cn=Василий Иванович Пупкин,ou=IT,dc=mydom,dc=lan - собственно сам запрос. Рулить и вставлять можно во всевозможные фильтры.

Код: Выделить всё

# ldapsearch -h 192.168.10.244 -W -x -D cn=adreader,ou=IT,dc=mydom,dc=lan -b "dc=mydom,dc=lan" "member:1.2.840.113556.1.4.1941:=cn=Василий Иванович Пупкин,ou=IT,dc=mydom,dc=lan" | grep name 
Enter LDAP Password:

name:: 0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRiw==
name:: 0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRiyDQtNC+0LzQtdC90LA=
name: buh
mailNickname: it
name: it
name: cloud
name: VPN

# echo "0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRiyDQtNC+0LzQtdC90LA=" | base64 -d
Администраторы домена

# echo "0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRiw==" | base64 -d
Администраторы
Или опять не то? :)
С кем поведешься - так тебе и надо!
http://slackware.su

Icom
проходил мимо
Сообщения: 4
Зарегистрирован: 2019-01-22 4:57:26

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Icom » 2019-01-31 4:26:25

Если биндить как утебя с ключами "-h" и "-x -D cn=adreader,ou=IT,dc=mydom,dc=lan" то при подключении к контроллеру security content error

Код: Выделить всё

ldapsearch -H ldap://192.168.1.12 -W -x -D mailadmin@domain.ru -b "dc=domain,dc=ru" "member:1.2.840.113556.1.4.1941:=samaccountname=icom"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=ru> with scope subtree
# filter: member:1.2.840.113556.1.4.1941:=cn=samaccountname=icom
# requesting: ALL
#

# search reference
ref: ldap://DomainDnsZones.domain.ru/DC=DomainDnsZones,DC=domain,DC=,DC
 =ru

# search reference
ref: ldap://ForestDnsZones.domain.ru/DC=ForestDnsZones,DC=domain,DC
 =ru

# search reference
ref: ldap://domain.ru/CN=Configuration,DC=domain,DC=ru

# search result
search: 2
result: 0 Success

# numResponses: 4
# numReferences: 3

Icom
проходил мимо
Сообщения: 4
Зарегистрирован: 2019-01-22 4:57:26

Postfix+Dovecot+AD+groups

Непрочитанное сообщение Icom » 2019-01-31 6:58:19

Правильно будет так:

Код: Выделить всё

ldapsearch -LLL -o ldif-wrap=no -H ldap://192.168.1.12 -x -D mailadmin@mydomain.ru -W -b "dc=mydomain,dc=ru" samaccountname=icom memberOf grep memberOf