Dormestmass: Админ — это состояние души

Squid и LDAP-аутентификация из Active Directory

Сегодня возникла необходимость аутентифицировать пользователей на прокси. Поскольку все они уже имеют учётные записи в 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
...

Популярность: 51%

P.S.

Попробуйте аппарат космодиск, если вас замучила межпозвоночная грыжа поясничного отдела.
Круги по бетону

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.