LINUX.ORG.RU
ФорумAdmin

squid ldap_auth и kerberos

 , ,


0

1

Люди добрые помогите, имеется контроллер домена на sambe4 и прокси сервер squid3. Настроена была авторизация через kerberos, все заработало. Но как выяснилось месенджеры типа icq, skype не умеют работать с этой авторизацией. Решил добавить в конфиг авторизацию через ldap. Но при работе с ней пользователей не выпускает в инет.
cat /etc/squid3/squid.conf

http_port 0.0.0.0:3128 auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -s HTTP/myproxy.sp.loc@SP.LOC
auth_param negotiate children 100
auth_param negotiate keep_alive on
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b «dc=sp,dc=loc» -D admin@sp.loc -w «adminpass» -f sAMAccountName=%s -h dc.sp.loc -d
auth_param basic children 10
auth_param basic keep_alive on
external_acl_type nt_group %LOGIN /usr/lib/squid3/wbinfo_group.pl
acl url-good dstdomain «/etc/squid3/url-good»
acl url-bad dstdomain «/etc/squid3/url-bad»
acl inet external nt_group inet
acl noinet external nt_group noinet
acl fullinet external nt_group fullinet
acl auth proxy_auth REQUIRED
http_access deny multi
http_access allow inet all !url-bad
http_access allow noinet all url-good
http_access allow fullinet
http_access allow ncsa_users all !url-bad
http_access deny all

В логах сквида такая ошибка:
cat /var/log/squid3/cache.log

failed to call wbcGetGroups: WBC_ERR_DOMAIN_NOT_FOUND
Could not get groups for user test


Сам хелпер отрабатывает нормально

/usr/lib/squid3/squid_ldap_auth -R -b «dc=sp,dc=loc» -D admin@sp.loc -w «adminpass» -f sAMAccountName=%s -h dc.sp.loc
test test
OK

Единственное что меня смущает что, это wbinfo_group.pl. Что бы он нормально отрабатывал нужно добавлять имя домена к пользователю:

/usr/lib/squid3/wbinfo_group.pl
test inet
failed to call wbcGetGroups: WBC_ERR_DOMAIN_NOT_FOUND
Could not get groups for user test
ERR

/usr/lib/squid3/wbinfo_group.pl
test@sp.loc inet
OK


Но тем не менее при авторизаций через kerberos все отрабатывает нормально, как быть подскажите?

Пробовали:

winbind use default domain = yes ?

И, как бы сейчас нужно использовать squid_ldap_group вместо wbinfo_group.pl.

mky ★★★★★ ()
Ответ на: комментарий от mky

попробовал winbind use default domain = yes, /usr/lib/squid3/wbinfo_group.pl
test inet
ОК
Сейчас наоборот, пользователи которые авторизуется через керберос, не могут определить свою группу. в кэш логе сквида
failed to call wbcGetGroups: WBC_ERR_DOMAIN_NOT_FOUND
Could not get groups for user test@sp.loc
ERR
Но те кто авторизуется через squid_ldap_auth нормально авторизуются. Если смотреть акцес лог то видно что те пользователи которые заходят через керберос идут в таком формате test@sp.loc, а те кто через лдап то просто имя пользователя test.

Попробовал вместо wbinfo_group.pl использовать squid_ldap_group.

