SMTP-авторизация Sendmail в AD

На доскональное знание данной темы, не может претендовать, пожалуй ни один спец, из ныне живущих на земле. ;-)
Так поможем друг другу.

Модераторы: Trinity admin`s, Free-lance moderator`s

SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

SMTP-авторизация Sendmail в AD

Сообщение SchTiRlic » 21 авг 2008, 18:26

Всем привет

На этом форуме уже обсуждалась подобная тема вот здесь http://www.3nity.ru/viewtopic.htm?t=5097. У меня очень похожая ситуация, но в теме так и не было описано конечное решение.

Стоит сл. задача:
Необходимо разрешить релеинг почты на сервере (ОС FreeBSD 6.2 почтовая система Sendmail) авторизованным пользователям. SMTP-авторизацию производить на основе AD по LDAP.

Предположительная связка компонентов:
Sendmail - Sasl - Saslauthd - Openldap
ну или накрайняк (что я как понимаю сложнее)
Sendmail - Sasl - Saslauthd - Pam - Pam Ldap - Openldap (для данной схем тоже не всё так тривиально)

Я установил, собрал и настроил следующее:
- Установил из портов SASL2, Saslauthd (с опцией WITH_OPENLDAP), Openldap-sasl-client.
- Собрал системный Sendmail с поддержкой LDAP и SASL2.
- Настроил saslauthd.conf сл. образом:
ldap_servers: ldap://сервер_AD/
ldap_bind_dn: cn=LDAPSearcher,cn=Users,dc=domain,dc=ru
ldap_bind_pw: password
ldap version: 3
ldap_search_base: dc=domain,dc=ru
ldap_filter: (sAMAccountName=%u)
ldap_debug: -1
- В rc.conf прописал флаги запуска saslauthd:
saslauthd_enable="YES"
saslauthd_flags="-a ldap -O /usr/local/etc/saslauthd.conf"
- В /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd

Доп. информация:
- AD 2003
- Системный sendmail-8.13.8
- ОС FreeBSD 6.2
- Пакеты SASL:
cyrus-sasl-2.1.22 RFC 2222 SASL (Simple Authentication and Security Layer)
cyrus-sasl-ldapdb-2.1.22 SASL LDAPDB auxprop plugin
cyrus-sasl-saslauthd-2.1.22 SASL authentication server for cyrus-sasl2
- Пакеты LDAP:
openldap-sasl-client-2.4.3.a Open source LDAP client implementation

Настроеное проверял так:
- Команда ldapsearch делает выборку корректно:
ldapsearch -h сервер_AD -D "cn=LDAPSearcher,cn=Users,dc=domain,dc=ru" -w "password" -x -b "dc=domain,dc=ru"
- Запускал tcpdump -i de0 port 389 + запускал в дебаговом режиме saslauthd -a ldap -d + выполнял testsaslauthd -u sch -p password. В ответ получал: 0: NO "authentication failed". Тспдамп ничего не показывал, вывод запросы вообще не отсылаются на АД-сервер.



В чём может быть проблема? почему не проходит аутентификация? Что я мог недонастроить?

Так же буду благодарен ссылкам на полезн статьи и инфу по развёртыванию подобного комплекса (именно в связке с Sendmail).

Заранее спасибо.

squirL
Advanced member
Сообщения: 114
Зарегистрирован: 11 апр 2006, 20:16
Откуда: Киев

Сообщение squirL » 21 авг 2008, 22:46

сразу: подобным связыванием не занимался. но. я бы пробовал связку: sendmail -> pam -> winbind -> AD. такой вариант не смотрели? :)

учить каждый сервис лазить в LDAP через OpenLDAP - не лучший вариант. а через pam_winbind - завязывал в AD не мало сервисов, не вижу, чем принципиально может отличаться.
каким образом осуществляется SSL/TLS к sendmail, в данном случае, дело десятое.

SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

Сообщение SchTiRlic » 22 авг 2008, 09:33

Такую связку первый раз встречаю. =)) А вы не могли бы ссылками поделиться на материалы по данной теме?

squirL
Advanced member
Сообщения: 114
Зарегистрирован: 11 апр 2006, 20:16
Откуда: Киев

Сообщение squirL » 22 авг 2008, 14:51

