Squid и LDAP-аутентификация из Active Directory (squid_ldap_auth)
Уже давно и достаточно продуктивно в своей работе я использую прокси-сервер squid. Думаю, не стоит описывать все его преимущества, кто знаком с данным прокси-сервером, все и без меня прекрасно знают. Скажу лишь, что squid является по сути, стандартом де-факто в корпоративных сетях. Начиная от средних организаций и заканчивая крупными банками, используют squid в своей работе.
Не так давно решил все-таки разобрать с LDAP аутентификацией в squid через аккаунты в Active Directory. С NTLM решил не заморачиваться, остановился на Basic аутентификации. Все делал по этой статье: http://www.opennet.ru/base/net/squid_ldap_ad.txt.html
У меня все заработало, но с некоторыми оговорками, поэтому опишу их здесь, думаю, будет полезно, тем, кто только собирается настроить аутентификацию в squid из АD. Все это настраивалось на Windows 2003 Standard Server R2 x64 + Squid 3.0.STABLE19.
Сквид собираем с ключами: —enable-basic-auth-helpers=LDAP —enable-external-acl-helpers=ldap_group
Предварительно создадим пользователя в домене, от имени которого будем читать содержимое АD. Привилегии никакие не нужны, достаточно Domain Users. Также я создал глобальную группу, вхождение в которую будет обеспечивать пользователям доступ к прокси.
Пробуем прочитать каталог:
ldapsearch -D «squidreader@domain.com» -x -W -b «dc=domain,dc=com» -h 192.168.1.2
(этой командой мы прочитаем содержимое AD)
Проверка групп. Внимание! Именно здесь отличия от статьи. У меня заработало только в таком виде, особое внимание обратить на регистр (большие маленькие буквы). На самом деле, это есть в комментариях к статье, но я решил обобщить изменения в этой короткой заметке.
/usr/libexec/squid/squid_ldap_group -R -b «dc=domain,dc=com» \
-f «(&(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=domain,DC=com))» \
-D squidreader@domain.com -w password -h 192.168.1.2
Запрос: имя_пользователя группа_пользователя
Ответ: ОК или ERR
Проверка аутентификации:
/usr/libexec/squid/squid_ldap_auth -R -D squidreader@domain.com -w \
password -b «dc=domain,dc=com» -f «sAMAccountName=%s» 192.168.1.2
Запрос: имя_пользователя пароль
Ответ: ОК или ERR
Конфиг squid:
auth_param basic program /usr/libexec/squid/squid_ldap_auth -R -D \
squidreader@domain.com -w password -b «dc=domain,dc=com» -f \
«sAMAccountName=%s» 192.168.1.2
authenticate_ttl 1 hour
external_acl_type ldap_users %LOGIN /usr/libexec/squid/squid_ldap_group -R -b \ »dc=domain,dc=com» -f «(&(sAMAccountName=%v)(memberOf=CN=%a,CN=Users,DC=domain,DC=com \ ))» -D squidreader@domain.com -w password -h 192.168.1.2 ttl=3600
(%LOGIN — перед вхождением в группу мы аутентифицируем пользователя)
ACL:
acl group-allow-inet external ldap_users proxy-access-enable
(proxy-access-enable — глобальная группа в домене)
http_access allow group-allow-inet
Осталось только настроить squidguard для работы с LDAP (AD) — но у меня до сих пор никак не получается это сделать. Если у кого работает squidguard c AD — великодушно прошу помощи.