The OpenNET Project / Index page

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

Squid и LDAP-аутентификация из Active Directory (squid ldap auth proxy)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: squid, ldap, auth, proxy,  (найти похожие документы)
From: Roman Shramko <http://dormestmass.blogspot.com>; Date: Mon, 3 Jan 2008 14:31:37 +0000 (UTC) Subject: Squid и LDAP-аутентификация из Active Directory Оригинал: http://dormestmass.blogspot.com/2006/10/squid-ldap-active-directory.html Сегодня возникла необходимость аутентифицировать пользователей на прокси. Поскольку все они уже имеют учётные записи в ActiveDirectory, то было решено брать информацию оттуда. Сразу оговорюсь, строил basic аутентификацию, т.к. посмотрев на танцы с бубнами вокруг ntlm-authentication & kerberos & AD, решил что овчинка не стоит выделки. Подобную схему аутентификации при минимальных переделках можно применить к любому дереву каталогов, например к Novell eDirectory или Netscape Directory Server... В системе должены быть установлены библиотеки openldap для последующей сборки squid. Сам squid должен быть собран с поддержкой basic аутентификации и внешних групп в LDAP. Ключи для конфигурации при ручной сборке: ... --enable-basic-auth-helpers=LDAP --enable-external-acl-helpers=ldap_group ... Наш домен в Active Directory называеться domain.com. Для начала заведём в дерево несколько групп, пользователи которых могут ходить в интернет. Почему несколько - вхождение в ту или иную группу определяет delay pool в squid. Скажем inet_64k, inet_128k и inet_1024k. Для отладки делаем тестового пользователя test_inet c паролем 123456, и включаем его в группу inet_64k. Для работы с каталогом нам необходим пользователь, в нём зарегистрированный и умеющий читать оттуда хэши с паролями. Применительнительно к Active Directory нам нужен обыкновенный юзер без особых привилегий :). В Novell eDirectory или Netscape Directory такая шутка уже не прокатит и пользователю нужно будет присвоить некие привилегии для чтения паролей. Обозвём этого пользователя для примера squidreader. Теперь проверяем на доступность каталога под вышеуказанным пользователем. ldapsearch -D "squidreader@domain.com" -x -W -b "dc=domain,dc=com" -h 192.168.1.1 В результате выпольнения команды мы должны получить содержимое нашего АД. Маленькое отступление. Для соединения с каталогом мы должны указать Distinguished Name, под которым мы его будем читать. Так вот, в отличии от нормальных LDAP каталогов, DN в Microsoft Active Directory мы можем извратиться, указав его как "squidreader@domain.com", либо же указать в нормальном виде как "cn=squidreader,dc=domain,dc=com". Дальше проверяем работу работу компонентов squid. Создаём файл с паролем к учётной записи, которой мы читаем, к примеру он будет /usr/local/etc/squid/adpw.txt. Сначала проверяем группы. /usr/local/libexec/squid/squid_ldap_group -R -b "dc=domain,dc=com" -f \ "(&(sAMAccountName=%v)(memberOf=cn=%a,dc=domain,dc=com))" -D squidreader@domain.com -W \ /usr/local/etc/squid/adpw.txt 192.168.1.1 В качестве запроса вводим строку в формате: имя_пользователя группа_пользователя Ответом будет либо "ОК", либо "ERR". В нашем случае это будет "test_inet inet_64k". Естессно, что если у нас всё правильно работает, то ответ будет "ОК". Дальше проверяем аутентификацию. /usr/local/libexec/squid/squid_ldap_auth -R -D squidreader@domain.com -W \ /usr/local/etc/squid/adpw.txt -b "dc=domain,dc=com" -f "sAMAccountName=%s" \ 192.168.1.1 В качестве запроса вводим строку в формате: имя_пользователя пароль Ответы такие же как и в прошлом случае. Вводим "test_inet 123456" и ждём ответа "ОК" :). Теперь конфигурим сам squid. Аутентификатор: auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -D \ squidreader@domain.com -W /usr/local/etc/squid/adpw.txt -b "dc=domain,dc=com" -f \ "sAMAccountName=%s" 192.168.1.1 Внешняя группа: external_acl_type ldap_users %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -b \ "dc=domain,dc=com" -f "(&(cn=%v)(memberOf=cn=%a,dc=domain,dc=com \ ))" -D squidreader@domain.com -W /usr/local/etc/squid/adpw.txt 192.168.1.1 Параметр %LOGIN в описании внешней группы указывает на то, перед проверкой на вхождение в эту группу, пользователя необходимо аутентифицировать. Описание ACL: acl ad64 external ldap_users inet_64k acl ad128 external ldap_users inet_128k acl ad1024 external ldap_users inet_1024k Ну и последние штрихи - разрешаем данным ACL ходить в интернет и добавляем их в delay pool. ... http_access allow ad128 ... delay_class 3 1 delay_access 3 allow ad128 delay_access 3 deny all ...

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1.1, Сергей (??), 10:38, 13/10/2008 [ответить]  
  • +/
    Добрый день. За статью спасибо.
    По статье настраивал squid с диска debian 4.0 r4. Сразу столкнулся со следующими проблемами:
    1. Приведеный запрос squid_ldap_group корректно заработал только в следующем виде 1 - CN и DC - прописными буквами 2 - в строку (memberOf=cn=%a,dc=domain,dc=com) писал в виде (memberOf=CN=%a,CN=Users,DC=domain,DC=com), только тогда корректно определялась принадлежность пользователя к группе.
    2. После запуска прокси, если производить какие либо манипуляции с учетными записями пользователей (убрать пользователя из группы или добавить нового пользователя в группу), то прокси этих изменений не видит до тех пор, пока не сделаешь squid -k reconfigure.
    Вопрос по второму пункту - это только у меня он такой подслеповатый или это стандартное состояние при таком методе авторизации?
     
     
  • 2.2, andrei (??), 13:59, 12/12/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Я думаю это особенность Дебиана, под Centos 4 и 5 все ок, a squid -k reconfigure это нормально. тож самое как /etc/init.d/squid reload
     

  • 1.3, ZmeY (?), 15:31, 24/12/2008 [ответить]  
  • +/
    ttl=N в external_acl_type добавь и наступит счастье ;)
     
  • 1.4, Dima (??), 16:58, 03/04/2009 [ответить]  
  • +/
    Люди, объясните плз. почему при запросе с консоли

    ./squid_ldap_auth -R -D ldapuser@domain.ru -w pass -b "dc=domain,dc=ru" -f "sAMAccountName=%s" -h 192.168.1.1 -d    =все ровно, при вводе юзернейма пассворда = ок

    Почему же блин, свид выдает вот такое в кэше:

    "Ldap search resultnothing"

    или LDAP search error 'referral' если использовать v 3

    ???
    Делал все по статье. Прошу помочь!

     
  • 1.5, Dima (??), 17:57, 03/04/2009 [ответить]  
  • +/
    Все, вопрос снят!

    Надо чОтче смотреть орфографию при написании запроса )))

     
  • 1.6, Владимир (??), 14:21, 16/06/2009 [ответить]  
  • +/
    Люди, подскажите как сделать Ldap аутентификацию с AD через SSL плиз, т.е. все работает как написано в статье, но надо чтобы пароли в открытую не передавались по сетке
     
  • 1.7, Ilrandir (?), 14:03, 09/12/2009 [ответить]  
  • +/
    У меня нужно было еще не забыть добавить OU, например:
    /usr/local/libexec/squid/squid_ldap_group -R -b "dc=domain,dc=com" -f \
            "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=InetGroups,dc=domain,dc=com))" -D squidreader@domain.com -W \
            /usr/local/etc/squid/adpw.txt 192.168.1.1
     
  • 1.8, Ilrandir (?), 13:59, 17/12/2009 [ответить]  
  • +/
    Хорошо и коротко разобрано введение Linux машины (прокси-сервера) в домен и настройка ntlm авторизации на Squid (т.е. без запроса логина/пароля броузером) тут:
    http://wiki.squid-cache.org/ConfigExamples/Authenticate/NtlmCentOS5

    У меня возникла проблема при вводе в домен
    Failed to set servicePrincipalNames.
    Которая решилась исправлением /etc/hosts.
    Было:
    127.0.0.1               my-proxy localhost
    Нужно прописать:
    127.0.0.1               my-proxy my-proxy.mydomain.local localhost

    Чтобы Firefox мог проходить ntlm авторизацию, вроде достаточно открыть в адресной строке about:config и изменить параметры на такие:
    network.negotiate-auth.delegation-uris = http://,https://
    network.negotiate-auth.trusted-uris = http://,https://

     
  • 1.9, Casper (??), 10:54, 10/08/2011 [ответить]  
  • +/
    аутентификация из командной строки проходит на ура
    /usr/lib/squid/squid_ldap_group -R -b "dc=uit,dc=bsu,dc=local" -f "(&(cn=%v)(memberOf=cn=%a,cn=Users,dc=uit,dc=bsu,dc=local))" -D squidreader@uit.bsu.local \-W /root/adpw.txt -h 10.0.1.231
    user1 inet_1024k
    OK

    [root@proxy squid]# /usr/lib/squid/squid_ldap_auth -R -D squidreader@uit.bsu.local \-W /root/adpw.txt -b "dc=uit,dc=bsu,dc=local" -f "cn=%s" -h 10.0.1.231
    user1 1
    OK

    а когда добавляем их в squid.conf
    auth_param basic program /usr/lib/squid/squid_ldap_auth -R -D squidreader@uit.bsu.local \-W /root/adpw.txt -b "dc=uit,dc=bsu,dc=local" -f "cn=%s" -h 10.0.1.231
    external_acl_type ldap_users %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=uit,dc=bsu,dc=local" -f "(&(cn=%v)(memberOf=cn=%a,cn=Users,dc=uit,dc=bsu,dc=local))" -D squidreader@uit.bsu.local \-W /root/adpw.txt -h 10.0.1.231
    acl ad1024 external ldap_users inet_1024k
    http_access allow ad1024

    squid вываливается с ошибкой
    2011/08/10 12:27:10| Accepting proxy HTTP connections at 0.0.0.0, port 3128, FD 25.
    2011/08/10 12:27:10| Accepting ICP messages at 0.0.0.0, port 3130, FD 26.
    2011/08/10 12:27:10| WCCP Disabled.
    2011/08/10 12:27:10| Ready to serve requests.
    2011/08/10 12:27:10| WARNING: basicauthenticator #4 (FD 12) exited
    2011/08/10 12:27:10| WARNING: basicauthenticator #5 (FD 13) exited
    2011/08/10 12:27:10| WARNING: basicauthenticator #3 (FD 11) exited
    2011/08/10 12:27:10| Too few basicauthenticator processes are running
    FATAL: The basicauthenticator helpers are crashing too rapidly, need help!

    Squid Cache (Version 2.6.STABLE21): Terminated abnormally.
    права на /usr/lib/squid/squid_ldap_group и /usr/lib/squid/squid_ldap_auth
    стоят squid squid (из под которого squid запускается)
    ткните носом плз в косяк а то весь череп уже сломал

     
  • 1.10, oops (ok), 18:08, 25/11/2013 [ответить]  
  • +/
    у меня внешние группы из командной строки нормально проверялись, когда запускал как написано в статье (squid_ldap_group -R -b ... -f "(&(sAMAccountName=%v)(memberOf=cn=%a,dc=domain,dc=com))" ... ).

    Однако в самом squid'е не работало так. Заработало вот так squid_ldap_group -R -b ... -f "(&(objectclass=person)(sAMAccountName=%v)(memberOf=cn=%a,dc=domain,dc=com))" ...

     

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




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

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