From: Дмитрий Новиков <dmn@nnz.ru>
Newsgroups: http://www.artmagic.ru/labs/
Date: Mon, 4 Dec 2002 13:01:37 +0000 (UTC)
Subject: Организация авторизированного доступа через Squid
Применение ПРОКСИ-сервера для организации авторизированного доступа к
сети Интернет
Д. Новиков (dmn@nnz.ru),
Н. Новикова (nadya@nnz.ru)
http://www.artmagic.ru/a-papers/proxy.shtml
Введение. Анализ способов подключения и авторизации пользователей в
Интерет.
Подключение к Интернет корпоративной сети строится различными
способами: через оптоволоконные выделенные каналы, через медные
провода, спутниковую связь и т.д. При этом важно построить систему,
позволяющую авторизовать доступ пользователей по этим каналам. Доступ
к Интернет - платная услуга, и за Интернет-поток нужно платить.
Поэтому учет потоков между различными пользователями играет важнейшую
роль. Классическим решением для соединения с физической средой
передачи данных являются модемы для физических линий, аппаратные
маршрутизаторы и маршрутизатор на основе PC-серверов. Однако
применение этих средств в чистом виде не всегда полноценно решает
задачу полного контроля Интернет-потоков.
Данная статья посвящена изучению системы ПРОКСИ-серверов, которые
применяются и вместо и вместе с перечисленными средствами.
ПРОКСИ-сервер служит прекрасным дополнением к системе предоставления
корпоративного доступа к Интернет.
Подключение к Интернет с помощью UNIX-сервера. Авторизация и учет
Интернет потоков по IP-адресам и сетям.
Кратко рассмотрим классические решения для авторизации пользователей и
учета потоков с применением UNIX-сервера на примере ОС FreeBSD.
В OC Unix FreeBSD имеется эффективная встроенная система защиты
Firewall (брандмауэр). Брандмауэр -это система или комбинация систем.
По сути, это - регулятор доступа в компьютерные сети. Брандмауэр
позволяет разделить сеть на две или более частей и реализовать набор
правил, определяющих условия прохождения пакетов из одной части сети в
другую. Как правило, граница проводится между корпоративной сетью и
сетью Интернет. Можно говорить, что межсетевой экран разделяет сеть на
два уровня: видимый из Интернета (внешний сегмент) и скрытый
(внутренний сегмент). Брандмауэр устанавливается у входа в
корпоративную сеть, и все коммуникации проходят через него.
Организация межсетевой защиты строится на основе пакетной фильтрации:
каждый проходящий пакет подвергается проверке на соответствие правилу,
и принимается решение: пропустить его или отбросить.
Брандмауэр анализирует пакеты по следующим параметрам:
* IP адрес источника;
* IP адрес приемника;
* Тип протокола (TCP, UDP, ICMP);
* TCP или UDP порт приемника;
* TCP или UDP порт источника;
* Интерфейс исходящих пакетов;
* Интерфейс приходящих пакетов;
* Параметры пакетов.
У каждого правила есть два счетчика:
* количество байт, прошедший по правилу;
* число пакетов, прошедших по правилу.
Основные действия правил:
* разрешить пакет
* запретить пакет
* направить пакет на порт
* посчитать количество байт в пакете и др.
Приведем пример того, как можно авторизовать пользователейлей на
основание сети и конкретного IP-адреса. Предположим, доступ к Интернет
по протоколу http надо предоставить сети 192.168.168.0/24.
Эту задачу можно решить, написав следующею систему правил: задаем
запретительную стратегию написания правил (все что не разрешено -
запрещено); для отдельных сетей или конкретных рабочих станций
(IP-адресам) разрешаем доступ к Интернет- ресурсам.
allow tcp from 192.168.168.0/24 to any 80
deny tcp from any to any 80
В результате только сетка 192.168.168.0/24 имеет права доступа к
Интернет-серфингу. Кроме того, брандмауэр будет учитывать количество
байт, прошедших по заданному правилу. Можно аналогично прописать
правило для отдельного IP-адреса.
Таким образом, проблему ограничения Интернет-потока можно решить,
ограничив права доступа пользователей к определенным ресурсам
Интернет.. Можно запретить некоторые развлекательные службы, такие как
ICQ и IRC (Интернет Relay Chat).
Пример, запрещающий рабочей станции 192.168.168.1 пользоваться службой
ICQ:
deny udp from 192.168.168.1 to any 4000
allow udp from any to any 4000
Можно установить правило, запрещающее пользователю доступ к
определенному IP-адресу:
deny tcp from 192.168.168.0/24 to 195.131.31.20
allow ip from any to any
Возможности брандмауэра позволяют построить систему, позволяющую
учитывать и управлять Интернет потоками. Отметим, что авторизацию
пользователей можно проводить по IP адресам.
Построение системы контроля и учета для аппаратных маршрутизаторов,
таких как системы CISCO строится аналогичным образом.
Анализ недостатков подключения к Интернет с помощью Unix-сервера.
Однако, несмотря на все плюсы и универсальность рассмотренных методов,
они обладают рядом моментов, которые тяжело реализовать
"классическими" методами.
Рассмотрим эти моменты:
1. Для авторизации по IP адресам и сетям каждый пользователь сети
жестко привязан к IP-адресу. При этом приходиться еще привязывать
IP-адрес к рабочему месту (к сетевой карте). Делается это
прописыванием IP-адресов "вручную" или с помощью DHCP сервера с
привязкой к MAC-адресу карты. Таким образом, нужны определенные усилия
для четкой привязки IP-адреса к рабочему месту. Особенно это
сказывается в больших корпоративных сетях, где раздача адресов
"вручную" не имеет смысла.
2. Сложность с авторизацией через IP-адреса возникает, когда
пользователи корпоративной сети не работают жестко на одном рабочем
месте. Например, на одном компьютере работает несколько сотрудников, а
IP-адрес у компьютера один. В итоге, авторизация происходит только
относительно группы пользователей. Ситуация более усугубляется, когда
пользователи работают на терминальном сервере. Этот режим работы
позволяет группе пользователей одновременно работать на одном сервере
через виртуальные экраны. При этом, каждый пользователь работает от
IP-адреса сервера. Надо отметить, что работа в терминальном режиме
сейчас распространяется очень быстро, ведь терминальный сервер штатно
входит в Windows 2000 Advanced Server и все чаще пользователи
предпочитают иметь "тонкие" клиенты с доступом в "толстый"
терминальный сервер.
3. При доступе к Интернет с помощью брандмауэра можно ограничивать или
запрещать доступ пользователей к определенным IP-адресам и сетям.
Однако часто бывает этого недостаточно. Например, на одном IP-адресе
может находиться до несколько сотен Веб-сайтов, а в брандмауэре не
предусмотрена возможность запретить доступ только к определенным
ресурсам.
Например, на сервере с IP два сайта: www.hacker.ru и www.bank.ru.
Очевидно, что нужно запретить доступ к первому сайту и разрешить
доступ ко второму. Но это уровень приложений (протокол http), а
брандмауэр работает с транспортным и сетевым уровнями (протоколы ip,
tcp, udp и т.п.) и для него эти два ресурса просто один IP-адрес.
Часто требуется усложнить задачу и ограничить пользователям доступ к
ресурсам, в которых встречается определенное выражение или слово
(например hacker). Эту задачу брандмауэр также не в состоянии решить.
4. Часто запрашиваемые в Интернете ресурсы однотипны. Особенно это
сказывается в больших сетях. Не секрет, что большинство менеджеров с
утра загружают сайт rbc. Понятно, что при оплате всего входящего
трафика имеет смысл экономить на часто повторяющихся запросах.
5. При работе пользователей с Интернет-ресурсами актуален вопрос:
какую именно программу (посмотрел фильм) скачал тот или иной
пользователь. В этом случае, штатный бранмауэр покажет только IP-адрес
с которым было соединение, но что именно было скачано узнать
невозможно.
Причины, по которым необходимо установить ПРОКСИ-сервер.
Со всеми перечисленными выше моментами прекрасно справляется
специализированный сервер, который "пропускает" через себя все запросы
пользователей в Интернет, позволяет производить авторизацию по логину
и паролю, кэширует запросы и работает на уровне приложений с
протоколами http и ftp. Такие серверы называют ПРОКСИ-серверами и
часто устанавливают в больших и средних сетях вместо или совместно с
"классическими" маршрутизаторами. ПРОКСИ-сервер служит для кэширования
Web-запросов клиентов и при правильной настройке способен значительно
увеличить скорость получения данных с Web-серверов.
Самой популярной и заслуженно признанной платформой для реализации
ПРОКСИ-сервера является OC UNIX. А самым полным программным продуктом,
который стал фактическим стандартом для ПРОКСИ-сервера, является SQUID
(www.squid-cache.org). Этот продукт постоянно развивается и
улучшается. Сейчас в мире установлено огромное количество копий SQUID.
Способы подключения ПРОКСИ- сервера
ПРОКСИ-сервер можно подключать напрямую к Интернет (если имеется
возможность соединения сервера с средой передачи данных в Интернет)
(рис2), подключать совместно с аппаратным маршрутизатором или
UNIX-сервером (рис 3). В общем случае, неважно где относительно
пользователей находиться ПРОКСИ-сервер - важно лишь, чтобы к нему был
доступ. Однако чем "ближе" ПРОКСИ-сервер к пользователю, тем быстрее и
удобнее взаимодействуют с пользователями.
Все дальнейшие построения будут приводиться для сервера SQUID,
работающего на ОС UNIX FreeBSD.
Глава 2. Авторизация на ПРОКСИ-сервере
Одной из самых важных особенностей ПРОКСИ-сервера являются различные
схемы авторизации пользователей для доступа к Интернет-ресурсам.
Причем поддерживается как классическая схема авторизации через
IP-адреса и сети, так и авторизация по логинупаролю, которые можно
брать из самых различных источников, благодаря системе внешних
авторизаторов. Вся система авторизации построена на задании списков
доступа или ACL (Access Lists). Причем ACL бывают различными по типу:
- на основе IP адресов и сетей (причем можно задавать адреса
"источников" и "приемников")
- на основе доменных имен
- на основе регулярных выражений.
- на основе данных, полученных из файла (например, список запрещенных
сайтов)
- на основе данных из внешней программы
Приведем несколько примеров построения списка доступа:
Acl src myComputer 10.128.1.1 - задает ACL из единственного
компьютера-пользователя (или источника) с именем myComputer
Acl src myNetwork 10.128.2.0/24 - ACL задает сеть класса С.
Acl src all 0.0.0.0/0 - ACL задает описывает вообще все IP- сети
После описания различных ACL, можно строить систему доступа,
комбинирующую различные ACL на основе двух правил: http_allow и
http_deny.
Например, классически разрешают доступ своей сети
http_allow myNetwork
Но запрещают доступ всем остальным сетям
http_deny all
Но можно рассмотреть и более сложные комбинации. Например, можно
разрешить доступ всем, кроме одного компьютера:
htpp_allow all !myComputer
Авторизация ip-адресов и сетей
Рассмотрим пример классической системы авторизации, которая уже
частично была описана выше.
Итак, задаем acl для локальной сети:
Acl src myNetwork 10.128.2.0/24
Задаем acl для всех остальных:
Acl src all 0.0.0.0/0
И записываем правила для доступа к Интернет только этой сети:
http_allow myNetwork
http_deny all
После этого, только компьютерам из заданной сети разрешен доступ к
Интернет. При использовании Интернет-ресурсов, в лог-файл squid
записывается информация о конкретном адресе, запросившем конкретный
Интернет-ресурс:
acess.log:
1032862411.262 96 10.128.15.4 TCP_MEM_HIT/200 2581 GET
http://www.ru/eng/images/ssilki.jpg boardsag NONE/- image/jpeg
Авторизация по логинупаролю
Логичным решением поставленной во вступлении проблемы является
авторизация в 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)-домене. Логично было бы по этому
логину и паролю авторизовать пользователя в SQIOD. Тогда решаются
проблемы ведения в SQUID отдельной базы данных пользователей и, как
оказалось, можно решить проблему запроса логинапароля в браузере при
входе в Интернет.
Главная проблема при решении авторизации через Windows-домен - найти и
настроить программу для авторизации заданного пользователя в
Windows-домене. Команда SQUID рекомендует пользоваться программой
winbindd, которая является частью проекта SAMBA (реализация Windows
сервера и клиента под UNIX). Samba - это решение для приложений Unix
при работе с протоколом SMB (Server Message Block). Многие
операционные системы, включая Windows и OS/2, используют SMB для
осуществления взаимодействия типа клиент-сервер в сети. Поддерживая
данный протокол, Samba позволяет серверам Unix устанавливать
соединения при помощи того же протокола, что и продукты от Microsoft
Windows. Поэтому компьютер Unix с работающим Samba, может быть
представлен как сервер в вашей сети Microsoft, а также предоставить
следующие службы:
* Предоставлять в виде ресурса одну или более файловую систему
* Представить в виде ресурса установленные принтеры, как со стороны
клиента, так и сервера
* Получать доступ к клиентам при помощи Сетевого Окружения
* Проводить аутенификацию клиентов, входящих в домен Windows
* Проводить или использовать определение имен WINS
SQUID, начиная с версии 2,5 поддерживает различные схемы авторизации
по логинупаролю, включая basic и NTLM (NT Lan Manager).
* Basic-схема предназначена для авторизации через ручной ввод
логинапароля в броузерре и передача параметров в SQUID.
* NTLM - схема предназначена для автоматического приема броузером
логинапароля и домена, под которыми пользователь
зарегистрировался в Windows-домене. Таком образом, с помощью NTLM
авторизации можно автоматически регистрироваться в SQUID без
ручного подтверждения логина и пароля.
Практическое решение построения системы авторизации через Windows
домен - http://www.artmagic.ru/labs/sqlandwin.shtml
Управление доступом к ресурсам Интернет
Теперь зададимся целью ограничения доступа к определенным ресурсам,
доменам, сетям и подсетям. Принцип ограничения тот же: построение acl.
Например, мождно запретить доступ к IP адресу, , к домену, к ресурсу и
к ресурсу, где встретилось регулярное выражение.
Управление по IP-адресам
Рассмотрим управление доступом по IP адресам к которым осуществляет
доступ пользователь. Допустим, имеется нежелательный для просмотра
сайт по адресу 195.131.31.1 и нежелательная к просмотру сеть
195.131.32.0/24. Запретим пользователям доступ к этому серверу и сети.
acl dst badIP 195.131.31.1
http_allow myNetwork !badIP
http_deny all
Или же к определенной сети
Acl dst badNet 195.131.32.0/24
http_allow myNetwork !badNet
http_deny all
При этом, при попытке доступа в регистрационный файл сервера будет
выдано сообщение:
1032943720.839 180 10.128.36.5 TCP_DENIED 1280 GET http://195.131.31.5
из которого видно, что доступ к этому IP или сети закрыт.
Управление по URL и именам доменов.
Кроме того существуют acl для запрета или разрешения доступа к
ресурсам на основе имен доменов или регулярных выражений в именах
запрашиваемых ресурсов.
Например, запретим доступ ко всем сайтам домена haker.com
acl haker dstdomain *.haker.com
http_deny haker
Например, поставим задачу запретить пользователям скачивать mp3, wav
файлы (музыкальные форматы) и avi и mpeg (видео-файлы). Для этого были
созданы acl на основе регулярных выражений в URL запроса:
Здесь запрещается запрашивать файлы с соответствующими расширениями.
http_deny mp3 wav avi mpeg
Глава 4. Сбор статистической информации об использовании Интернет-
ресурсов.
Сбор статистики и построение отчетов вторая по значимости задача после
авторизации пользователя. ПРОКСИ-сервер позволяет получать полную
информацию о запросах ресурсов и на их основе строить разнообразные
отчеты.
Файлы статистики ПРОКСИ-сервера
SQUID ведет подробный регистрационный файл в который записываются все
запросы к Интернет ресурсам. В стандартной поставке SQUID
регистрационный файл располагается по адресу:
/usr/loca/squid/logs/access.log
Приведем все записи ПРОКСИ-сервера, которые сервер записывает при
загрузке страницы www.yandex.ru
Как видно, только одна страница порождает множество запросов различных
ресурсов (страница, картинки и т.п) и не только с запрашиваемого
ресурса (например банеры загружаются как правило с других ресурсов).
Сбор статистики с ПРОКСИ-сервера
Сбор статистики ведется на основе обработки регистрационных файлов.
Существуют множество программ для обработки регистрационных фалов
SQUID.
Для анализа их работы проведем исследование формата одной строчки
файла:
1032862411.262 (1) 96(2) 10.128.15.4 (3) TCP_MEM_HIT/200 (4) 2581 (5)
GET http://www.ru/eng/images/ssilki.jpg(6) boardsag NONE/- image/jpeg
(8)
* Первый параметр: время в UNIX формате. Для того, чтобы
преобразовать эту цифру в привычное представление достаточно
запустить следующую программу на языке Perl.
#! /usr/bin/perl -p
s/^d+.d+/localtime $&/e;
В приведенном примере это дата: Tue Sep 24 14:13:31 2002
* Второй параметр показывает время прохождения запроса через
кеш-сервер и для составления статистических отчетов значения не
имеет.
* Третий параметр представляет из себя адрес компьютера, сделавшего
запрос.
* Четвертый параметр - результат поиска в Кещ-базе данного ресурса.
В нашем примере ПРОКСИ-сервер нашел данную картинку в памяти
сервера.
* Пятый параметр это размер запрашиваемого ресурса в байтах
* Шестой параметр это URL запрашиваемого ресурса
* Седьмой параметр это логин пользователя, запросившего ресурс. В
данном примере авторизация производиться через Windows домен,
поэтому в примере отображен логин(sag) и домен(board)
Windows-пользователя.
* Восьмой параметр - это тип запрашиваемого ресурса (в нашем случае
это картинка).
На основе этих данных можно строить самые разнообразные отчеты.
Инженером по моим данным был разработана программа на языке Perl для
получения отчетов по адресам пользователей за месяц.
Пример результата работы одной простой программки на PERL:
Такой с виду "невзрачный" вид удобнен для анализа в программе MS Excel
(или пакете Calc) (рис 4).
Глава 5. Внедрение и заключение.
Все работы по изучению ПРОКСИ-сервера проходили на основе крупной
коммуникационной фирмы. Был установлен и внедрен в сеть фирмы
ПРОКСИ-сервер SQUID и проведены ряд испытаний, результаты которых были
представлены этом докладе выше. В результате исследований были
достигнуты важные практические результаты:
1. Установка ПРОКСИ-сервера позволила администраторам сети боле четко
отслеживать HTTP-трафик пользователей сети. Кроме того, администраторы
получили реальный гибкий инструмент для управления доступом конкретных
пользователей к конкретным ресурсам Интернет. В частности мной был
запрещен доступ пользователей к музыкальным и видео-файлам, что решило
проблему хронической "переработки" в Интернете и, как следствие,
слишком большие платежи за Интернет-доступ.
2. Благодаря проведенным исследованиям удалось учитывать трафик по
логинам и паролям Windows-пользователей сети. Это позволило решить
проблему по авторизации и учету трафика для терминальных пользователей
(пользователи, работающие в терминальных сессиях на одном сервере).
3.ПРОКСИ-сервер позволил экономить порядка 30% трафика, благодаря
КЭШ-массиву объемом 15Гб.
ПРОКСИ-сервер прошел успешные испытания в октябре 2002 года и в
настоящий момент вводится в коммерческую эксплуатацию.
Литература и Интернет-источники.
* Документация по SQUID: http://www.squid-cache.org
* FAQ по SQUID как надо настраивать WinBIND авторизацию:
http://www.squid-cache.org/Doc/FAQ/FAQ-23.html
* Документация по SAMBA: http://www.samba.org
* Поиск по группам новостей через http://www.google.com по поисковым словам
squid winbind wb_auth ntlm
* UNIX: Руководство системного администратора. BHV,1996
* Документация по ОС FreeBSD
* FreeBSD HandBook
(http://www.freebsd.org/handbook/handbook.html)
* FreeBSD FAQ (http://www.freebsd.org/FAQ/FAQ.html)
* FreeBSD Man Pages (http://www.freebsd.org/man/man.cgi)
* Программирование в среде UNIX: Изучаем Perl, O'Relly,1996
* D.Brent. Building Internet Firewalls, O'Relly.
581 Прочтений • [Организация авторизированного доступа через Squid (freebsd squid aaa auth ipfw)] [08.05.2012] [Комментариев: 0]