Инструменты пользователя

Инструменты сайта


soft:squid:single-sign-on

Single-Sign-On

Постановка задачи

Обеспечить вход на прокси-сервер без запроса ввода пароля в основных браузерах (Microsoft Internet Explorer, Mozilla Firefox), учётные записи берутся из Active Directory. Также должна проводиться проверка участия в группе доступа к интернет (группа internet-access в Active Directory).

Необходимое ПО

  1. Windows Server 2003 с настроенной Active Directory и установленным пакетом Support Tools.
  2. net-proxy/squid - кэширующий прокси-сервер, должен быть собран с поддержкой samba и kerberos, остальное - по желанию

Настройка

Windows

На сервер 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

Здесь:

  • <имя_сервера_по_reverse-DNS> - имя сервера так, как оно прописано в обратной зоне DNS (что не всегда соответствует прямому DNS);
  • <имя_области> - имя Kerberos-области, в котором будет выполнятся проверка, обычно - имя домена в верхнем регистре;
  • <имя_AD_пользователя> - имя пользователя, которым представлять сервер Squid;
  • <пароль_AD_пользователя> - пароль вышеназванного пользователя;
  • <имя_сервера_по_reverse-DNS>.keytab - имя выходного файла, в-принципе, может быть любым.

Созданный файл копируем в каталог конфигурационных файлов Squid (/etc/squid).

Linux

/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.

Источники

Дискуссия

Enter your comment
 
soft/squid/single-sign-on.txt · Последние изменения: 16.11.2009 20:26 (внешнее изменение)

Инструменты страницы