Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> www.lissyara.su —> squid+ad2008

squid+ad2008\kerberos+ldap и win7\ie8

Автор: opt1k.


В ближайшее время предстоит переход с 2003 windows server'a на 2008R2 и переход клиентов на windows 7. Я решил посмотреть как будет работать в этой ситуации старый софт. Установил под virtualbox'ом win2008,win7 и freebsd8.0. Настроил АД, ввёл в него клиента win7, на фряху поставил сквид, самбу. И тут грабли - internet explorer 8, который штатно идёт в вин7, не захотел работать со сквидом по ntlm. Гугл дал решение в правке то ли реестра, то ли политик безоспасности, но тут же была найдена рекомендация отказа от ntlm в пользу kerberos. Решил работать в этом направлении. Гугление дало решение в виде хелпера squid_kerb_ldap. С ним не получилось, последняя версия при компиляции выдавала ошибки, устранить которые я не смог, а более старая успешно собравшись отказалась работать. Уже отчаявшись я попробовал squid_kerb_auth и оно заработало! осталось лишь прикрутить авторизацию, для неё я остановился на squid_ldap_group. Как оказалось теперь можно не ставить тяжёлую самбу, но провалив попытки сгенерировать кейтаб другими способами пришлось делать это с помощью самбы.
Итак
uname -a
FreeBSD squid.testdomain.ru 8.0-RELEASE FreeBSD 8.0-RELEASE #0: 
Sat Nov 21 15:02:08 UTC 2009     
root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64

Обновляем порты
cat /usr/local/etc/csup.conf
*default host=cvsup6.ru.FreeBSD.org
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_8_0
*default delete use-rel-suffix
*default compress
ports-all tag=.

csup /usr/local/etc/csup.conf

Зависимые порты устанавливаются с дефолтными опциями.

Python собран без поддержки IPv6

Ставим самбу:
cd /usr/ports/net/samba34/
из опций
[X] ADS

cat /usr/local/etc/smb.conf
netbios name = squid
realm = TESTDOMAIN.RU
security = ADS
encrypt passwords = yes
password server = dc.testdomain.ru
workgroup = testdomain

Важно что бы hostname машины совпадало с netbios name.
realm - полное имя вашего домена
рабочая группа - netbios имя вашего домена
password server - адрес контроллера домена

cat /etc/resolv.conf
domain  testdomain.ru
nameserver      192.168.0.200

где 192.168.0.200 - адрес контроллера домена с поднятой ролью DNS сервера.

cat /etc/krb5.conf
[libdefaults]
      default_realm = TESTDOMAIN.RU
      dns_lookup_kdc = no
      dns_lookup_realm = no
      default_keytab_name = /etc/krb5.keytab

default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

[realms]
      TESTDOMAIN.RU = {
              kdc = dc.testdomain.ru
              admin_server = dc.testdomain.ru
      }

[domain_realm]
      .testdomain.ru = TESTDOMAIN.RU
      testdomain.ru = TESTDOMAIN.RU

проверим верность настройки kerberos, при успехе никаких сообщений быть не
должно(пользователь test должен существовать в АД):
kinit test
test@TESTDOMAIN.RU's Password:

Вводим самбу в домен:
rehash
net ads join -U test
Enter test's password:
Using short domain name -- TESTDOMAIN
Joined 'squid' to realm 'testdomain.ru'

Создаём кейтаб:
setenv KRB5_KTNAME FILE:/etc/krb5.keytab
net ads keytab CREATE
net ads keytab ADD HTTP
Warning: 
"kerberos method" must be set to a keytab method to use keytab functions.
Processing principals to add...

Ставим сквид:
cd /usr/ports/www/squid30/
из опций
[X] SQUID_KERB_AUTH
[X] SQUID_LDAP_AUTH

cat /usr/local/etc/squid/squid.conf
#порт на котором будет висеть сквид
http_port 3128
#директория под кеш и её параметры
cache_dir ufs /usr/squid/cache 8000 8 64
#лог доступа, полезен для отладки
access_log /var/log/squid/access.log squid

#сл. три строки - аутентификатор
auth_param negotiate program /usr/local/libexec/squid/squid_kerb_auth
#кол-во аутентификаторов 10 у меня хватает на сотню пользователей 
#(хватает и 4 на 100)
auth_param negotiate children 10
auth_param negotiate keep_alive on

#хелпер, который берёт информацию о принадлежности пользователя к группе из AD
external_acl_type ldap_search %LOGIN \
/usr/local/libexec/squid/squid_ldap_group \
-R -b "dc=testdomain,dc=ru" \
-f "(&(samaccountname=%v)(memberof=cn=%a,cn=users,dc=testdomain,DC=ru))" \
-D test@testdomain.ru -W /usr/local/etc/squid/authpw \
-K -h dc.testdomain.ru
acl i_allowed external ldap_search inter

acl AUTHENTICATED proxy_auth REQUIRED

