ARTMagic Group

Интернет-студия
Авторизация доступа к Интернет

Авторизация доступа к Интернет на основе Windows NT' \ 2000 авторизации.

Вступление

Классическим решением сандарта предприятия для организации Интернет-сервисов является сервер под управлением UNIX. Практически всегда для Web и FTP трафика используют кеширующий сервер SQUID, который также является стандартом de facto.

Стандартным способом предоставления доступа к SQUID-серверу является доступ на основе специалицированных списков доступа (Access Lists или ACL). В свою очередь списки доступа обычно строятся на основе IP-сетей, которым разрешен доступ к SQUID. Например, определим ACL, которая описывает сеть 10.128.0.0/16 (или с маской 255.255.0.0). и ACL, которая описывает вообще все адресаsquid.conf:

acl net10128 src 10.128.0.0/16

acl all src 0.0.0.0/0

а теперь разрешим ей доступ к Интернет ресурсам

http_access allow net10128

а всем остальным - запретим:

http_access deny all

После этого, только компьютерам из заданной сети разрешен доступ к Интернет. При использовании Internet-ресурсов, в лог-файл squid записывается информация о конкретном адресе, запросившем конкретный Интернет-ресурс: acess.log:

1032862411.262 96 10.128.15.4 TCP_MEM_HIT/200 2581 GET

http://www.ru/eng/images/ssilki.jpg board/sag NONE/- image/jpeg

Здесь присутсвует дата, размер ресурса, IP-адрес станции, зпросившей ресурс, и сам ресурс. Из такого рода записей можно подсчитать трафик как по станции, так и по под-сети.

 

Однако приведенная выше технология позволяет контролировать трафик по IP-адресу Интернет-пользователя. В большинстве случаев этот способ вполне подходит, однако при этом необходимо, чтобы за конретным компьютеров всегда работал конкретный человек.

 

Это условие выполняется не всегда и тогда учет трафика нарушается. Вот типичные условия, при которых требуется другая схема авторизации в Интернете:

Различные пользователи работают на одном и том же рабочем месте (например, посменно)

Пользователи вообще не привязаны к конкретным компьютерам.

Пользователи работают в терминальных сессиях терминального сервера. Тогда вообще весь Интернет-трафик идет с IP-адреса сервера.

 

Поэтому часто встает проблема учета трафика не на основе IP, а на основе другой информации.

 

Авторизация на основе логина и пароля

 

Логичным решением поставленной во вступлении проблемы является авторизация в SQUID по логину и раолю. Такая возможность в SQUID, естесвенно предусмотрена. В SQUID для этого разработана возможность авторизовать через внешнюю программу, которая просто "говорит" "да или "нет" на определенног о пользователя и пароль. Т.о. Можно производить авторизацию по учетной записи умеет производить авторизацию через учетные записи UNIX, через текстовые файлы и т.п.

Например, для того чтобы пользователь авторизовался через файл /usr/local/squid/passwd формата Веб-авторизации (формат Apache), нужно скомпилировать squid вместе с этим модулем (--enable-auth="ncsa; подробнее см. документацию к SQUID). И в конфиг SQUID добавить ACL и разрешающее правило:

 

Разрешает доступ пользователям dima petya vasya, пароли которых будут проверены через файл /usr/local/squid/passwd

 

acl MYUSERS proxy_auth dima petya vasya

http_access allow MYUSERS

http_access deny all

authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd *)

*) для версии 2.4

 

При этом, это решает поставленные в "Введении" проблемы, однако добавляет некоторые неудобства пользователям и администратору:

При первичном входе в Интернет пользователю нужно набратьв броузере логин\пароль для доступа к SQUID. И каждому пользователю необходимо помнить свои параметры.

Администратору необходимо вести базу логинов и паролей в файле.

 

Авторизация через учетные записи Windows

 

При работе в Windows-сетях каждый пользователь при входе в сеть проходит авторизацию в NT(2000)-домене. Было бы здорово использовать эти данные для авторизации SQUID. Тогда решаются проблемы ведения в SQUID отдельной базы данных пользователей и, как оказалось, можно решить проблему запроса логина\пароля в броузере при входе в Интернет.

 

