From: Misha Volodko <misha.volodko@gmail.com.>
Newsgroups: email
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Аутентификация пользователей в squid через доменные аккаунты Windows
Задача.
Необходимо аутентифицировать пользователей в squid на основе доменных
аккаунтов. Не всегда подходит классическая схема учета трафика по IP
адресам примеры случаев когда подобная ситуация не устраивает достаточно
полно описаны в [1]. Кроме того, стояла задача защищать подключение к
Internet в большой сети от приносимых ноутбуков.
Инструменты.
1. OC FreeBSD использовались версии 4.11-RELEASE и 5.3-RELEASE-p5
2. Windows 2003 - контроллер домена.
3. samba-3.0.11
4. squid-2.5.8
Сеть и топология.
Домен - piva.net
Контроллер домена - lab002.piva.net
Рабочие станции соответственно - labxxx.piva.net
Машина на которой установлен squid - lab003.piva.net
Практическое руководство.
1. Настройка клиента Kerberos
В FreeBSD существует две реализации Kerberos производства MIT и HEIMDAL,
соединиться с сервером Kerberos используемым в Windows 2003 у меня
получилось только в случае использования Kerberos клиента производства
HEIMDAL. Более того, он работает, только если версия старше 0.6. В пятой
ветке FreeBSD в базовой системе идет Kerberos производства HEIMDAL
версии 0.6.1, поэтому для его использования необходимо добавить в файл
/etc/make.conf следующие параметры:
MAKE_KERBEROS5 = yes
ENABLE_SUID_K5SU = yes
После этого необходимо пересобрать мир (make buildworld && make
installworld). Как это делается, я описывать не буду, обратитесь к
руководствам по этой теме.
В базовой системе четвертой версии FreeBSD идет клиент Kerberos
производства HEIMDAL однако довольно старой версии 0.5.1. Для
использования сервера Kerberos производства HEIMDAL версии 0.6.х в
четвертой версии FreeBSD необходимо установить порт
/usr/ports/security/heimdal.
Важное замечание - DNS сервер, прописанный в /etc/resolv.conf ДОЛЖЕН
ЗНАТЬ о зоне используемой для построения Windows домена (наиболее
удобный путь настроить его как вторичный DNS сервер). Клиент Kerberos
будет искать записи типа SRV _kerberos._udp.
Настраиваем клиента Kerberos. В файл /etc/krb5.conf необходимо добавить
информацию о сервере Kerberos в моем случае это:
Issued Expires Principal
Feb 22 17:10:40 Feb 23 03:10:38 krbtgt/PIVA.NET@PIVA.NET
Отлично, соединение есть.
2. Samba
Устанавливаем /usr/ports/net/samba3/
Необходимые опции
[X] ADS With Active Directory support
[X] WINBIND With WinBIND support
Далее необходимо настроить smb.conf
Отличное руководство по этому процессу [6].
Замечание: на четвертой версии FreeBSD при использовании Kerberos
клиента версии 0.6.3 программа wbinfo не могла проверить наличие
доверительного аккаунта в домене(wbinfo -t). Проблема решилась
использованием security level domain вместо ads.
Приведу опции, которые добавлял я:
workgroup = piva
server string = lab003
netbios name = lab003
realm = piva.net
security = ads
password server = lab002.piva.net
encrypt passwords = yes
Если получен ответ OK значит все отлично. Иначе необходимо смотреть логи
winbindd
Настраиваем собственно сам squid. Отличное руководство по это делу [3]
В данном случае были добавлены следующие стороки:
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 10
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
Данная конфигурация описывает два helper'a один дня IE (ntlmssp)
другой для всех остальных пользователей (mozilla, opera, etc).
Необходимо отметить что для нормальной работы из броузера у пользователя
под который работает squid должно хватать прав для обращения к сокету на
котором слушает winbindd. Согласно man ntlm_auth это winbindd_privileged
в $LOCKDIR. В моем случае сокет находиться в
/var/db/samba/winbindd_privileged. Для решения проблемы я изменил группу
владельца этой директории на squid.
После этого можно приступать к полноценному тестированию из веб броузера.
5. Как это выглядит
В случае если пользователь не входит в домен ему выдается окно в котором
предлагается ввести имя пользователя, пароль и домен. Клиенты вошедшие в
домен и использующие IE аутентифицируются прозрачно. Клиенты вошедшие в
домен и использующие иные броузеры аутентифицируются по протоколу basic.
Каждый раз при запуске вводят имя и пароль.
Самая главная проблема - невозможность аутентифицировать пользователей с
русскими именами.
6. Дополнительный функционал
Дополнительно можно использовать возможность управлять доступом в
Internet из Windows. Для этого можно воспользоваться параметром
--require-membership-of= ntlm_auth. Как видно из названия при
аутентификации helper будет требовать наличие пользователя в
определенной группе. В моем случае указание там названия группы проблемы
не решило. Пришлось указывать универсальный идентификатор группы в
домене (SID). Узнать его можно с помощью уже знакомой программы wbinfo.
Например, если необходимо узнать SID группы inetusers:
[root@lab004 ~] wbinfo -n inetusers
S-1-5-21-1828638205-4279006917-513177360-1121 Domain Group (2)
После этого необходимо изменить конфигурационный файл squid указав в
местах описания хелперов необходиму директиву.
auth_param ntlm program /usr/local/bin/ntlm_auth
--require-membership-of=S-1-5-21-1828638205-4279006917-513177360-1121
--helper-protocol=squid-2.5-ntlmssp
Теперь пользователи которые не входят в группу inetusers не смогут выйти
в Internet.