acl localnet dst 192.168.0.0/24
#выпускаем всех кто прошёл kerberos аутентификацию на локальные сайты
http_access allow AUTHENTICATED localnet
#выпускаем в инет всех кто в нужной группе
http_access allow i_allowed
#всем остальным оставить попытки и заниматься своими обязанностями.
http_access deny all

Создаём файлик /usr/local/etc/squid/authpw и пишем туда пароль пользователя,
которому разрешено просматривать ldap каталог active directory.
Затем сменим владельца и доступ для безопасности.

chown squid:squid /usr/local/etc/squid/authpw
chmod 500 /usr/local/etc/squid/authpw

На контроллере домена в папке Users (именно в этой папке) создать группу
inter и поместить туда пользователей которым необходимо дать доступ в интернет.
В оснастке DNS добавляем 2 записи A и ptr для машины со сквидом
( у меня добавились автоматом после того как я ввёл самбу в домен ).
Проверяем работу ldap хелпера:
/usr/local/libexec/squid/squid_ldap_group \
-R -b "dc=testdomain,dc=ru" \
-f "(&(samaccountname=%v)(memberof=cn=%a,cn=users,dc=testdomain,DC=ru))" \
-D test@testdomain.ru -W /usr/local/etc/squid/authpw \
-K -h dc.testdomain.ru -d
test inter
OK

OK в случае если пользователь test принадлежит группе inter и ERR если нет.

В случае ошибок можно проверить доступность ldap каталога, примерно так:
ldapsearch -D "test@domain.com" -x -W -b "dc=testdomain,dc=ru" -h \
dc.testdomain.ru

результатом будет вывод содержимого ldap каталога.

mkdir /var/log/squid
chown squid:squid /var/log/squid
chown squid:squid /etc/krb5.keytab
mkdir -p /usr/squid/cache
chown -R squid:squid /usr/squid
rehash
squid -z
echo 'squid_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/squid start

В ie прописываем в адресе прокси-сервервера squid.testdomain.ru и порт 3128.
Протестировано в ie8, ff 3.6

Замечу:
1)существует способ создания кейтаба без установки самбы, если кто то знает
как точно это делается - пожалуйста, сообщите мне.
2)поиск в лдап каталоге производится без шифрования, что плохо, попытки
исправить это я пока не предпринимал.
3)разделение по группам даёт массу возможностей по разгранечению доступа,
обрезанию скорости и т.д. всё это выходит за рамки данной заметки.
Тред на форуме

UPD0 07/03/2011
секцию логгинга убрал по просьбам.
Много проблем возникает из-за рассинхронизации времени на контроллере домена,
в комментариях попросили дать подсказку как с этим бороться:
Добавляем в cron следующее

ntpdate dc

где DC имя или IP вашего контроллера домена.
Чем чаще будет выполнятся, тем лучше, у меня раз в 5 минут.
Замечу что на клиенте windows xp internet explorer 6 не захотел работать,
после апдейта до 8 версии всё заработало.
Так же был протестирован FireFox 3.6.15.
Тестовый стенд:

%uname -a
FreeBSD squid.testdomain.ru 8.2-RELEASE FreeBSD 8.2-RELEASE #0: 
Thu Feb 17 02:41:51 UTC 2011     
root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64

autoconf-2.68       Automatically configure source code on many Un*x platforms
autoconf-wrapper-20101119 Wrapper script for GNU autoconf
gettext-0.18.1.1    GNU gettext package
gmake-3.81_4        GNU version of 'make' utility
help2man-1.39.1     Automatically generating simple manual pages from program o
libexecinfo-1.1_3   A library for inspecting program's backtrace
libiconv-1.13.1_1   A character set conversion library
libtool-2.4         Generic shared library support script
m4-1.4.15,1         GNU m4
openldap-client-2.4.24 Open source LDAP client implementation
p5-Locale-gettext-1.05_3 Message handling functions
perl-5.10.1_3       Practical Extraction and Report Language
pkg-config-0.25_1   A utility to retrieve information about installed libraries
python27-2.7.1_1    An interpreted object-oriented programming language
samba35-3.5.6_2     A free SMB and CIFS client and server for UNIX
squid-3.1.11        HTTP Caching Proxy
talloc-2.0.1_1      Hierarchical pool based memory allocator
tdb-1.2.1_1,1       Trivial Database



размещено: 2010-04-29,
последнее обновление: 2011-03-07,
автор: opt1k


*, 2010-05-31 в 20:37:43

допиши про синхронизацию ntp с контролером домена

в /etc/krb5.conf секция логинг не работает либо допиши как создать файлы под логи либо убрать секцию вообще))

к net ads keytab CREATE и net ads keytab ADD HTTP
добавь ключ -U так как на тачке авторизирован не под доменной учеткой

ие8 и фуфлефокс 3.6 и хром работают
сафари и опера не работают
касперски апдейт не работает

