Доброго времени суток!Что есть. FreeBSD 6.1: Exim-4.66+openldap-client-2.3.33. Exim собран с поддержкой openldap. Exim принимает почту для группы доменов и роутит ее на MSE2003. Все замечательно, но много левых писем со спамом.
Хочу сделать проверку получателей в AD.Воспользовался http://www.exim.org/eximwiki/MsExchangeAddressVerification
(Оригинал: http://www.exim.org/mail-archives/exim-users/Week-of-Mon-200... )Настройки сделал соответственно хауту на сайте exim'а.
Завел соответствующего пользователя в AD (ldap, пароль ldap123) с минимальными правами.
Результат: верификация пользователя не проходит.
В mainlog'е:
2007-02-06 23:14:01 1HEWhV-0002Qr-7c == cooluser@my.domen.ru R=adsi_check defer (-1): failed to expand "${lookup ldap {user="CN=ldap,OU=Users,DC=my,DC=domen,DC=ru" pass=xxxxxxxxx ldap:///"DC=my,DC=domen,DC=ru"?mail?sub?(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))(proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}}))}{${local_part}@${domain}}{:fail: User unknown}}": lookup of "user="CN=ldap,OU=Users,DC=my,DC=domen,DC=ru" pass="ldap123" ldap:///"DC=my,DC=domen,DC=ru"?mail?sub?(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))(proxyAddresses=SMTP:cooluser@my.domen.ru))" gave DEFER: failed to bind the LDAP connection to server 192.168.0.1 - LDAP error 49: Invalid credentialsТ.е., как я понял, запросы к серверу не проходят.
Тем не менее, с консоли FreeBSD-сервера, сервер с AD виден и отвечает на вопросы:
ldapsearch -D ldap -w ldap123 -LLL "(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))(proxyAddresses=SMTP:cooluser@my.domen.ru))"
Вся инфа прекрасно видна.Прошу совета...укажите где грабли :)
Я прекрасно понимаю, что, да, можно вести базу получателей в постгрессе или мускуле, но у меня есть, то что есть и хочется заставить это работать.
На одном из форумов коллега предложил скрипт (при помощи ldapsearch), который несколько раз в сутки будет забирать юзеров из AD и складировать в файле, который потом Exim отпарсит... Схема неплохая - нагрузка на контроллер меньше...
Но все-таки хочется без костыликов ;)WBR, Pep.
>Прошу совета...укажите где грабли :)Классика, коллега, классика! Вы невнимательно читали статьи, а потом еще более невнимательно мучали AD (ADUC'ом кстати неудобно :)
Практически 100% что Вы не меняли Schema вашего AD - значит такого dn не существует :) "CN=ldap,OU=Users,DC=my,DC=domen,DC=ru"
Чтобы не мучать подскажу сразу (хотя админская мудрость гласит - дай человеку потра^w^w^w^w разобраться :) Попробуйте всместо OU=Users - CN=Users ... это хоть и LDAP но - M$ LDAP :)))
GR.
gr на patoka где-то в ca
>>Прошу совета...укажите где грабли :)
>
>Классика, коллега, классика! Вы невнимательно читали статьи, а потом еще более невнимательно
>мучали AD (ADUC'ом кстати неудобно :)
>
>Практически 100% что Вы не меняли Schema вашего AD - значит такого
>dn не существует :) "CN=ldap,OU=Users,DC=my,DC=domen,DC=ru"
>
>Чтобы не мучать подскажу сразу (хотя админская мудрость гласит - дай человеку
>потра^w^w^w^w разобраться :) Попробуйте всместо OU=Users - CN=Users ... это хоть
>и LDAP но - M$ LDAP :)))
>
>GR.
>gr на patoka где-то в caназвания объектов в хранилище ни на что не влияют :)
Теперь по запросу:
Invalid credentials говорит о неправильно составленном запросе
"${lookup ldap {user="CN=ldap,OU=Users,DC=my,DC=domen,DC=ru" pass=xxxxxxxxx ldap:///"DC=my,DC=domen,DC=ru"?mail?sub?\
(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))\
(proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}}))}{${local_part}@${domain}}{:fail: User unknown}}Это из лога,и синтаксис перегружен кавычками. Покажите лучше из конфига роутер целиком.
Также мне непонятна логика запроса. Если мы ищем именно по proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}} (а не по почтовому адресу что логичнее) то почему не возвращаем $value (результат поиска mail указанный в"DC=my,DC=domen,DC=ru"?mail?sub? ) а исходный {local_part}@${domain}}?
Скажите на словах что нужно конкретно и на каких условиях поиска.
Например простой поиск по ldap будет выглядеть так:
router_blabla:
driver = accept
condition = ${lookup ldap {ldap:///dc=my,dc=domen,dc=ru?mail?sub?\
(&(objectClass=publicFolder)(mail=${local_part}@${domain}))}{$value} fail}
cannot_route_message = User unknownВидите, поиск по ldap должен возвратить ?mail? -> $value и если нет, то fail
Попробуйте заставить конструкцию работать с минимальными условиями поиска. Затем поиск усложните.
>названия объектов в хранилище ни на что не влияют :)Bass - специально для вас - медленно:
по дефолту настроенный AD не содержит
OU=Users,dc=domain,dc=ru, зато содержит:
CN=Users,dc-domain,dc=ruЕсли и сейчас не поняли - я пасс :)
>>названия объектов в хранилище ни на что не влияют :)
>
>Bass - специально для вас - медленно:
>по дефолту настроенный AD не содержит
>OU=Users,dc=domain,dc=ru, зато содержит:
>CN=Users,dc-domain,dc=ru
>
>Если и сейчас не поняли - я пасс :)Я понял, что вы имели ввиду лишь ошибку спрашивающего в описании атрибутов.
Подумал же об утверждении, что движок поиска в AD привязан к атрибутам.
Доброго времени суток, bass.>
>Это из лога,и синтаксис перегружен кавычками. Покажите лучше из конфига роутер целиком.
>Привожу кусок конфига, который копипаст с сайта exim'a.
ldap_default_servers = 192.168.1.249::3268LDAP_AD_BINDDN = "cn=ldap,ou=Users,dc=my,dc=domen,dc=ru"
LDAP_AD_PASS = "ldap123"
LDAP_AD_BASE_DN = "dc=my,dc=domen,dc=ru"
LDAP_AD_MAIL_RCPT = \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE_DN?mail?sub?\
(&(|(objectClass=user)(objectClass=group))\
(proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}}))Роутер:
tut_check:
driver = redirect
data = ${lookup ldap {LDAP_AD_MAIL_RCPT}\
{${local_part}@${domain}}{:fail: User unknown}}
domains = +relay_to_domains
allow_fail
allow_defer
forbid_file
forbid_pipe
verify_recipient
redirect_router = tut_routertut_router:
driver = manualroute
domains = +relay_to_domains
route_list = !+local_domains 192.168.1.1
transport = remote_smtpВключил дебагмод на эксиме. Малый кусок:
1710 after ldap_url_parse: host=192.168.1.249 port=3268
1710 ldap_initialize with URL ldap://192.168.1.249:3268/
1710 initialized for LDAP (v3) server 192.168.1.249:3268
1710 LDAP_OPT_X_TLS_TRY set
1710 binding with user=cn=ldap,ou=Users,dc=my,dc=domen,dc=ru password=ldap123
1710 failed to bind the LDAP connection to server 192.168.1.249:3268 - LDAP error 49: Invalid credentials
>
>Также мне непонятна логика запроса. Если мы ищем именно по proxyAddresses=SMTP:${quote_ldap:${local_part}@${domain}} (а
>не по почтовому адресу что логичнее) то почему не возвращаем $value
>(результат поиска mail указанный в"DC=my,DC=domen,DC=ru"?mail?sub? ) а исходный {local_part}@${domain}}?
>
>Скажите на словах что нужно конкретно и на каких условиях поиска.Нужно, чтобы ексим проверял адрес получателя в AD.
Пока что-то туго выходит :)
>
>
>>Прошу совета...укажите где грабли :)
>
>Классика, коллега, классика! Вы невнимательно читали статьи, а потом еще более невнимательно
>мучали AD (ADUC'ом кстати неудобно :)
>
>Практически 100% что Вы не меняли Schema вашего AD - значит такого
>dn не существует :) "CN=ldap,OU=Users,DC=my,DC=domen,DC=ru"
>
>Чтобы не мучать подскажу сразу (хотя админская мудрость гласит - дай человеку
>потра^w^w^w^w разобраться :) Попробуйте всместо OU=Users - CN=Users ... это хоть
>и LDAP но - M$ LDAP :)))Большое спасибо за совет, но не помогло :(
Так что "потра^w^w^w^w" и стараюсь разобраться :)WBR, Pep.
Доброго времени суток!Большое спасибо bass'у и L.Torvalds'у :)
Проблема решена. Дело было в "кривом" запросе к AD.
После изменения user="cn=ldap,ou=Users,dc=my,dc=domen,dc=ru" на user=ldap, AD стал отвечать на вопросы :)
Хотя, имхо, вариант user="cn=ldap,ou=Users,dc=my,dc=domen,dc=ru" выглядит логичным и правильным...WBR, Pep.