вторник, 17 июня 2008 г.

Инфраструктура Kerberos, Squid

LDAP мы уже настраивали, перейдем к одной из самых популярных серверных компонент - прокси серверу, в нашем случае это Squid.
Достаточное время существует механизм аутентификации для HTTP протокола - Negotiate. В среде windows используется SSPI, в linux GSSAPI. Поддерживается механизм в Firefox, WebKit (Safari), Konqueror, IE7, Squid, ISA server. Про Opera не подскажу, не использую.

Здесь я сделаю отступление, и дам ссылку на статью, прочитав которую, я решил не описывать настройку Apache - прекрасная статья, мне практически нечего к ней добавить.

Собрать Squid надо с ключами --enable-auth="negotiate" --enable-negotiate-auth-helpers="squid_kerb_auth" (это не означает, что других ключей не надо). Надо сказать, что из коробки такой метод сборки хелпера аутентификации squid_kerb_auth работает только для MIT библиотек и для Heimdal надо лезть в helpers/negotiate_auth/squid_kerb_auth/Makefile и править руками (сами найдете где).

Ну и если squid у вас в дистрибутиве уже собраный, то скорее всего хелпера там нет. Сильно рекомендую собирать не из исходников с сайта, а взять исходник из своего дистрибутива и поправить сборочные скрипты. Для debian based надо зайти на packages.*.*, найти squid, скачать исходник и diff к нему, распаковать исходники и пропатчить. Затем vim debian/rules, chmod 755 debian/rules, fakeroot debian/rules binary. Примерно так : ) Заодно разберетесь как пакеты собирать, кто не в курсе.

Еще есть возможность скачать squid_kerb_auth из cvs с sourceforge, но я не думаю, что в дистрибутивном squid вообще включен механизм negotiate, так что пересобирать все равно придется (к слову у меня он как раз из cvs).

Все рекомендации такие нечеткие потому, что у меня это все работает на Slackware, собирается моими скриптами, и для других дистрибутивов вряд ли подойдет. Эта часть как раз самая затратная по времени и самая сложная для неопытных, сами же настройки намного проще.

Настройка заключается, как и всегда, в выгрузке билета и настройке сервера.

/etc/krb5.conf настраиваете по аналогии с предыдущими статьями (копируете просто).

В squid.conf:

auth_param negotiate program /usr/local/squid/libexec/squid_kerb_auth -d -s HTTP/squid_host.realm.tld@REALM.TLD
auth_param negotiate children 10
auth_param negotiate keep_alive on


Выгружаем ключи:

kinit admin/admin
ktutil -k /etc/squid/HTTP.keytab HTTP/`hostname -f` >>> DNS конечно же уже настроен в обе стороны?
chown squid-user /etc/squid/HTTP.keytab >>> пользователя смотрим в своем конфиге
kdestroy


В стартовый скрипт squid (/etc/rc.d/rc.squid, /etc/init.d/squid):

export KRB5_KTNAME=/etc/squid/HTTP.keytab <<< перед стартом демона


Перезапускаем, радуемся жизни пишем баг репорты (можно поднять тему на opennet.ru и дать мне ссылку в комментарии) - всем помогу : )

7 комментариев:

Анонимный комментирует...

Спасибо еще за одну статью

А.Л.

Unknown комментирует...

Добрый день,
бьюсь над керберосом уже вторую неделю. озверела напрочь. не могу понять в чем моя ошибка
а ошибка модуля squid_kerb_auth такая
2008/08/11 17:05:27| squid_kerb_auth: Got 'YR TlRMTVNT....MktORg==' from squid (length: 59).
2008/08/11 17:05:27| squid_kerb_auth: parseNegTokenInit failed with rc=101
2008/08/11 17:05:27| squid_kerb_auth: received type 1 NTLM token

модуль собран с SPNEGO
#DEFINE_SPNEGO=-DHAVE_SPNEGO
#MIT
DEFINE="$DEFINE_SPNEGO -D__LITTLE_ENDIAN__"
INCLUDE=-Ispnegohelp
LIBS="-lgssapi_krb5 -lkrb5 -lcom_err"
#
SPNEGO="spnegohelp/derparse.c spnegohelp/spnego.c spnegohelp/spnegohelp.c spnegohelp/spnegoparse.c"
SOURCE="squid_kerb_auth.c base64.c"
gcc -o squid_kerb_auth $DEFINE $INCLUDE $SOURCE $SPNEGO $LIBS

тикет был создан на AD
C:\WINDOWS>ktpass -princ HTTP/krbldap.realm.net@REALM.NET -mapuser krbldap -crypto des
-cbc-md5 -pass "p-a-s-s-w-o-r-d" -ptype KRB5_NT_SRV_HST -out krbldap.realm.net.keytab

klist его показывает.

идеи кончились.
никак я не понимаю почему он его воспринимает как NTLM :(

Deepwalker комментирует...

Попробуйте раскомментировать строчку:
#DEFINE_SPNEGO=-DHAVE_SPNEGO

Ну и обязательно проверьте права на keytab и все такое.

Unknown комментирует...

насколько я понимаю ситуацию, после того как был сделан kinit права на кейтаб уже не принципиальны.
но...
squid_kerb_auth$ ls -la /etc/squid/krbldap.реалм.keytab
-r-------- 1 nobody anita 59 2008-08-11 16:16 /etc/squid/krbldap.реалм.keytab

ошибка "parseNegTokenInit failed with rc=101" пропала.

а "squid_kerb_auth: received type 1 NTLM token" - живет

сквид отдает клиенту в браузер "...denied...untill you authenticate yourself"

Unknown комментирует...

ура! заработало!
ура - ура - ура.
заработало в FireFox3.0 @ win2000
в IE- нет. по всей видимости, вот эта проблема http://support.microsoft.com/kb/321728/ хотя в логах сквида- никаких ошибок/отказов нет.

Deepwalker комментирует...

А версия IE - 7?

Fr0sT комментирует...

Анна подскажите как решили проблему ?

2011/11/06 13:48:36| squid_kerb_auth: parseNegTokenInit failed with rc=101
2011/11/06 13:48:36| squid_kerb_auth: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information.
Help кто нибудь....