Главная проблема при решении авторизации через Windows-домен - найти и настроить программу для авторизации заданного пользователя в Windows-домене. Команда SQUID рекомендует пользоваться программой winbindd, которая является частью проекта SAMBA (реализация Windows сервера и клиента под UNIX), SQUID, начиная с версии 2.5 поддерживает различные схемы авторизации по логину\паролю, включая basic и NTLM (NT Lan Manager). Basic-схема предназначена для авторизации через ввод логина\пароля в броузере, а NTLM-схема предназначена для автоматического приема броузером логина, пароля и домена, под которыми пользователь зарегистрировался в Windows-домене. Т.о. с помощью NTLM-авторизации можно автоматически регистрироваться в SQUID без ручного подтверждения логина и пароля.

 

Практическое решение построения системы авторизации через Windows домен.

 

Практическое решение проблемы было найдено опытным путем и может быть не самым изящным и правильным. Но прелесть его в том, что оно доделано да конца и работает.

 

Исходные данные

 

1.Компьютер, подключенный к Интернет с установленной ОС: FreeBSD 4.4 (версия и сама ОС не имеют принципиального значения)

2.Сеть, содержащая около 200 Windows-станций, включая терминальные серверы и клиенты

3.Около 250 аккаунтов в домене под управлением Windows 2000 Advanced сервер (домен WORK и 4 доверительных домена).

 

Задача.

Обеспечить авторизацию пользователей на SQUID через учетные записи Windowы наиболее удобным способом.

 

План действий

 

1.Установка и конфигурация SAMBA.

Итак первое, что надо сделать - установить SAMBA для того,чтобы уметь авторизоваться в Windows-домене. Я установил версию 2.2.6pre2. Причем, важно скомпилировать SAMBA с поддержкой winbind, т.е. С параметрами

--with-winbind

--with-winbind-auth-challenge

Примечание:

 

В FreeBSD SAMBA была собрана из портов (ports) и оказалось, что с текущей версией не собирается библиотека CUPS. Поэтому SAMBA была собрана без нее (--without_cups).

После установки, SAMBA нужно настроить на домен Windows сети и на использование winbind:

 

[global]

workgroup = WORK - Имя нашего Windows-домена

netbios name = vGATE - Имя сервера (необязательно)

server string = vGate

hosts allow = 10.128. 127. - Для безопасности.

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 = /bin/bash

max log size = 50

security = domain

password server = Primary Exch - серверы паролей (PDC, BDC)

encrypt passwords = yes

 

Следует обратить внимание на 2 вещи:

 

1. Сначала в параметре password server был указан только PDC (Primary) и winbind не смог найти контроллер домена. Все заработало когда был добавлен BDC (Exch).

 

2. Оба имени - это NetBIOS имена и для того, чтобы они равильно интерпретировались в IP я прописал их в /usr/local/etc/lmhosts

 

10.128.1.40 Primary

10.128.1.34 Exch

 

После этого необходимо заригестрировать SAMBA в домене Windows. Для этого нужэно набрать команду:

 

/usr/local/sbin/smbpass -j WORK (наш домен) -r Primary(наш PDC) -UAdministrator

После этого, следует ввести пароль админиcтратора домена.

Наблюдались проблемы с samba 2.2.4 и регистрацией в нашем ломене - именно поэтому была поставлена версия 2.2.6 из портов.

Далее можно запустить nmbd (/usr/local/sbin/nmbd -D) лучше с включенным дебагом (-d9) и посмотреть в лог-файл, что сеть нормально видна.

Далее можно смело пускать winbindd (/usr/local/sbin/winbindd -d9) - тоже с дебагом и посмотреть как он себя "чувствует" в нашей сети. Спустя примерно секунд 10, можно проверить а запустился ли winbind и функционирует ли он.