SchTiRlic писал(а):Такую связку первый раз встречаю. =)) А вы не могли бы ссылками поделиться на материалы по данной теме?
смысл в следующем - чтобы на этапе auth, когда sendmail устанавливает кто есть такой юзер Vasya, он делал это через PAM. а в pam stack управление на себя брал winbind от samba и вынимал юзеров из AD. у меня sendmail подобным образом берет пользователей из openldap, через pam_ldap.
ссылки - курите доки по самбе.
вот  эти ссылки наведут, надеюсь, на нужные мысли:
http://www.opennet.ru/base/net/pam_auth ... l.txt.html
http://www.lissyara.su/?id=1455

Аватара пользователя
Гхост-цзы
Advanced member
Сообщения: 55
Зарегистрирован: 14 окт 2004, 18:32
Откуда: Тяньцзин

Re: SMTP-авторизация Sendmail в AD

Сообщение Гхост-цзы » 22 авг 2008, 23:50

SchTiRlic писал(а):выполнял testsaslauthd -u sch -p password. В ответ получал: 0: NO "authentication failed".

В чём может быть проблема? почему не проходит аутентификация? Что я мог недонастроить?
в конфиге saslauthd принципиально всё нормально (пожалуй проблема может быть только, если server_AD указан по имени и это имя не может разрешиться в IP; тогда вместо имени достаточно просто вписать IP-адрес);
остаются варианты: - не запущен демон saslauthd; - сендмейл собран без поддержки sasl -- каков вывод команды
sendmail -d0.1 -bv root
-- в секции Compiled with есть присутствие sasl?

Аватара пользователя
Stranger03
Сотрудник Тринити
Сотрудник Тринити
Сообщения: 12979
Зарегистрирован: 14 ноя 2003, 16:25
Откуда: СПб, Екатеринбург
Контактная информация:

Re: SMTP-авторизация Sendmail в AD

Сообщение Stranger03 » 23 авг 2008, 14:36


SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

Сообщение SchTiRlic » 25 авг 2008, 13:59

Гхост-цзы
Сервер AD указан IP-адресом.

[root@gw ~]# ps ax | grep sasl
 960  ??  Ss     0:00.04 /usr/local/sbin/saslauthd -a ldap
 961  ??  S      0:00.00 /usr/local/sbin/saslauthd -a ldap
 962  ??  S      0:00.00 /usr/local/sbin/saslauthd -a ldap
 963  ??  S      0:00.00 /usr/local/sbin/saslauthd -a ldap
 964  ??  S      0:00.00 /usr/local/sbin/saslauthd -a ldap
 966  p0  L+     0:00.03 grep sasl


[root@gw ~]# echo \n | sendmail -bv -d0.1
Version 8.13.8
Compiled with: DNSMAP LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8
               MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS
               PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS USERDB
               USE_LDAP_INIT XDEBUG

============ SYSTEM IDENTITY (after readcf) ============
     (short domain name) $w = gw
 (canonical domain name) $j = gw.stream.chk
        (subdomain name) $m = stream.chk
             (node name) $k = gw.stream.chk
========================================================

Recipient names must be specified

[root@gw ~]# cat /etc/rc.conf

# -- sysinstall generated deltas -- # Tue Aug 12 15:52:42 2008
# Created: Tue Aug 12 15:52:42 2008
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.

# Настройки сетевого интерфейса
defaultrouter="ip-адрес"
hostname="gw.stream.chk"
ifconfig_de0="inet ip-адрес  netmask 255.255.255.0"
ipv6_enable="NO"

#Настройки демона inetd, необходимо для запуска POP3-сервиса
inetd_enable="YES"

#Поддержка русского языка
keymap="ru.koi8-r"

#Автоматический запуск сетевых сервисов и задание их параметров
sendmail_enable="YES"

sshd_enable="YES"
sshd_flags="-4"

named_enable="YES"
named_flags="-4"

syslogd_flags="-4"

saslauthd_enable="YES"
saslauthd_flags="-a ldap"

В одной консоли набираю:
[root@gw ~]# saslauthd -n 1 -a ldap -d
saslauthd[1045] :main            : num_procs  : 1
saslauthd[1045] :main            : mech_option: NULL
saslauthd[1045] :main            : run_path   : /var/run/saslauthd
saslauthd[1045] :main            : auth_mech  : ldap
saslauthd[1045] :ipc_init        : using accept lock file: /var/run/saslauthd/mux.accept
saslauthd[1045] :detach_tty      : master pid is: 0
saslauthd[1045] :ipc_init        : listening on socket: /var/run/saslauthd/mux
saslauthd[1045] :main            : using process model

В другой:
[root@gw ~]# testsaslauthd -u LDAPSearcher -p password
0: NO "authentication failed"

В первой в ответ получаю:
saslauthd[1045] :get_accept_lock : acquired accept lock
saslauthd[1045] :rel_accept_lock : released accept lock
saslauthd[1045] :do_auth         : auth failure: [user=LDAPSearcher] [service=imap] [realm=] [mech=ldap] [reason=Unknown]
saslauthd[1045] :do_request      : response: NO
saslauthd[1045] :get_accept_lock : acquired accept lock

Я уже заколебалсо. Я всё по новой пересобрал.

Сначала собрал сасл из портов, потом собрал опенлдап клиента с саслом из портов, потом собрал салаусд из портов. Пересобрал сендмейл.

Ничво не работает. Как я понимаю запросы к АД даже не уходят. Ничво даж предположитьб не могу. МОжет собралось криво, а как тогда проверить? Может не подтягивает демон себе конфигурационный файл, но я уже пробовал во флагах запуска указать полный путь до конфигурационного файла. МОжет есть ещё какие диагностические проверки на корректность сборки чтобы выявить что было упущено?

Я уже отчаялсо и подумываю реализовать вариант который предлагает squirL, но так хочется довести до конца ту конфигурацию которую задумал. Уже неск дней с ней сижу.

SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

Сообщение SchTiRlic » 26 авг 2008, 12:11

Ещё хотелось бы добавить что на этапе сборки saslauthd из портов выводились варнинги на тему того что что то там не так с libtools'ами.

Аватара пользователя
Nikola
member
Сообщения: 20
Зарегистрирован: 18 мар 2004, 19:34
Откуда: Arhangelsk, Russia

Сообщение Nikola » 26 авг 2008, 16:59

Не знаю что автор сделал не так.
Но как вариант могу предположить, что у автора не Windows 2003 Server, а Windows 2003 R2.
Т.к. мне удалось заставить идентифицироваться на AD при отправке через SMTP. Но у себя в конторе как раз 2003 R2 и testsaslauthd ругается .0: NO "authentication failed"
Exit 255
Так же, в случае простого 2003 сервера, рекомендую в resolv.conf dns сервером прописать сервак с AD. У меня такой финт прошёл нормально.
Так же в saslauthd.conf должно быть не так
ldap_bind_dn: cn=LDAPSearcher,cn=Users,dc=domain,dc=ru
а вот так
ldap_bind_dn: LDAPSearcher
Т.е. имя пользователя, с помощью которого осущесствляем поиск в AD, т.е. такой пользователь должен обязательно быть в AD и с паролем (можно простым юзверем)  :)

SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

Сообщение SchTiRlic » 27 авг 2008, 18:00

Дело в том что кажись запросы и не отправляются. Я корректность обращения и не проверяю.
tcpdump -i de0 dst host сервер_AD вообще ничего не отображает при выполнении тестовых хапросов testsaslauthd.

Я подозреваю что дело во взаимосвязи модулей/компонентов всего этого комплекса. Может быть есть какие то средства (програмы, команды) диагностики для выявления корректности взаимосвязи.

Изветсно что клиент работает коректно. ldapsearch работает. Авторизация в Sendmail тоже, значит что Sendmail+SASL+Saslauthd -a getpwent тоже работает корректно. А вот с ldaз не работат. МОжет saslauthd  не корреткно собран с поддержкой ldap? Или лдап клиент некоретно собран с поддержкой sasl'a?


Sendmail - SASL - Saslauthd - LDAPClient - LDAP реусрс

Получается что от Sendmail до saslauthd работает корректно, от LDAPClient до LDAP ресурса тоже корректно. А вот от Saslatuhd до LDAPClient неизвестно.


При сборке saslauthd WITH_OPENLDAP вылезло несколько варнингов, что то по поводу невозможности нахождения libtool или что то вроде того.

Аватара пользователя
Гхост-цзы
Advanced member
Сообщения: 55
Зарегистрирован: 14 окт 2004, 18:32
Откуда: Тяньцзин

Сообщение Гхост-цзы » 27 авг 2008, 23:32

