The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

SMTP авторизация пользователей в Active Ddirectory (Postfix + SASL) (linux mail win postfix auth domain sasl imap smtp ldap)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: linux, mail, win, postfix, auth, domain, sasl, imap, smtp, ldap,  (найти похожие документы)
From: Радик Усманов <radiku@gmail.com.> Date: Wed, 20 Apr 2005 11:25:05 +0600 (YEKST) Subject: SMTP авторизация пользователей в Active Ddirectory (Postfix + SASL) Настройка SASL для SMTP аутентификации пользователей в AD (MTA:Postfix) Установлен ASPLinux 9.2. В составе ASPLinux 9.2 идут следующие пакеты : (если некоторых раздражает магическое (как красная тряпка на быка) слово "ASPLinux" - все равно рекомендую дочитать до конца :) ) итак при инсталляции ASPLinux были установлены следующие пакеты : rpm -qa | grep sasl cyrus-sasl-plain-2.1.15 cyrus-sasl-md5-2.1.15 cyrus-sasl-gssapi-2.1.15 cyrus-sasl-2.1.15 cyrus-sasl-devel-2.1.15 postfix-2.0.16 после последнего обновления yum получили : rpm -qa | grep sasl cyrus-sasl-plain-2.1.18-2.2 cyrus-sasl-md5-2.1.18-2.2 cyrus-sasl-gssapi-2.1.18-2.2 cyrus-sasl-2.1.18-2.2 cyrus-sasl-devel-2.1.18-2.2 postfix как ни странно оcтался тот же :) самым сложным было настроить sasl так чтобы он проверял пароли пользователей из AD Windows 2000. (вообще то проверять можно многие атрибуты каталога active directory) Итак посмотрим конфиг /etc/saslauthd.conf cat /etc/saslauthd.conf ldap_servers: ldap://192.168.0.4/ ldap_bind_dn: CN=sasl_ldap_bind,CN=Users,DC=your_domain,DC=ru ldap_bind_pw: 842 ldap_version: 3 ldap_search_base: OU=SOME_DEP,DC=your_domain,DC=ru ldap_filter: (sAMAccountName=%u) #ldap_filter: (mail=%u) ldap_debug: -1 теперь разберем его построчно : ldap_servers - указывает на IP сервера windows 2000 с поднятой AD ldap_bind_dn - указывает контекст пользователя под которым мы биндимся к AD ldap_bind_pw - указывает пароль для пользователя под которым мы биндимся к AD ldap_version - указывает на версию ldap сервера ldap_search_base - указывает контекст в котором мы будем искать пользователей ldap_filter - указывает фильтр ldap (т.е. у каждого обьекта в AD есть набор атрибутов таких как полное имя , login name и т.д. (sAMAccountName=%u) - это как раз атрибут login name в AD (mail=%u) - это атрибут e-mail пользователя из AD Таким образом в приведенном выше примере мы будем биндить AD под пользователем sasl_ldap_bind с паролем 842 созданным нами в ветке Users в AD. А проверять поль- зователей которые хотят аутентификации будем в например созданном нами в AD - Organizational Unit - SOME_DEP. Внимание такие параметры как ldap_bind_dn и ldap_search_base - указывающие на контекст пользователя в AD лучше брать из windows утилиты ldp.exe которая поставляется в support tools. Порядок работы с этой улитой такой : 1. запускаем ldp.exe 2. connection -> connect 3. connection -> bind ( для чтения паролей например совсем необязательно чтобы пользователь под которым вы делаете bind обладал правами administratora - членства в группе Users - вполне достаточно) 4. view -> tree ( указываете контекст - например DC=your_domain,DC=ru) Далее наверное уже понятно т.е. просматриваем обьекты и их атрибуты. В общем полезно поизучать вывод утилиты ldp.exe Если хотите поискать в AD то делаем browse -> search - там необходимо будет опять же указать контекст в котором будет производится поиск (например DC=your_domain,DC=ru) а также Filter (например (sAMAccountName=Administrator)) затем нужно запустить демон saslauthd (предварительно в каталоге sysconfig в файле saslauthd указать флаг ldap для запуска демона cat saslauthd # Directory in which to place saslauthd's listening socket, pid file, and so # on. This directory must already exist. SOCKETDIR=/var/run/saslauthd # Mechanism to use when checking passwords. Run "saslauthd -v" to get a list # of which mechanism your installation was compiled to use. #MECH=shadow MECH=ldap # Additional flags to pass to saslauthd on the command line. See saslauthd(8) # for the list of accepted flags. FLAGS=-V Далее соответственно /sbin/service saslauthd start или на время проверки вот так: /usr/sbin/saslauthd -a ldap -d -n 1 -V Теперь нужно проверить как это работает - для этого запускаем /usr/sbin/testsaslauthd -u user_name_from_sasl_search_base_context -p password если в ответ говорит что OK - то все нормально появилась еще одна проблемка - тот postfix который я ставил из rpm (2.0.16) не подходил так как он был собран с поддержкой sasl версии 1. Качаем postfix с http://www.postfix.org на момент написания статьи это была версия 2.2.1 Распаковали - теперь необходимо собрать как его с поддержкой sasl (мне нужна была поддержка ldap, sasl, tls) make makefiles CCARGS="-I/usr/include -DHAS_LDAP -DUSE_SASL_AUTH \ -I/usr/include/sasl -DUSE_TLS" AUXLIBS="-L/usr/lib -lldap \ -L/usr/lib -llber -L/usr/lib -lsasl2 -lssl -lcrypto" make копируем основные файлы из /etc/postfix куда нибудь деинсталируем старый postfix (rpm -e postfix) make install - для нового postfix вертаем взад старые файлы конфигураций - перестриваем заново базы alias, transport и т.д. теперь необходимо в конфиге postfix (main.cf) сказать что мы желаем использовать smtp авторизацию через sasl cat /etc/postfix/main.cf | grep sasl enable_sasl_authentication = yes smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination broken_sasl_auth_clients = yes более подробно смотри в доке по postfix благо ее много :) перезапускаем postfix и ... не авторизирует - недоступен для postfix демон saslauthd - для этого необходимо в чирут postfixа скопировать /usr/lib/sasl2 пробуем еще раз - все заработало (у меня по крайней мере) : вот логи Outlook при сессии с авторизацией : 2005.04.04 21:23:59 SMTP (mail.your_company.ru): Begin execution 2005.04.04 21:23:59 SMTP (mail.your_company.ru): Port: 25, Secure: no, SPA: yes 2005.04.04 21:23:59 SMTP (mail.your_company.ru): Finding host 2005.04.04 21:23:59 SMTP (mail.your_company.ru): Connected to host 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 220 mail.your_company.ru ESMTP Postfix 2005.04.04 21:23:59 SMTP (mail.your_company.ru): [tx] EHLO user 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-mail.your_company.ru 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-PIPELINING 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-SIZE 10240000 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-VRFY 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-ETRN 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-AUTH PLAIN LOGIN GSSAPI DIGEST-MD5 CRAM-MD5 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250-AUTH=PLAIN LOGIN GSSAPI DIGEST-MD5 CRAM-MD5 2005.04.04 21:23:59 SMTP (mail.your_company.ru): <rx> 250 8BITMIME 2005.04.04 21:23:59 SMTP (mail.your_company.ru): Authorizing to server 2005.04.04 21:23:59 SMTP (mail.your_company.ru): [tx] AUTH LOGIN 2005.04.04 21:24:00 SMTP (mail.your_company.ru): <rx> 334 VNlm5hbWU6 2005.04.04 21:24:00 SMTP (mail.your_company.ru): [tx] cmFaW= 2005.04.04 21:24:00 SMTP (mail.your_company.ru): <rx> 334 UGFc3vcQ6 2005.04.04 21:24:00 SMTP (mail.your_company.ru): [tx] ***** 2005.04.04 21:24:01 SMTP (mail.your_company.ru): <rx> 235 Authentication successful 2005.04.04 21:24:01 SMTP (mail.your_company.ru): Authorized to host 2005.04.04 21:24:01 SMTP (mail.your_company.ru): Connected to host 2005.04.04 21:24:01 SMTP (mail.your_company.ru): [tx] MAIL FROM: <*****> 2005.04.04 21:24:01 SMTP (mail.your_company.ru): <rx> 250 Ok 2005.04.04 21:24:01 SMTP (mail.your_company.ru): [tx] RCPT TO: <*****> 2005.04.04 21:24:01 SMTP (mail.your_company.ru): <rx> 250 Ok 2005.04.04 21:24:01 SMTP (mail.your_company.ru): [tx] DATA 2005.04.04 21:24:01 SMTP (mail.your_company.ru): <rx> 354 End data with <CR><LF>.<CR><LF> 2005.04.04 21:24:01 SMTP (mail.your_company.ru): [tx] Все вышеперечисленное проверялось также и с Windows 2003 - работает. Буду рад если кому то эта статья поможет. Author : Radik Usmanov Date : 4.04.2005 E-Mail : <radiku@gmail.com.>

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, anonymous (??), 01:58, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тоесть тот, кто получил права пользователя, от которого на почтовом сервере запущен saslauthd (для простоты - рута на почтовом сервере), может слить базу всех пользователей ADS с паролями?
     
     
  • 2.2, sauron (ok), 07:10, 21/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. Демон получает лишь имя и пароль от клиента, а далее с этими параметрами подключается к LDAP серверу. Если все прошло удачно то saslauth разрешает воспользоваться ресурсами.
     

  • 1.3, xRAMx (?), 19:06, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошая статья. Многим будет полезна.
    Вместо ldp.exe можно использовать ADSIEdit
    из Support Tools
     
  • 1.4, Garry (??), 19:28, 21/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    250-VRFY - :)
    мдя надо бы выключить в настройках постфикса
    тогда вопрос - зачем нужен постфикс если аутентификация через АД проходит?
    не лучше ли сипользовать родной Exchange?
    другое дело если привязку делать скажем к OpenLDAP
    - это более секурное решение
     
  • 1.5, sm97 (?), 17:59, 28/04/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, к ldap-фильтру можно добавить условие, что бы не учитывались отключенные учетные записи:
    (!(userAccountControl:1.2.840.113556.1.4.803:=2))
     
  • 1.6, Loky (?), 11:16, 10/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Присоединяюсь к мысли Garry. Не совсем понятен смысл связки постфикса с АД.
     
     
  • 2.7, unk (ok), 11:38, 10/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Предполагаю, что народ не хочет выставлять exchange в сеть...

     
  • 2.17, v0v0 (??), 15:03, 08/11/2006 [^] [^^] [^^^] [ответить]  
  • +/
    я, например, не хочу создавать 2 базы с юзерами и паролями, но хочу юзать posftix на шлюзе.
     

  • 1.8, Loky (?), 20:52, 10/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Есть масса способов защитить "обменник" менее экзотичными способами. Хотя канешна кто-то любит и арбуз в присядку есть.
     
     
  • 2.9, unk (ok), 09:04, 11/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Вам виднее - я арбузы так не кушал и exchange в глаза не видел.

     

  • 1.10, Kirgudu (?), 10:22, 29/09/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Не работает saslauthd толком. Постфикс работает замечательно, а он нет.
    говорит REsponse Queue Empry и все.
    courier-imap тут не подходит, не умеет автоматически создвать Maildir'ы
     
  • 1.11, DIman (?), 11:02, 04/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Самое печальное что я не заставил postfix понимать в лдапе search_base= DN=domain, DN=com

    Еме нужно обязательно указывать еще и CN.
    При этом cyrus-imap и saslauthd на ура работают без CN.

    Кто-нибудь решил данную проблему?

     
  • 1.12, Zorn (?), 18:00, 11/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Народец, подобная проблемма(только FreeBSD + SENDMAIL + saslauthd + ldap - WinSrv2003) никак не могу понять где трабла, парюсь 5тый день, поможите кто-нить, тут проблему запостил
    http://www.3nity.ru/viewtopic.htm?t=5097&postdays=0&postorder=asc&start=15
     
  • 1.13, Zorn (?), 18:03, 11/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    блин, ссылка кривая получилась
    http://www.3nity.ru/viewforum.htm?f=20, тема
    "Как сделать SMTP авторизацию в AD (Sendmail+Cyrus SASL2+??)"
    Заранее спасибо!
     
  • 1.14, Дмитрий (??), 11:28, 22/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Postfix:
    ----main.cf
    myhostname = free.sample.org
    mydomain = sample.org
    local_transport = lmtp:unix:/var/imap/socket/lmtp
    local_recipient_maps = unix:passwd.byname $virtual_mailbox_maps
    virtual_gid_maps = static:5000
    virtual_uid_maps = static:5000
    #virtual_mailbox_base = /var/spool/Maildirs/sample.org/
    virtual_mailbox_limit = 0
    virtual_mailbox_maps = ldap:/usr/local/etc/postfix/LDAP/local_users.cf
    virtual_minimum_uid = 500
    mailbox_transport = cyrus

    ----LDAP/local_users.cf
    server_host = 192.168.1.1
    server_port = 389
    bind = yes
    bind_dn = CN=userfree,CN=users,DC=sample,DC=org
    bind_pw = 123456
    search_base = DC=sample,DC=org
    query_filter = (mail=%s)
    #query_filter = (&(mail=%s)(sAMAccountName=%u))
    #result_attribute = sAMAccountName
    result_attribute = mail
    domain = vitcor.ru
    version = 3
    chase_referrals = no
    debug = 20

    ---- master.cf
    cyrus     unix  -       n       n       -       -       pipe
      user=cyrus argv=/usr/local/cyrus/bin/deliver -r ${sender} -m ${extension}@vitcor.ru ${user}

     
  • 1.15, Дмитрий (??), 11:33, 22/12/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Cyrus-imap-2.12 с autocreate patch. Патч обязательно!
    /usr/local/etc/imapd.conf
    configdirectory: /var/imap
    partition-default: /var/spool/imap
    unixhierarchysep: yes
    altnamespace: yes
    sieveusehomedir: false
    sievedir: /var/imap/sieve
    autocreatequota: 30000000
    autocreateinboxfolders: Send|Drafts|Spam|trash
    createonpost: true
    virtdomains: on

    /usr/local/etc/saslauthd.conf
    ldap_servers: ldap://192.168.1.1
    ldap_bind_dn: CN=userfree,CN=Users,DC=sample,DC=org
    ldap_bind_pw: 123456
    ldap_version: 3
    ldap_search_base: DC=sample,DC=org
    #ldap_filter: (sAMAccountName=%u)
    ldap_filter: (mail=%u@%r)
    #ldap_filter: (mail=%u)
    ldap_debug: -1

    Авторизация cyrus-imap происходит через saslauthd. Тот в свою очередь через ldap с AD.

     
  • 1.18, Артем (??), 09:50, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вроде описанная связка работает, есть одна проблема - в АДшке имя пользователя иммет вид, ну, моя например - KAO0119, а почтовый аккаунт - kostyukovao@*******.ru Авторизация по имени пользователя проходит, и создается почтовый ящик, одноименный с учеткой в АД, а не с содержимым поля mail. Подскажите пожалуйста, что можно сделать
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру