При наличии Active Directory или сервера каталогов вместо аутентификации при помощи nsca_auth оптимальным вариантом является использование единого хранилища. При большом количестве пользователей такой вариант упрощает администрирование, так как не нужно для каждого юзера создавать еще и учетную запись на прокси.
Для работы с AD есть две схемы: аутентификация с использованием Kerberos + Samba (winbind) или получение информации об учетных записях при помощи LDAP. Первый вариант считается официальным и подробно расписан на сайте проекта (wiki.squid-cache.org/ConfigExamples/WindowsAuthenticationNTLM), поэтому будем разбираться со вторым. Это несколько более универсальный способ, так как его можно использовать с любым LDAP сервером, вроде OpenLDAP. Для работы через LDAP следует завести отдельную учетную запись (пусть это будет squidproxy), причем, для AD можно использовать учетную запись с минимумом привилегий. Домен для примера возьмем domain.com.
Для начала проверяем, видит ли модуль squid_ldap_auth наш сервер:
$ /usr/lib/squid3/squid_ldap_auth -v 3 -b \
«cn=squidproxy,dc=domain,dc=com» -f «uid=%s» domain.com
В ответ на запрос вводим строку в виде — пользователь пароль. Если получаем OK, можно идти дальше. Вместо имени контролера домена можно указать его IP-адрес. Второй вариант проверки — с помощью утилиты поиска ldapsearch, которая входит в пакет ldap-utils. При подключении к AD можно использовать вместо «cn=squidproxy,dc=domain,dc=com» более удобный вариант записи в виде squidproxy@domain.com. Также в AD имя учетной записи получается при помощи «sAMAccountName=%s», а в LDAP используем «cn=%s». В остальном отличий нет.
Если планируется аутентификация не только по пользователям, но и по группе, проверяем доступность групп:
$ /usr/lib/squid3/squid_ldap_group -R -b «dc=domain,dc=com» \
-f «(&(cn=%s)(memberOf=cn=%s,cn=Users, dc=domain,dc=com))» \
-D squidproxy@domain.com -w пароль -h domain.com
На запрос вводим строку – логин группа. С помощью параметра ‘–w‘ указывается пароль для доступа пользователя squidproxy к LDAP серверу.
Теперь переходим непосредственно к настройкам Squid. Фактически в конфиг squid.conf нужно внести всего две записи и установить разрешения:
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -D squidproxy squidproxy@domain.com –w пароль -b «cn=squidproxy,dc=domain,dc=com» -f «sAMAccountName=%s» domain.com
# Если нужны разрешения на основании групп, то подключаем и внешнюю группу
external_acl_type ldap_group %LOGIN /usr/lib/squid3/squid_ldap_group -R -b «dc=domain,dc=com» -f «(&(cn=%v)(memberOf=cn=%a,dc=domain,dc=com))» -D squidproxy@domain.com -W пароль domain.com
Формат этих команд описан в документации к Squid. Здесь задаем %LOGIN, для того чтобы пользователь перед проверкой на принадлежность к группе был сначала аутентифицирован. Некоторые LDAP сервера для передачи пароля используют TLS, чтобы подружиться с ними, достаточно добавить в команды параметр ‘–Z‘.
И дальше в squid.conf дописываем правила:
auth_param children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl ldap_group proxy_auth REQUIRED
http_access allow ldap_group
http_access allow localhost
http_access deny all
После перезапуска Squid все пользователи, входящие в указанную группу, будут выходить в интернет.