Anshlag - калужское объединение друзей - туристов. Отдых, путешествия, туризм.

Anshlag - калужское объединение друзей - туристов. Отдых и путешествия по Карелии, туризм, водные походы. Отчеты о походах, рассказы туристов, новости туризма. Форум, гостевая, походные фотографии.



  
 Воскресенье, 20 января 2019, 16:22:02 

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

Быстрый переход ...

» Авторизация доступа...

Авторизация доступа к Интернет squid+samba на основе 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". И, наконец, можно попробовать
авторизоваться из 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.aquid-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 



Прокомментировать
Хотите оставить свои комментарии? Зарегистрируйтесь на нашем сайте!

 
(c) Anshlag 2002 - 2008