В общем настроил постфикс, отсылка работает. Проверяет имя и пароль в AD.Не знаю как настроить прием почты для домена test.com
Создан пользователь test, пароль test, поле почта в АД у него test@test.comВот конфиг майн.кф:
virtual_mailbox_domains = test.com
virtual_mailbox_base = /mine/etc/postfix/mail
virtual_mailbox_maps = ldap:/mine/etc/postfix/ldap_aliases.cfа вот лдап_алиасес.кф:
domain = domain.tld
server_host = dc.domain.tld
server_port = 389
search_base = DC=domain,DC=tld
query_filter = (&(mail=%s))
result_attribute = mail
bind = yes
version = 3
И при попытке отправить почту на test@test.com batmail пишет: Письмо не отправлено. Сервер сообщает: 5.1.1 <test@test.com>: Recipient address rejected: User unknown in virtual mailbox tableВот что в auth.log:
localhost postfix/smtpd[36094]: auxpropfunc error invalid parameter supplied
localhost saslauthd[24523]: Retrying authentication
Вот что в debug.log:localhost postfix/smtpd[36094]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: ldapdb
localhost saslauthd[24523]: ldap_simple_bind() failed -1 (Can't contact LDAP server).
A
А вот что в messages.log:localhost postfix/smtpd[36070]: auxpropfunc error invalid parameter supplied
localhost postfix/smtpd[36094]: auxpropfunc error invalid parameter supplied
Помогите. Что где не так...? Ведь проверка на отсылку работает (это связка postfix + cyrus-sasl), а вот когда отсылает - не может проверить наличие данного пользователя/поля в AD? Я не понимаю...
>Вот что в debug.log:
>
>localhost postfix/smtpd[36094]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: ldapdb
>localhost saslauthd[24523]: ldap_simple_bind() failed -1 (Can't contact LDAP server).
>AНе контачит с LDAP сервером. Права на чтение из AD у постфикса и saslauthd имеются? Что у тебя в /usr/lib/smtp.conf написано?
>Ведь проверка на отсылку работает (это связка postfix + cyrus-sasl), а вот когда отсылает - >не может проверить наличие данного пользователя/поля в AD?
Ну, постфикс из my_networks может отсылать и без проверки пользователя, так что не факт, что у тебя проверка на отсылку работает. А принимать он действительно не принимает, поскольку не может по каким-то причинам соединиться с LDAP сервером и проверить по нему локальных пользователей. Отсюда и recipient unknown.
>
>>Вот что в debug.log:
>>
>>localhost postfix/smtpd[36094]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: ldapdb
>>localhost saslauthd[24523]: ldap_simple_bind() failed -1 (Can't contact LDAP server).
>>A
>
>Не контачит с LDAP сервером. Права на чтение из AD у постфикса
>и saslauthd имеются? Что у тебя в /usr/lib/smtp.conf написано?
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
allowanonymouslogin: no
log_level: 3
Какие мысли?
>Ну, постфикс из my_networks может отсылать и без проверки пользователя, так что
>не факт, что у тебя проверка на отсылку работает. А принимать
>он действительно не принимает, поскольку не может по каким-то причинам соединиться
>с LDAP сервером и проверить по нему локальных пользователей. Отсюда и
>recipient unknown.У меня убраны my_networks. Есть разрешение отсылать только тем, кто авторизовался в сасл2. Если я хоть что-то поменяю в smtpd.conf то авторизация (на отсыл) не проходит. А к текущей конфигурации - авторизует.
Мне кажется, что если постфикс проверку делает через сасл2 отсылающего нормально, то у него проблемы именно с коннектом в АД и проверкой на наличие там пользователя/имейла. Он же скомпилен со своей поддержкой лдап. А сасл2 - внешний модуль. Если бы заставить его и еще проверять наличие пользователей через сасл2...И вот еще, есть мысль, попробовать использовать опенлдап как прокси к AD.
>
>pwcheck_method: saslauthd
>mech_list: PLAIN LOGIN
>allowanonymouslogin: no
>log_level: 3
>>
>У меня убраны my_networks. Есть разрешение отсылать только тем, кто авторизовался в
>сасл2. Если я хоть что-то поменяю в smtpd.conf то авторизация (на
>отсыл) не проходит. А к текущей конфигурации - авторизует.
>
Вам виднее, конечно, но я не понимаю, чего вдруг saslauthd ругается на невозможность проконтачить с ldap сервером. smtp.conf как раз говорит, что у вас проверка проверка паролей через saslauthd, т.е. должно быть он запущен командой salauthd -a ldap и далее по ману (man saslauthd):
ldap (All platforms that support OpenLDAP 2.0 or higher)Authenticate against an ldap server. The ldap configuration
parameters are read from /usr/local/etc/saslauthd.conf. The
location of this file can be changed with the -O parameter.
See the LDAP_SASLAUTHD file included with the distribution for
the list of available parameters.>Мне кажется, что если постфикс проверку делает через сасл2 отсылающего нормально, то у >него проблемы именно с коннектом в АД и проверкой на наличие там пользователя/имейла. Он >же скомпилен со своей поддержкой лдап. А сасл2 - внешний модуль. Если бы заставить его и >еще проверять наличие пользователей через сасл2...
Хотя тут вы, похоже, правы, ошибка с "recipient address rejected" действительно не связана с сасл2. Остается только проверить, что {ldapsearch -h dc.domain.tld -b"DC=domain,DC=tld" (&(mail=test@test.com)) mail} выдает что-то осмысленное без авторизации. Вроде бы (по LDAP-README) postfix опрашивает LDAP сервер как анонимный пользователь без пароля.
>Хотя тут вы, похоже, правы, ошибка с "recipient address rejected" действительно не
>связана с сасл2. Остается только проверить, что {ldapsearch -h dc.domain.tld -b"DC=domain,DC=tld"
>(&(mail=test@test.com)) mail} выдает что-то осмысленное без авторизации. Вроде бы (по LDAP-README)
>postfix опрашивает LDAP сервер как анонимный пользователь без пароля.
Вы верно меня поняли. К этому я и клоню. А ваша строка вот что выдала: Badly placed ()'s.
Кстати, не нашел я в мане как сделать этот анонимный запрос.
>Вы верно меня поняли. К этому я и клоню. А ваша строка
>вот что выдала: Badly placed ()'s.
>Кстати, не нашел я в мане как сделать этот анонимный запрос.ldapsearch -h dc.domain.tld -b"DC=domain,DC=tld" "(&(mail=test@test.com))" mail
Да он и так анонимный. Если AD допускает чтение без авторизации, то все нормально.
>>Вы верно меня поняли. К этому я и клоню. А ваша строка
>>вот что выдала: Badly placed ()'s.
>>Кстати, не нашел я в мане как сделать этот анонимный запрос.
>
>ldapsearch -h dc.domain.tld -b"DC=domain,DC=tld" "(&(mail=test@test.com))" mail
>
>Да он и так анонимный. Если AD допускает чтение без авторизации, то
>все нормально.
Так лучше :) Но не намного... Вот результат:localhost# ldapsearch -h dc2.domain.tld -b"DC=domain,DC=tld" "(&(mail=test))" mail
# extended LDIF
#
# LDAPv3
# base <DC=domain,DC=tld> with scope sub
# filter: (&(mail=test))
# requesting: mail
## search reference
ref: ldap://domain.tld/CN=Configuration,DC=domain,DC=tld# search result
search: 2
result: 0 Success# numResponses: 2
# numReferences: 1
localhost#
Имейл я сменил на test (без @test.com)... Что-то не так? Есть идеи?
Параллельно пробую установить perl-ldap, чтобы проверить работает ли он.
Я могу получить только список компютеров. Не более.Вот скрипт. Попробуйте у себя его запустить. Может что выдаст...
#!/usr/bin/perl
use Net::LDAP;
$ldap = Net::LDAP->new("dc2.domain.tld");
$ldap->bind("CN=test,DC=domain,DC=tld", password=>"test");
#$mesg = $ldap->search(filter=>"(objectClass=*)", base=>"dc=domain,dc=tld");
$mesg = $ldap->search(filter=>"(objectClass=*)", base=>"CN=Users,DC=domain,DC=tld");
@entries = $mesg->entries;
foreach $entry (@entries) {
@attrs = $entry->attributes();
foreach $attr (@attrs) {
printf("%s: %s\n", $attr, $entry->get_value($attr));
}
print "\n";}
Вот. Если закомментировать вторую строчку, а первую открыть - то список компов. Иначе ничего.Если ругнется на недостающий модуль набрать: perl -MCPAN -e shell
Если спросит - сказать no
Потом: install Net::LDAPСкажите что дало...
>>>Вы верно меня поняли. К этому я и клоню. А ваша строка
>>>вот что выдала: Badly placed ()'s.
>>>Кстати, не нашел я в мане как сделать этот анонимный запрос.
>>
>>ldapsearch -h dc.domain.tld -b"DC=domain,DC=tld" "(&(mail=test@test.com))" mail
>>
>>Да он и так анонимный. Если AD допускает чтение без авторизации, то
>>все нормально.
>
>
>Так лучше :) Но не намного... Вот результат:
>
>localhost# ldapsearch -h dc2.domain.tld -b"DC=domain,DC=tld" "(&(mail=test))" mail
># extended LDIF
>#
># LDAPv3
># base <DC=domain,DC=tld> with scope sub
># filter: (&(mail=test))
># requesting: mail
>#
>
># search reference
>ref: ldap://domain.tld/CN=Configuration,DC=domain,DC=tld
>
># search result
>search: 2
>result: 0 Success
>
># numResponses: 2
># numReferences: 1
>localhost#
>
>
Значит чтение требует авторизации. Т.е. надо либо ее как-то отменить, либо как-то дрессировать постфикс, чтобы он авторизовался перед запросами.
ldapsearch -D cn=myaccount,cn=Users,dc=domain,dc=tld -b "cn=users,dc=domain,dc=tld" -x -W -h dc.domain.tld > ldap-dump.ldif
у меня работает на AD, но только с вводом пароля.
>Имейл я сменил на test (без @test.com)... Что-то не так? Есть идеи?
>
>Параллельно пробую установить perl-ldap, чтобы проверить работает ли он.
если службы сертификатов в ad ставить не хочеться (для использования clear text аутентификации), и запросы в чистом виде делать тоже нельзя, тогда нужно познакомиться с немного другой составляющей ad -- kerberos.
тогда постфикс сможет делать запросы прозрачно.
>если службы сертификатов в ad ставить не хочеться (для использования clear text
>аутентификации), и запросы в чистом виде делать тоже нельзя, тогда нужно
>познакомиться с немного другой составляющей ad -- kerberos.
>тогда постфикс сможет делать запросы прозрачно.
Каким образом? Через проксирование пользовательских билетов? Нет ничего гнуснее, чем заставить одну службу автоматически аутентифицироваться в Kerberos для доступа к другой службе.
>>если службы сертификатов в ad ставить не хочеться (для использования clear text
>>аутентификации), и запросы в чистом виде делать тоже нельзя, тогда нужно
>>познакомиться с немного другой составляющей ad -- kerberos.
>>тогда постфикс сможет делать запросы прозрачно.
>
>
>Каким образом? Через проксирование пользовательских билетов? Нет ничего гнуснее, чем заставить одну
>службу автоматически аутентифицироваться в Kerberos для доступа к другой службе.
>нет, выдать пользователю postfix из ad отдельный билетик
ну вообщето kerberos как бы для этого и делался
да и .... -- я не понта ради, это просто пример что можно ещё и ТАК.
>Значит чтение требует авторизации. Т.е. надо либо ее как-то отменить, либо как-то
>дрессировать постфикс, чтобы он авторизовался перед запросами.
>ldapsearch -D cn=myaccount,cn=Users,dc=domain,dc=tld -b "cn=users,dc=domain,dc=tld" -x -W -h dc.domain.tld > ldap-dump.ldif
>у меня работает на AD, но только с вводом пароля.
man 5 ldap.table рулит! В ldap_alias.cf можно вписать два параметра (имя пароль) по которым postfix может авторизоваться на ldap сервере.
bind_dn (default: empty)
If you do have to bind, do it with this distin-
guished name. Example:bind_dn = uid=postfix, dc=your, dc=com
bind_pw (default: empty)
The password for the distinguished name above. If
you have to use this, you probably want to make the
map configuration file readable only by the Postfix
user. When using the obsolete ldap:ldapsource syn-
tax, with map parameters in main.cf, it is not pos-
sible to securely store the bind password. This is
because main.cf needs to be world readable to allow
local accounts to submit mail via the sendmail com-
mand. Example:bind_pw = postfixpw
>Значит чтение требует авторизации. Т.е. надо либо ее как-то отменить, либо как-то
>дрессировать постфикс, чтобы он авторизовался перед запросами.
>ldapsearch -D cn=myaccount,cn=Users,dc=domain,dc=tld -b "cn=users,dc=domain,dc=tld" -x -W -h dc.domain.tld > ldap-dump.ldif
>у меня работает на AD, но только с вводом пароля.
У меня тоже сработало. Уже смогу экстрактировать имейлы пользователей в обычный hash.Однако postmap ничего не выдает. И при попытке отправить почту на пользователя с имейлом указанным в поле "почта" в ад - ошибка, и вот что в логах пишет:
# cat ./auth.log
Apr 4 10:28:29 localhost postfix/smtpd[1273]: auxpropfunc error invalid parameter supplied
Apr 4 10:28:29 localhost saslauthd[424]: Retrying authentication
# cat ./debug.log
Apr 4 10:28:29 localhost saslauthd[424]: ldap_simple_bind() failed -1 (Can't contact LDAP server).
# cat ./messages
Apr 4 10:28:29 localhost postfix/smtpd[1273]: auxpropfunc error invalid parameter suppliedТ.е. здесь вроде бы проблема именно во взаимодействии постфикса и лдапа напрямую. Потому как (повторюсь) авторизация идет через сасл2 и проходит успешно. Значит надо как-то по особому компилить постфикс...
Вот мой скрипт конфига:
make -f Makefile.init makefiles 'CCARGS= \
-DHAS_LDAP -I/usr/local/include \
-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl2' \
'AUXLIBS=-L/usr/local/lib -R/usr/local/lib -lsasl2 -lldap -llber';
Если не заведется - плюну. Буду ldapsearch скриптом дергать в обычных хеш.
>>У меня тоже сработало. Уже смогу экстрактировать имейлы пользователей в обычный hash.Возьмите параметры успешного ldapsearch (которым вы делаете hash) и подставьте их в ldap_aliases.cf
-b -> search_base
-D -> bind_dn
{пароль, который у вас спрашивает ldapsearch, _открытым тестом_!} -> bind_pwПоменяйте также version с 3 на 2. С query_filter и result_attribute всё (наверное) нормально.
А как всё же у вас запущен saslauthd? Или что написано в saslauthd.conf? Это к делу, может быть, и не относится, но я не понял, какого хрена он лезет и не может залезть в LDAP сервер.
После перекомпиляции заработало. Полагаю, что неправильно скомпиленный постфикс не мог сработать с АД.
Спасибо за советы!
актуально???
тогда ....
1. есть в виндах хорошая чтука -- adsi.msc (блин могу ошибаться -- нет их под рукой), или ldapbrowser -- они помогут посмотреть устройство LDAP в AD и потренироваться в запросах.
2. postmap -- очень правильная команда при поиске "неисправностей", особенно с ключём -q