Nikola писал(а): Так же в saslauthd.conf должно быть не так
ldap_bind_dn: cn=LDAPSearcher,cn=Users,dc=domain,dc=ru
а вот так
ldap_bind_dn: LDAPSearcher
не надо вводить людей в заблуждение -- man по saslauthd-ldap рекомендует указывать полный ldap_bind_dn, а не урезанное недоразумение
Но как вариант могу предположить, что у автора не Windows 2003 Server, а Windows 2003 R2.
это предположение, мягко говоря, нелепо -- даже как вариант   :D

Аватара пользователя
Гхост-цзы
Advanced member
Сообщения: 55
Зарегистрирован: 14 окт 2004, 18:32
Откуда: Тяньцзин

Сообщение Гхост-цзы » 28 авг 2008, 00:22

SchTiRlic писал(а):Дело в том что кажись запросы и не отправляются.
именно так; что выдают netstat -npl|grep sasl и ls -l /var/state/saslauthd/mux?
попробуй из консоли запустить
/usr/local/sbin/saslauthd -a ldap -O /путь_к_saslauthd.conf &
если и после этого tcpdump никак не отреагирует на testsaslauthd, это скорее всего проблемы с сетевыми настройками -- сомнительно, чтобы при сборке хоть pkg_add -vr openldap23-sasl-client, хоть при сборке из портов   нарушилась какая-либо "связь компонентов" (такое возможно только при ручной сборке ./configure && make && make install; как-то на старенькой слаквари мне не удалось подружить версии sasl и кербероса -- всё вроде скомпилировалось, saslauthd -a kerberos5 запускался, но testsaslauthd не проходил; но даже в этом случае tcpdump фиксировал запросы к DC)
что то по поводу невозможности нахождения libtool или что то вроде того.
что мешает выполнить pkg_add -vr libtool?

Аватара пользователя
Nikola
member
Сообщения: 20
Зарегистрирован: 18 мар 2004, 19:34
Откуда: Arhangelsk, Russia

Сообщение Nikola » 28 авг 2008, 10:20

не надо вводить людей в заблуждение -- man по saslauthd-ldap рекомендует указывать полный ldap_bind_dn, а не урезанное недоразумение
Именно в таком "урезанном" варианте у меня под фрёй и заработало. В варианте с полным ldap_bind_dn нет. Так что опыт использования против Ваших слов.
это предположение, мягко говоря, нелепо -- даже как вариант
Потрудитесь объяснить, а то Вы возможно даже и не знаете, что AD LDAP в R2 слегка расширен нежели в обычном варианте?

SchTiRlic
У вас cyrus-sasl-saslauthd установлен с WITH_OPENLDAP?
Было бы так же неплохо если бы дали, что именно вам выдаёт на экран saslauthd -a ldap -d -V -n 0  при testsaslauthd -u <user> - p <passwd>
Ну или сами посмотрите пытается он подключиться к ldap_servers: ldap://сервер_AD/
Должно быть что то типа
ldap_connect_to_host: TCP server_ad:389
ldap_new_socket: 9
ldap_prepare_socket: 9
ldap_connect_to_host: Trying ip_server_ad:389

SchTiRlic
Junior member
Сообщения: 13
Зарегистрирован: 21 авг 2008, 18:19
Откуда: Казань

Сообщение SchTiRlic » 28 авг 2008, 14:20

Гхост-цзы

[root@gw ~]# netstat npl | grep sasl
c1b7e118 stream      0      0 c1d57000        0        0        0 /var/run/saslauthd/mux

[root@gw ~]# ls -l /var/run/saslauthd/mux
srwxrwxrwx  1 root  mail  0 Aug 28 01:11 /var/run/saslauthd/mux

[root@gw ~]# /usr/local/sbin/saslauthd -a ldap -d -O /usr/local/etc/saslauthd.conf  &
[1] 7748
saslauthd[7748] :main            : num_procs  : 5
saslauthd[7748] :main            : mech_option: /usr/local/etc/saslauthd.conf
saslauthd[7748] :main            : run_path   : /var/run/saslauthd
saslauthd[7748] :main            : auth_mech  : ldap
saslauthd[7748] :ipc_init        : using accept lock file: /var/run/saslauthd/mux.accept
saslauthd[7748] :detach_tty      : master pid is: 0
saslauthd[7748] :ipc_init        : listening on socket: /var/run/saslauthd/mux
saslauthd[7748] :main            : using process model
saslauthd[7748] :have_baby       : forked child: 7749
saslauthd[7749] :get_accept_lock : acquired accept lock
saslauthd[7748] :have_baby       : forked child: 7750
saslauthd[7748] :have_baby       : forked child: 7751
saslauthd[7748] :have_baby       : forked child: 7752
saslauthd[7750] :get_accept_lock : acquired accept lock
saslauthd[7749] :rel_accept_lock : released accept lock
saslauthd[7749] :do_auth         : auth failure: [user=sch] [service=imap] [realm=] [mech=ldap] [reason=Unknown]
saslauthd[7749] :do_request      : response: NO

