Squid и LDAP-аутентификация из Active Directory
Написал Алхимик   
Четверг, 10 Апрель 2008

Сегодня  возникла  необходимость  аутентифицировать  пользователей  на
прокси.  Поскольку все они уже имеют учётные записи в 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 " Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script " -x -W -b "dc=domain,dc=com" -h 192.168.1.1


   В  результате выпольнения команды мы должны получить содержимое нашего
   АД.

   Маленькое  отступление.  Для  соединения с каталогом мы должны указать
   Distinguished  Name,  под  которым  мы  его  будем  читать. Так вот, в
   отличии  от нормальных LDAP каталогов, DN в Microsoft Active Directory
   мы можем извратиться, указав его как "
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script ", либо же
   указать в нормальном виде как "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
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script -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 Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script -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 \
       
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script -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
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script -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
        ...

Комментарии

Только зарегистрированные пользователи могут оставлять комментарии.
Пожалуйста авторизируйтесь или зарегистрируйтесь.

 
< Предыдущая новость   Следующая новость >

Последние новости
 
Самые читаемые за месяц


Реклама | Контакты | ©2005-2013 Алхимик