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 21:26 (внешнее изменение)
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Купить мощный системный блок
Как получать больше денег, минеральная вода perrier цена .