[freebsd] squid + kerberos

217 views
Skip to first unread message

skeletor

unread,
Apr 2, 2016, 11:41:54 AM4/2/16
to UAFUG
Всем привет.
Использую связку squid+kerberos для аутентификации юзеров из АД. squid
собран с поддержкой

AUTH_LDAP
AUTH_SASL
GSSAPI_MIT

Из необходимых пакетов стоит:

openldap-sasl-client-2.4.44
krb5-1.14.1
cyrus-sasl-2.1.26_12
cyrus-sasl-gssapi-2.1.26_7
squid-3.5.15_1

Билет от кербероса получаю (через keytab-файл, сгенерённый на
контроллере домена). Но вот аутентицировать юзера не могу. В логах ошибка:

ERROR: Negotiate Authentication validating user. Result: {result=BH,
notes={message: received type 1 NTLM token; }}

Гугление вообще мало что знает, а то, что знает от разряда "у меня вот в
такой конфигурации работает". Перепробовал много чего, в том числе и
пересборка squid'a с системным/heimdal керберосом, но ничего не поменялось.
Рядом, на Debian'e с теми же конфигами работает. Вот конфиги:

squid.conf:
...
auth_param negotiate program
/usr/local/libexec/squid/negotiate_kerberos_auth -s
HTTP/proxy.dom...@DOMAIN.LOCAL
auth_param negotiate children 50 startup=10 idle=5
auth_param negotiate keep_alive on
...

/etc/krb5.conf

[libdefaults]
default_realm = DOMAIN.LOCAL
default_keytab_name = /usr/local/etc/squid/squid.keytab

[realms]
OVOSTAR.LOCAL = {
kdc = srvad.domain.local
kdc = srvad2.domain.local
admin_server = srvad.domain.local
default_domain = domain.local
}

[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

[logging]
kdc = FILE:/var/log/kerberos/kdc.log
admin_server = FILE:/var/log/kerberos/kadmin.log
default = FILE:/var/log/kerberos/default.log


# kinit -k HTTP/proxy.dom...@DOMAIN.LOCAL
# klist
Credentials cache: FILE:/tmp/krb5cc_0
Principal: HTTP/proxy.dom...@DOMAIN.LOCAL

Issued Expires Principal
Apr 2 18:36:22 2016 Apr 3 04:36:22 2016 krbtgt/DOMAIN...@DOMAIN.LOCAL

Eugene Grosbein

unread,
Apr 2, 2016, 3:44:30 PM4/2/16
to skel...@lissyara.su, UAFUG
02.04.2016 22:41, skeletor пишет:
> Всем привет.
> Использую связку squid+kerberos для аутентификации юзеров из АД. squid собран с поддержкой
>
> AUTH_LDAP
> AUTH_SASL
> GSSAPI_MIT

Для проверки пользователей/групп из squid в Active Directory
нет необходимости использовать Kerberos. Достаточно посылать запросы
в AD по протоколу LDAP. На примере squid 3.2, для домена COMPANY.local
и контроллера на адресе 192.168.1.3, в squid.conf:

# Проверка пароля пользователя
auth_param basic program /usr/local/adm/squid_ad_auth
auth_param basic children 10
auth_param basic realm COMPANY
auth_param basic credentialsttl 5 minutes
acl ad_user proxy_auth REQUIRED

# Проверка вхождения пользователя в группу InetPermitted
external_acl_type ad_permitted ttl=300 %LOGIN /usr/local/adm/squid_ad_group
acl ad_authorized external ad_permitted InetPermitted

Скрипт /usr/local/adm/squid_ad_auth:

#!/bin/sh

base=COMPANY
domain="dc=$base,dc=local"
dom="$base.local"
controller="192.168.1.3"
user=squid
passwordfile=/usr/local/adm/ad.pwd

exec /usr/local/libexec/squid/basic_ldap_auth -R -b "$domain" \
-D "$user@$dom" -W "$passwordfile" -f sAMAccountName=%s -h "$controller"

В домене нужен пользователь squid, чей пароль записан в /usr/local/adm/ad.pwd.

Скрипт /usr/local/adm/squid_ad_group:

#!/bin/sh

base=COMPANY
domain="dc=$base,dc=local"
dom="$base.local"
controller="192.168.1.3"
user=squid
passwordfile=/usr/local/adm/ad.pwd

exec /usr/local/libexec/squid/ext_ldap_group_acl -R -b "$domain" \
-D "$user@$dom" -W "$passwordfile" \
-f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,$domain))" \
-h "$controller" "$@"

skeletor

unread,
Apr 3, 2016, 3:15:57 AM4/3/16
to UAFUG
02.04.2016 22:43, Eugene Grosbein пишет:
Спасибо, Евгений. Скрипт работает, но есть 2 нюанса: при каждом открытии
браузера приходится вбивать login/pass (что очень неудобно, поэтому и
использовал для этого kerberos, что бы передавало login/pass юзера
автоматически), а так же не работает аутентификация для юзеров с
русскими логинами (не спрашивайте кто такое придумал, мне оно тоже не
нравится)

Владимир Друзенко

unread,
Apr 4, 2016, 12:41:44 AM4/4/16
to fre...@uafug.org.ua
03.04.2016 10:15, skeletor пишет:
А если попробовать такой же финт со скриптами, но ntlm_auth?

Golub Mikhail

unread,
Apr 4, 2016, 2:59:19 AM4/4/16
to fre...@uafug.org.ua
03.04.2016 10:15, skeletor пишет:
> 02.04.2016 22:43, Eugene Grosbein пишет:--

Доброго времени суток.
Используйте ntlm_fake_auth - будет фейковая аутентификация в браузерах,
поддерживающих ntlm (ie, firefox точно).

А если все же хотите именно kerberos, то прокси надо указывать в
браузере явно и по тому имени, на которое выдан тикет.
Т.е., например, proxy.domain.local, а не IP 1.1.1.1 ...

skeletor

unread,
Apr 4, 2016, 4:29:17 AM4/4/16
to freebsd@uafug.org.ua >> UAFUG
04.04.2016 9:59, Golub Mikhail пишет:
>
> Доброго времени суток.
> Используйте ntlm_fake_auth - будет фейковая аутентификация в браузерах,
> поддерживающих ntlm (ie, firefox точно).
>
> А если все же хотите именно kerberos, то прокси надо указывать в
> браузере явно и по тому имени, на которое выдан тикет.
> Т.е., например, proxy.domain.local, а не IP 1.1.1.1 ...
>

Я именно так и указывал.
Проблему нашёл и решил. А заключалась она в том, что было прописано 2
SPN записи в АД для HTTP/<freebsd-proxy-fqdn>. Удалил лишнюю и заработало.

Всем спасибо за помощь.
Reply all
Reply to author
Forward
0 new messages