tcpdimp молчит.


В том то всё  дело что libtool у меня стоит.

Nikola
Saslauthd с WITH_OPENLDAP собирался.
[root@gw ~]# ldd /usr/local/sbin/saslauthd
/usr/local/sbin/saslauthd:
       libgssapi.so.8 => /usr/lib/libgssapi.so.8 (0x28089000)
       libkrb5.so.8 => /usr/lib/libkrb5.so.8 (0x28097000)
       libasn1.so.8 => /usr/lib/libasn1.so.8 (0x280cb000)
       libcrypto.so.4 => /lib/libcrypto.so.4 (0x280ec000)
       libroken.so.8 => /usr/lib/libroken.so.8 (0x281df000)
       libcrypt.so.3 => /lib/libcrypt.so.3 (0x281eb000)
       libcom_err.so.3 => /usr/lib/libcom_err.so.3 (0x28203000)
       libpam.so.3 => /usr/lib/libpam.so.3 (0x28205000)
       libldap-2.3.so.2 => /usr/local/lib/libldap-2.3.so.2 (0x2820c000)
       liblber-2.3.so.2 => /usr/local/lib/liblber-2.3.so.2 (0x2823c000)
       libc.so.6 => /lib/libc.so.6 (0x28247000)
       libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x2832c000)
       libssl.so.4 => /usr/lib/libssl.so.4 (0x28341000)

Библиотеки с ldap подключены.

[root@gw ~]# /usr/local/sbin/saslauthd -a ldap -d -n 0
saslauthd[8129] :main            : num_procs  : 0
saslauthd[8129] :main            : mech_option: NULL
saslauthd[8129] :main            : run_path   : /var/run/saslauthd
saslauthd[8129] :main            : auth_mech  : ldap
saslauthd[8129] :detach_tty      : master pid is: 0
saslauthd[8129] :ipc_init        : listening on socket: /var/run/saslauthd/mux

[root@gw ~]# testsaslauthd -u sch -p password
0: NO "authentication failed"

saslauthd[8129] :do_auth         : auth failure: [user=sch] [service=imap] [realm=] [mech=ldap] [reason=Unknown]
saslauthd[8129] :do_request      : response: NO

В том то и дело что не пытается к лдап серверу подключиться... как будто конфиг некорректно грузит. Или не находит его, даже когда его указываю.

=(

Аватара пользователя
Гхост-цзы
Advanced member
Сообщения: 55
Зарегистрирован: 14 окт 2004, 18:32
Откуда: Тяньцзин

Сообщение Гхост-цзы » 29 авг 2008, 12:32

SchTiRlic писал(а): В том то и дело что не пытается к лдап серверу подключиться... как будто конфиг некорректно грузит.
при тщательном рассмотрении таки нашёл я у тебя косяк в конфиге, из-за которого не наблюдается подключение к лдап-каталогу:
строка ldap version: 3
должно быть  ldap_version: 3
Nikola писал(а): Именно в таком "урезанном" варианте у меня под фрёй и заработало. В варианте с полным ldap_bind_dn нет. Так что опыт использования против Ваших слов.
не надо абсолютизировать свой опыт; всё замечательно работает с полным dn (для интереса попробовал его урезать -- как ни странно, тоже работает :D; man рекомендует полный dn, потому шальная мысль резать его у меня даже не возникала)
Потрудитесь объяснить, а то Вы возможно даже и не знаете, что AD LDAP в R2 слегка расширен нежели в обычном варианте?
мне нет необходимости особо утруждаться, т.к. и с R2 аутентификация посредством saslauthd у меня успешно отрабатывает; расширение схемы в R2, которое легко увидеть ldapsearch-ем, мизерно и никак не может повлиять на механизм аутентификации

Ответить

Вернуться в «Серверы - ПО, Unix подобные системы»

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

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