external_acl_type nt_group %LOGIN /usr/lib/squid3/squid_ldap_group -R -D admin@sp.loc -w adminpass -b «dc=sp,dc=loc» -f "(&(objectclass=person) (sAMAccountName=%v)(memberof=cn=%a,ou=Groups,dc=sp,dc=loc))" -h dc.sp.loc
результат тот же =(

конгфиг самбы такой:
[global]
workgroup = SP
password server = dc.sp.loc
realm = SP.LOC
security = ads
dns_lookup_realm = true
dns_lookup_kdc = true
idmap config * : backend = rid
idmap config * : range = 2000-50000000

template homedir = /home/%U
template shell = /bin/bash
winbind use default domain = no
winbind offline logon = true

конгфиг кербероса:
cat /etc/krb5.conf
[libdefaults]
default_realm = SP.LOC
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log

dns_lookup_kdc = no
dns_lookup_realm = no
ticket_lifetime = 24h
default_keytab_name = /etc/squid3/PROXY.keytab
default_tgs_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
default_tkt_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
preferred_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC

[realms]
SP.LOC = {
kdc = dc.sp.loc
admin_server = dc.sp.loc
default_domain = sp.loc
}

кейтаб делал так:
msktutil -c -b «CN=Computers» -s HTTP/myproxy.sp.loc -k /etc/squid3/PROXY.keytab --computer-name myproxy-HTTP --upn HTTP/myproxy.sp.loc --server dc.sp.loc --verbose

Т.е проблема в том что с керберос авторизация проходит с именем домена. Через лдап просто имя пользователя. Как же решить данную проблему?

Bulatka ()
Ответ на: комментарий от menzoberronzan

хмм, у меня такого ключа нет.
/usr/lib/squid3/squid_kerb_auth -h
Usage:
squid_kerb_auth [-d] [-i] [-s SPN] [-h]
-d full debug
-i informational messages
-s service principal name
-h help
The SPN can be set to GSS_C_NO_NAME to allow any entry from keytab default SPN is HTTP/fqdn@DEFAULT_REALM

Версия сквида стоит 3.1.19.

Bulatka ()
Ответ на: комментарий от Bulatka

Попробовал вместо wbinfo_group.pl использовать squid_ldap_group...

результат тот же =(

Что именно выдаёт squid_ldap_group при запуске с командной строки с дебугом?

mky ★★★★★ ()
Ответ на: комментарий от menzoberronzan

Обновился, вернее поставил ось по свежее. Настроил все заново, squid версии 3.3.8. По идее все работает как надо. Но возникла другая проблема. Есть ряд компов которые не входят в домен. Для них я тоже думал что буду использовать ldap авторизацию. Но почему то она не отрабатывает в браузерах, постоянно просит ввести логин и пароль. Но на всяких меседжерах работает без нареканий(проверялось, на icq, skype).

В логах сквида когда включен только icq клиент:
cat /var/log/squid3/cache.log

2015/05/22 13:09:57| Starting new basicauthenticator helpers...
2015/05/22 13:09:57| helperOpenServers: Starting 1/50 'basic_ldap_auth' processes
basic_ldap_auth.cc(685): pid=2487 :user filter 'sAMAccountName=test', searchbase 'dc=sp,dc=loc'
basic_ldap_auth.cc(740): pid=2487 :attempting to authenticate user 'CN=test test,CN=Users,DC=sp,DC=loc'
в access.log

cat /var/log/squid3/access.log

1432285797.883 302 192.168.1.105 TCP_MISS/200 678 CONNECT login.icq.com:443 test HIER_DIRECT/178.237.20.58 -
1432285803.645 87 192.168.1.105 TCP_MISS/200 678 CONNECT login.icq.com:443 test HIER_DIRECT/178.237.20.58 -

Лог кэша когда только включен браузер:
cat /var/log/squid3/cache.log

2015/05/22 12:54:21| Starting new negotiateauthenticator helpers...
2015/05/22 12:54:21| helperOpenServers: Starting 1/100 'negotiate_kerberos_auth' processes
2015/05/22 12:54:21| ERROR: Negotiate Authentication validating user. Error returned 'BH gss_accept_sec_context() failed: An unsupported mechanism was requested. '
2015/05/22 12:54:43| ERROR: Negotiate Authentication validating user. Error returned 'BH gss_accept_sec_context() failed: An unsupported mechanism was requested. '

cat /var/log/squid3/access.log

1432285033.587 1 192.168.1.105 TCP_DENIED/407 3564 CONNECT tools.google.com:443 - HIER_NONE/- text/html
1432285033.599 5 192.168.1.105 TCP_DENIED/407 3825 CONNECT tools.google.com:443 - HIER_NONE/- text/html

Т.е почему то браузер не хочет авторизоваться через ldap и воспользоваться другим хелпером. Браузеры пробовал разные(IE, opera, firefox), результат один и тот же. Конфиг у сквида нынче такой:

http_port 0.0.0.0:3128
auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -s HTTP/myproxy.sp.loc@SP.LOC
auth_param negotiate children 100
auth_param negotiate keep_alive on
auth_param basic program /usr/lib/squid3/basic_ldap_auth -R -b «dc=sp,dc=loc» -D admin@sp.loc -w «adminpass» -f sAMAccountName=%s -h dc.sp.loc -d
auth_param basic children 50
auth_param basic credentialsttl 2 hours
external_acl_type nt_group %LOGIN /usr/lib/squid3/ext_wbinfo_group_acl
acl url-good dstdomain «/etc/squid3/url-good»
acl url-bad dstdomain «/etc/squid3/url-bad»
acl inet external nt_group inet
acl noinet external nt_group noinet
acl fullinet external nt_group fullinet
acl auth proxy_auth REQUIRED
http_access allow inet all !url-bad
http_access allow noinet all url-good
http_access allow fullinet
http_access deny all

Bulatka ()
Ответ на: комментарий от mky

/usr/lib/squid3/squid_ldap_group -R -b «dc=sp,dc=loc» -f "(&(sAMAccountName=%v)(memberOf=cn=%a,ou=Groups,dc=sp,dc=loc))" -D admin@sp.loc -w adminpass -h dc.sp.loc -d

test inet
Connected OK
group filter '(&(sAMAccountName=test)
(memberOf=cn=inet,ou=Groups,dc=sp,dc=loc))', searchbase 'dc=sp,dc=loc'
OK

Bulatka ()
Ответ на: комментарий от Bulatka

Еще добавлю то что, если отключить авторизацию через kerberos. то авторизация через ldap работает уже нормально.

Bulatka ()
Ответ на: комментарий от menzoberronzan

Спасибо!!! С этим параметром все заработало, а я то думал проблема в самом хелпере. Странно почему месенджеры смогли авторизоваться тогда? У них что своя технология авторизации на прокси сервере? И еще как интересно решить вопрос с вводом имени пользователя, что бы он был без имени домена. У того товарища проблема решилась путем добавления таких строк:
cat /etc/pam.d/squid
auth sufficient pam_krb5.so alt_auth_map=%s@DOMAIN.LOCAL
account required pam_krb5.so
Но это для авторизации через pam, у меня basic. Как ни будь можно этот вопрос решить?

Bulatka ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.