Postfix+Dovecot+AD+groups

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Graf
сержант
Сообщения: 203
Зарегистрирован: 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

Аватара пользователя
Amaka
ефрейтор
Сообщения: 58
Зарегистрирован: 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
сержант
Сообщения: 203
Зарегистрирован: 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


Вернуться в «MTA - Mail Transfer Agent»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя