Обеспечить вход на прокси-сервер без запроса ввода пароля в основных браузерах (Microsoft Internet Explorer, Mozilla Firefox), учётные записи берутся из Active Directory. Также должна проводиться проверка участия в группе доступа к интернет (группа internet-access в Active Directory).
На сервер Windows создаём keytab:
C:\Program Files\Support Tools> ktpass -princ HTTP/<имя_сервера_по_reverse-DNS>@<имя_области> -mapuser <имя_AD_пользователя> -crypto des-cbc-md5 -pass <пароль_AD_пользователя> -ptype KRB5_NT_SRV_HST -out <имя_сервера_по_reverse-DNS>.keytab
Здесь:
Созданный файл копируем в каталог конфигурационных файлов Squid (/etc/squid).
/etc/conf.d/squid
SQUID_KEYTAB="/etc/squid/<имя_сервера_по_reverse-DNS>.keytab"
Патчим /etc/init.d/squid (до версии Squid 2.7.5-r1)
--- squid.orig 2009-03-06 11:59:35.000000000 +0300
+++ squid 2009-03-05 17:29:12.000000000 +0300
@@ -53,7 +53,7 @@
start() {
checkconfig || return 1
ebegin "Starting squid"
- /usr/sbin/squid ${SQUID_OPTS}
+ KRB5_KTNAME="${SQUID_KEYTAB}" /usr/sbin/squid ${SQUID_OPTS}
eend $? && sleep 1
}
/etc/squid/squid.conf
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on
auth_param negotiate program /usr/libexec/squid/squid_kerb_auth -s HTTP/<имя сервера по reverse-DNS>
auth_param negotiate children 5
auth_param negotiate keep_alive on
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
...
external_acl_type ldap_group %LOGIN /usr/libexec/squid/squid_ldap_group \
-S -K \
-R -b "dc=domain,dc=tdl" \
-f "(&(sAMAccountName=%u)(memberOf=cn=%g,ou=Users,dc=domain,dc=tdl" \
-s sub -D <имя_AD_пользователя>@<имя_домена> -w <пароль_AD_пользователя> -h <имя_сервера_AD> \
-p 3268
...
acl users proxy_auth REQUIRED
acl internet-access external ldap_group internet-access
acl osLinux browser -i windows
acl progFirefox browser -i firefox
...
http_access allow users internet-access
...
header_access Proxy-Authenticate deny osLinux progFirefox
header_replace Proxy-Authenticate Negotiate
К сожалению, при данном методе все содержимое запрещённых заголовков Proxy-Authenticate будут заменяться на Negotiate - нельзя, например, добавить для какой-то группы изменение на Basic, чтобы убрать NTLM и Negotiate в-принципе.
Неприятная новость - в Squid 3.0 такой фокус не проходит.
Он может менять только заголовки request, а для данного метода нужно менять заголовки reply.
Дискуссия