Документация по ОС FreeBSD Пятница, 10.05.2024, 11:03
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

Аутентификация пользователей в squid через доменные аккаунты Windows
Задача.
 
Необходимо аутентифицировать пользователей в squid на основе доменных аккаунтов. Не всегда подходит классическая схема учета трафика по IP адресам примеры случаев когда подобная ситуация не устраивает достаточно полно описаны в. Кроме того, стояла задача защищать подключение к 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 в моем случае это:
 
        [libdefaults]
        default_realm = PIVA.NET
        [realms]
        PIVA.NET = {
                kdc = lab002.piva.net
                admin_server = lab002.piva.net
        }
 
Все остальные опции можно оставлять по умолчанию.
Попробуем соединиться с сервером Kerberos.
 
        [root@lab003 ~] kinit -p Administrator@piva.net
        Administrator@PIVA.NET's Password:
 
и вводим пароль, система должна выдать
 
        kinit: NOTICE: ticket renewable lifetime is 1 week
 
проверим соединение, в моем случае это выглядит так:
 
        [root@lab003 ~] klist
        Credentials cache: FILE:/tmp/krb5cc_0
                Principal: administrator@PIVA.NET
 
          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
 
        winbind separator = +
        winbind use default domain = yes
        winbind uid = 10000-20000
        winbind gid = 10000-20000
        winbind enum users = yes
        winbind enum groups = yes
 
        template homedir = /home/winnt/%D/%U
        template shell = /usr/local/bin/bash
 
Как и советует автор [1], добавим необходимы нам имена в файл /usr/local/etc/lmhosts
 
        10.10.10.1      lab001.piva.net
        10.10.10.2      lab002.piva.net
        10.10.10.3      lab003.piva.net
 
Входим в домен:
 
        net ads join -U Administrator%password
        Joined 'LAB003' to realm 'PIVA.NET'
 
3. winbindd
 
Следующим шагом у нас запуск winbindd.
Я запускал с ключиком -d10, в debug режиме.
 
Проверить работоспособность winbind можно командой wbinfo
 
Необходимо удостовериться, что winbind нормально работает и может получать списки пользователей и групп с сервера.
 
        [root@lab003 ~] wbinfo -t
        checking the trust secret via RPC calls succeeded
 
Это означает что доверительный аккаунт компьютера создан.
 
Посмотрим на список пользователей.
 
        [root@lab003 ~] wbinfo -u (для просмотра пользователей)
        administrator
        guest
        support_388945a0
        lab002$
        krbtgt
        iusr_lab002
        iwam_lab002
        lab001$
        iwam_lab001
        iusr_lab001
        lab003$
        pablo
        lab005$
 
Как видно, аккаунт для нашего компьютера уже создался (lab003$) и взаимодействие налажено.
 
Попробуем аутентифицироваться в домене:
 
        [root@lab003 ~] wbinfo -a administrator%password
        plaintext password authentication succeeded
        challenge/response password authentication succeeded
 
На этом настройку winbind можно считать законченной.
 
4. squid
 
Устанавливаем /usr/ports/www/squid
 
Насколько видно из Makefile helper для winbind включен по умолчанию.
Т.е. ничего особенного конфигурировать не нужно.
 
После установки при запущенном winbindd необходимо проверить работу helper
 
Для этого запускаем
 
        /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
 
Вводим piva+administrator password
 
Если получен ответ 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.
 
 
Автор: Misha Volodko
Категория: Squid | Добавил: oleg (12.11.2007)
Просмотров: 1424 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024