уточни самба 34 стэйбл? если нет то думаю лучше указать /usr/ports/net/samba
kinit test.user не совсем понятно должно быть так kinit administrator@GOOGLE.COM

уточни на win2k3 будет работать?
утосни на win2k3 с hisec policy будет работать?

*, 2010-05-31 в 20:54:16

напиши про wireshark как отловить ошибки в кербе (хотябы самый минимум)
это уже скорее в раздел траблшутинга
ну и csup счас мало кто пользуется да и новичкам меньше команд вводить когда есть portsnap

напиши про /usr/local/libexec/squid/squid_kerb_auth
как можно проверить

если на squid27 который стэйбл работает то лучше его указать по понятным причинам)))

удачи))

*, 2010-06-01 в 17:44:40

McLeod095 извиняюсь ХУЛИ эту ссылку приводить?
даже под никсами она уже не актуальна можно все через апт поставить со всеми хелперами
да тематика у нашего сайта бсд а не никсы

Alex, 2011-10-28 в 15:37:00

> Замечу:
> 1)существует способ создания кейтаба без установки самбы, если кто то знает
> как точно это делается - пожалуйста, сообщите мне.

ниже ответ если актуально

/usr/src/packages/BUILD/squid_kerb_proxy_auth$ cat README
1) Patch 2.6.STABLE13 with my patch file and extract my source to squid's src directory.
2) Run configure with CFLAGS="-I/usr/kerberos/include" LDFLAGS="-L/usr/kerberos/lib -Wl,-R/usr/kerberos/lib" LIBS="-lgssapi_krb5 -lkrb5" ./configure  (this assumes MIT Kerberos)
3) Configure Kerberos with AD as kdc
4) Create a keytab with an AD user (This will be the user for authenticating squid to the ISA server) as follows
#ktutil
ktutil:  addent -password -p markus@WINDOWS2003.HOME -k 1 -e rc4-hmac
Password for markus@WINDOWS2003.HOME:
ktutil:  wkt mm.keytab
ktutil:  quit
5) Set the keytab environment variable in the squid startup file with:
export KRB5_KTNAME=FILE:/etc/squid/mm.keytab
6) Add a line to squid.conf like
cache_peer  isa.windows2003.home       parent    8080 0  proxy-only no-query  login=NEGOTIATE
7) Contol parent access via never_direct or similar
never_direct allow all


Create a keytab for a user:

MIT

#ktutil
ktutil:  addent -password -p markus@SUSE.HOME -k 1 -e rc4-hmac
Password for markus@SUSE.HOME:
ktutil:  wkt mm.keytab
ktutil:  quit

Heimdal

#ktutil  -k mm_heim.keytab add
Principal: markus@SUSE.HOME
Encryption type: arcfour-hmac-md5
Key version: 1
Password:
Verifying password - Password:

Андрей, 2012-01-27 в 20:23:19

Генерить keytab можно еще и с помощью ktpass на виндовом сервере например так:
C:\Program Files\Support Tools>ktpass -princ HTTP/proxy1.domain.ru@DOMAIN.RU -mapuser proxy1 -crypto rc4-hmac-nt -pass "pass" -ptype KRB5_NT_SRV_HST -out proxy1.keytab
rc4-hmac-nt - т.к. 2003 домен

При установке из портов на FreeBSD 9.0 уперся в проблему, единственным симптомом которой, помимо отказа в доступе, были записи в логе
squid_kerb_auth: ERROR: gss_accept_sec_context() failed:  Miscellaneous failure (see text). unknown mech-code 0 for mech unknown
2012/01/25 20:35:09| AuthenticateNegotiateHandleReply: Error validating user via Negotiate. Error returned 'BH gss_accept_sec_context() failed:  Miscellaneous failure (see text). unknown mech-code 0 for mech unknown'
При этом на машине пользователя klistом билетик обнаруживался и в трафике между пользователем и прокси обмен токенами происходил. На прокси kinit и squid_kerb_auth_test отрабатывали нормально.
До конца причину подобного поведения я так и не понял  , но насторожило найденное описание проблем связки heimdal и шифрования rc4-hmac-nt.
Заработало так:
1. Установил из портов kerberos MIT
2. Использовал хелпер с  [url=http://sourceforge.net/projects/squidkerbauth/files/squidkerbauth/] (1.0.7), и указал при сборке ./configure --enable-mit=/usr/local
что интересно через squid пользователи авторизуются нормально а squid_kerb_auth_test выдает ошибку

Siro, 2012-08-31 в 18:52:13

http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
Там проверенный способ создания keytab.
/usr/ports/sysutils/msktutil

Mox, 2014-02-07 в 16:23:50

Есть статья попонятней, без самбы и работают вложенные группы http://timp87.blogspot.ru/2014/02/squid-ad.html



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1848 секунд
Из них PHP: 32%; SQL: 68%; Число SQL-запросов: 37 шт.
Исходный размер: 38658; Сжатая: 10566