Для взаимодействия с winbind служит команда wbinfo. Проверить "видит" ли она winbindd вообще можно командой wbinfio -p. Если она ответит: 'ping' to winbindd succeeded, то значит все в порядке. Иначе надо смотреть в лог-файл winbindd и понимать почему он не запустился. (На самом деле запускается он всегда, да вот на запросы отвечает только если правильно видит сеть). Далее можно попробовать проверить а видит ли winbindd сервер с паролями пользователей (wbinfo -t). Сервер должен сказать "Secret is good".

Если получен ответ "Secrets is bad" то скорее всего проблемы с библиотеками winbindd.

Остановите smbd и winbindd

Удалите файлы secrets.tdb и MACHINE.SID (последнего может и не быть)

На PDC удалите запись о компьютере и одождите удаления его из кэша (примерно 10 минут)

cp nsswitch/libnss_winbind.so /libln

ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.1

ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2

В файле /etc/nsswitch.conf должен содержать стро вида

passwd: files winbind

group: files winbind

Запустите smbd

Запустите winbindd

Добавте машину в домен, как указано выше.

Проверьте правильность работы командой wbinfo -t

Если выдержать нужный интервал в пункте 3, то всё должно заработать.

И, наконец, можно попробовать авторизоваться из UNIX в Wondows домен:

wbinfo -a пользователеь_домена%пароль.

 

Если пользователь авторизовался, будет выдано:

 

plaintext password authentication succeeded

error code was NT_STATUS_OK (0x0)

challenge/response password authentication succeeded

error code was NT_STATUS_OK (0x0)

 

Если неправильный пароль, то

 

error code was NT_STATUS_WRONG_PASSWORD (0xc000006a)

Could not authenticate user dmn%doct with plaintext password

challenge/response password authentication faile

error code was NT_STATUS_WRONG_PASSWORD (0xc000006a)

Could not authenticate user dmn with challenge/response

Все это значит, что модуль wbinfo наконец настроен и правильно функционирует. Можно приступать к настройке SQUID.

 

2.Теперь нужно настроить SQUID.

Для начала, нужно отметить, что NTLM схему поддерживает SQUID, начиная с версии 2.5. Поэтому я скачал версию 2.5.PRE13.

Далее, SQUID нужно скомпилировать с поддержкой схем авторизации и модулем

 

winbind../configure -enable-auth="ntlm,basic" \

--enable-basic-auth-helpers="winbind"\

--enable-ntlm-auth-helpers="winbind"

 

Теперь можно проверить а понимает ли SQUID-овский авторизатор winbind. Для этого нужно запустить:

 

/usr/local/squid/libexec/wb_auth -d

И ввести вручную имя пароль (через пробел).

 

Если все работает корректно, то программа выдаст

 

/wb_auth[91945](wb_basic_auth.c:129): Got 'dmn XXXXX' from squid (length: 10).

/wb_auth[91945](wb_basic_auth.c:55): winbindd result: 0

/wb_auth[91945](wb_basic_auth.c:58): sending 'OK' to squid

 

После этого, нужно настроить squid, чтобы он корректно работал на основе IP-авторизации (см введение).

Теперь осталось подключить авторизацию к SQUID. Для этого в конфиге SQUID нужно описать в схемы авторизации через winbind

 

auth_param ntlm program /usr/local/squid/libexec/wb_ntlmauth

auth_param ntlm children 5

auth_param ntlm max_challenge_reuses 0

auth_param ntlm max_challenge_lifetime 2 minutesauth_param basic program /usr/local/squid/libexec/wb_auth

auth_param basic children 5

auth_param basic realm Squid proxy-caching web server

auth_param basic credentialsttl 2 hours

 

Причем важно чтобы NTLM авторизация шла первой, иначе будет применяться авторизация basic и IE будет спрашивать пароль.

 

Дальше нужно сделать соответсвующую ACL и параметр доступа. Важно, чтобы это шло после описания авторизаций.

 

acl myusers proxy_auth REQUIRED

http_access allow myusers

http_access deny all

 

Теперь остается запустить SQUID и все проверить.

 

Что должно быть

Если пользователь авторизовался в домене, то IE не спросит пароль, а пойдетт сразу в Интернет. Причем, в лог-файле SQUID будет бесценная информация, а кто это был:

 

1032943720.839 180 10.128.36.5 TCP_CLIENT_REFRESH_MISS/200 1280 GET http://www.ru/eng/images/demos.jpg work\dmn DIRECT/194.87.0.50 image/jpeg

 

Т.е. Это был пользователь dmn из домена work.

Если пользователь не авторизовался в домене - его спросят логин и пароль. Если он введет логин\пароль такой же, как при входе в домен, то его пустят в Интернет.

Если пользователь пользуется не IE (например, Mozilla, Netscape, Opera), он будет должен набрать свой логин и пароль для авторизации в Windows.

Если аккаунт в Windows-домене закрыт, то и доступ в Интернет будет закрыт.

 

Примечания

Winbind корректно авторизует не только в заданном домене, но и в Trust-доменах, TRUST-домены можно посмотреть командой wbinfo -m

Вообще у команды wbinfo есть масса полезных функций, подробнее их можно узнать wbinfo -h

По умолчанию для FreeBSD 4.4 из портов устанавливается версия SQUID 2.4. Она не подходит. Пакет нужно качать с сайта www.squid-cache.org.

Пути к программам для различных ОС могут быть разными

 

Ссылки

Документация по SQUID: www.squid-cache.org

FAQ по SQUID как надо настраивать WinBIND авторизацию: http://www.squid-cache.org/Doc/FAQ/FAQ-23.html

Документация по SAMBA: www.samba.org

Поиск по группам новостей через www.google.com по поисковым словам squid winbind wb_auth ntlm

 

Отзывы и дополнения присылайте Дмитрию Новикову на адрес Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

 

Дополнения после публикации на www.linux.org.ru

 

Господин с ником "and3008" дополняет и разъясняет:

 

1. Авторизация при прозрачном кэшировании НЕВОЗМОЖНА!

 

2. Про безопасность: NTLM действительно является не безопасной штукой. По крайней мере версия 1.0 В WinNT 4.0 с SP3 и выше и Win2000 используется NTLM версии 2.0 В Самбе он так же используется по умолчанию (с версии 2.2.0 кажись). plain-text используется когда клиент (браузер) не умеет авторизоваться по NTLM. На сегодняшний день это умеет делать только IE 4.X и выше. Пароль при plain-text авторизации все же не передается в чистом виде. Применяется кодирование base64. Так что школьники-кулхацкеры вероятно отдохнут. :)

 

3. Лирическое отступление по поводу паролей. Более-менее надежной является аутентификация через Kerberos, но дядя Билл сделал в W2K свою реализацию Kerberos и таперича его низя использовать из других (отличных от Windows) систем. В связи с этим Самба доселе не может подружиться с W2K доменом в режиме native.

 

4. Аутентификация NTLM не работает в случае если кэши работают в режиме "ёлки". Авторизацию NTLM over HTTP не работает через иерархию прокси. Это ФАКТ!

 

Много вопоросов было как авторизовать опреленные группы из Wondows домена. Господин с ником "debosh2k" разъясняет:

 

Для авторизации групп - --enable-external-acl-helpers="winbind_group" (это при компилировании SQUID) далее идем в $src/helpers/external_acl/winbind_group и читаем readme. Пишем три строки в конфге (SQUID) и тащимся.

PS. Есть еще wbinfo_group тамже - враппер на перле.

Все статьи

Последние новости

Путешествие во времени: Падение форинта

Пятница, 18 Мая 2012

News image

Венгерская валюта в нынешнем году побила рекорды среди мировых валют по части падения - форинт переживает не лучшие времена. На нем отразился финансовый кризис, в котором находится Венгрия. Тамошние власти были вынуждены обратиться в Мировой Валютный фонд с просьбой о выдаче кредита, окончательно опозорив форинт в глазах мирового ...

Подробнее

Литература

Архив публикаций

Реклама