ACL (Access Control Lists) — списки контроля доступа. Довольно часто возникает необходимость группировки однотипных параметров в единое целое для их последующей обработки. Для эффективного решения этой задачи используются списки ACL. Например:
acl SSL_ports port 443 563
Эта запись означает, что создается список SSL_ports типа port. Элементами списка являются номера портов 443 и 563.
Добавить новый элемент к уже существующему списку можно так:
acl add SSL_ports port 999
Удалить ненужный элемент можно с помощью операции del:
acl del SSL_ports 999
Переименовать список позволяет операция ren:
acl ren SSL_ports Allowed_ports
Удалить все списки вместе с их содержимым позволяет операция flush:
acl flush
Стандарт ACL требует, чтобы перед именем списка обязательно был указан символ $. Строго говоря, все перечисленные выше примеры без этого символа неправильны. Однако большинство фильтров, например SQUID, пренебрегают этим требованием, и вы можете указывать имена списков без знака доллара.
Итак, ACL — это определение списка доступа, имеющее следующий формат:
acl <имя><тип><регулярное_выражение>
Типы, которые можно использовать при составлении списков ACL, перечислены в таблице 18.3.
Типы ACL Таблица 18.3
Тип Назначение Src IP-адрес/маска IP-адрес клиентов Src IP1-IP2/маска Диапазон адресов Dst IP-адрес/маска URL узлов Time [день] [Ч1:М1-Ч2:М2] Время, где день — это одна буква из SMTWHFA Port Список портов Port port1-port2 Диапазон портов Proto Протокол — HTTP или FTP Method Метод — GET или POST Browser [-i] рег_выражение Заголовок браузера клиента, [-i] — игнорируется регистр букв
18.6.1. Параметры доступа
Параметры доступа в файле
squid.conf
задаются следующими директивами:♦http_access allow | deny aclname — разрешать доступ к прокси по HTTP;
♦icp_access allow | deny aclname — разрешать доступ к прокси по ICP;
♦miss_access allow | deny aclname — разрешать получать ответ MISS («не найден») от вас;
♦cache_peer_access cache-host allow | deny aclname — ограничить запросы к данному соседу — расширение для cache_peer_domain;
♦proxy_auth_realm Squid proxy-caching web server — строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кэшу.
18.7. Отказ от рекламы. Баннерный фильтр
Вам не хочется тратить лишнее время на загрузку рекламных баннеров? Мне тоже. К счастью, SQUID позволяет достаточно просто решить эту проблему. Просто вставьте следующие строки в свой файл
squid.conf
:acl good_url url_regex "/usr/local/etc/sguid/acl/good_url"
acl bad_urlpath urlpath_regex "/usr/local/etc/squid/acl/bad_urlpath"
acl bad_url url_regex "/usr/local/etc/squid/acl/bad_url"
http_access deny bad_ur_path !good_url
http_access deny bad_url !good_url
Соответственно, нужно будет создать три файла:
good_url
, bad_url_path
и bad_url
. В файл bad_url
следует поместить URL с плохой репутацией, например:^http://.*doubleclick
^http://.*-ad.flycast.com/server/img/
^http://1000.stars.ru/cgi-bin/1000.cgi
^http://12.16.1.10/~web_ani/
А в файл
bad_url_path
— «плохие» пути, например, такие, которые часто бывают у баннеров:88x31.*gif
88x31.*GIF
100x80.*gif
100x80.*GIF
100x100.*gif
100x100.*GIF
120x60.*gif
120x60.*GIF
179x69.*gif
193x72.*gif
468x60.*gif
Примеры файлов good_url, bad_url_path и bad_url можно взять на моей домашней страничке
http://dkws.narod.ru
.18.8. Разделение канала с помощью SQUID
Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров работала в Интернете с одной скоростью, а другая — с другой. Это может потребоваться, например, для разграничения пользователей, которые используют канал для работы, и пользователей, которые используют ресурсы канала в личных целях. Естественно, первым пропускная способность канала важнее, чем вторым. С помощью прокси-сервера SQUID можно разделить канал.
Для начала в файле конфигурации
squid.conf
укажите, сколько пулов, то есть групп пользователей, у вас будет:delay_pools 2
Затем определите классы пулов. Всего существует три класса:
♦ Используется одно ограничение пропускной способности канала на всех.
♦ Одно общее ограничение и 255 отдельных для каждого узла сети класса С.
♦ Для каждой подсети класса В будет использовано собственное ограничение и отдельное ограничение для каждого узла.
В файл
squid.conf
добавьте следующие директивы:delay_class 1 1 # определяет первый пул класса 1 для
# домашних пользователей
delay_class 2 2 # определяет второй пул класса 2 для
# служащих
Теперь задайте узлы, которые будут относиться к пулам:
acl home src адреса
acl workers src адреса
delay_access 1 allow home
delay_access 1 deny all
delay_access 2 allow workers
delay_access 2 deny all
Затем укажите ограничения:
delay_parameters 1 14400/14400
delay_parameters 2 33600/33600 16800/33600
Для пула класса 1 используется одно ограничение для всех компьютеров, входящих в пул — 14400 байт. Первое число задает скорость заполнения для всего пула (байт/сек). Второе — максимальное ограничение.
Для пула класса 2 используются ограничения на всю подсеть и отдельно на каждого пользователя. Если бы у нас был определен пул класса 3, то для него ограничения выглядели бы примерно так:
delay_parameters 3 128000/128000 64000/128000 12800/64000
Первые два числа задают соответственно скорость заполнения и максимальное ограничение для всех. Следующая пара чисел определяет скорость заполнения для каждой подсети и максимальное ограничение, а третья — скорость заполнения и максимальное ограничение для индивидуального пользователя.
18.9. Настройка поддержки прокси у клиентов
После того, как вы настроили прокси-сервер, осталось напомнить процедуру настройки использования прокси для некоторых распространенных браузеров.
Настройка Internet Explorer под использование прокси-сервера производится следующим образом: в окне Сервис→Свойства обозревателя→Подключение→Настройка сети установите необходимые параметры, то есть имя прокси-сервера и его порт.
Если вам нужно настроить использование прокси-сервера для Netscape Communicator, то выберите из меню Edit→Preferences→Advanced→Proxies→Manual Proxy Configuration→View (рис. 18.1). В появившемся окне установите необходимые параметры, то есть имя прокси-сервера и его порт.
Рис. 18.1. Настройка Netscape Communicator
Теперь посмотрим, как настроить использование прокси-сервера для популярного Linux-браузера Konqueror. Выберите в строке меню команду Настройка→Настроить Konqueror→Прокси (рис. 18.2). Нажмите кнопку Настроить и укажите имя прокси-сервера и его порт.
Рис. 18.2. Настройка Konqueror
18.10. Технология SOCKS5, или как использовать аську из локальной сети
18.10.1. Введение в SOCKS. Прокси-сервер SOCKS5
Технология SOCKS основывается на использовании одноименных протокола и прокси-сервера. Может возникнуть вопрос: «Зачем нам еще один прокси-сервер, если мы уже рассмотрели SQUID?». А дело в том, что прокси-сервер SQUID работает на протоколах верхнего уровня (HTTP, FTP) и жестко к ним привязан. Однако существуют приложения, работающие непосредственно на транспортных протоколах TCP и UDP и испытывающие проблемы при взаимодействии. Для решения этих проблем и был разработан протокол SOCKS. Он позволяет приложениям, работающим по TCP и UDP, использовать ресурсы сети, доступ к которым ограничен в силу архитектуры или настроек сети.
Классическим и основным примером является использование интернет-пейджера ICQ из локальной сети, защищенной брандмауэром (межсетевым экраном). У локального пользователя нет реального IP-адреса и прямого выхода в Интернет, а весь трафик направляется через сервер-шлюз сети, на котором установлен брандмауэр, не пропускающий трафика от ICQ.
Решает проблему пересечения межсетевых экранов клиент/серверными приложениями, работающими по протоколам TCP и UDP, установка сервера SOCKS на шлюзе. При этом через сервер SOCKS будет осуществляться перенаправление запросов на удаленную машину, а также прозрачная передача трафика после установки соединения.
Нужно отметить, что оба прокси-сервера (SOCKS5 и SQUID) могут быть установлены на одном сервере и функционировать одновременно, не мешая друг другу.
ПримечаниеТеоретически для решения проблемы пересечения бастиона можно было бы использовать IP-маскарадинг. При этом TCP/UDP-пакеты паковались бы в HTTP-сообщения (или другие протоколы верхнего уровня) и шлюз записывал бы в них свои заголовки (свой IP-адрес). В результате казалось бы, что эти пакеты исходят от него самого. Но такое решение имеет много минусов, обусловленных протоколами верхнего уровня и связанными с ними заморочками. Кроме того, в какой-то степени теряется анонимность: ведь при использовании SOCKS информация об IP вообще не передается (это не предусмотрено самой технологией). А еще, поскольку в SOCKS заголовков HTTP нет совсем, никто не сможет определить, что вы использовали прокси-сервер.
Прежде чем мы перейдем непосредственно к рассмотрению установки и настройки сервера SOCKS, стоит отметить еще одно его достоинство. Оно заключаются в том, что SOCKS-серверы могут без проблем выстраиваться в цепочку, позволяя вам еще эффективнее замести следы: направьте свой трафик через несколько прокси-серверов, и ваше сообщение уже никто не выследит. Некоторые прокси-серверы HTTP тоже могут выстраиваться в цепь, но это сопряжено с большими сложностями и проблемами- Кроме того, браузерами официально не предусмотрена поддержка таких цепочек.
Что касается версий протокола, то они отличаются следующим:
♦ SOCKS4 — основывается на TCP;
♦ SOCKS5 — работает как с TCP, так и с UDP. Кроме того, в нем расширена система адресации, поддерживается авторизация и удаленные DNS-запросы.
Клиентами сервера SOCKS5 являются популярные клиенты ICQ и licq, клиентская версия оболочки ssh, а также другие программы.
18.10.2. Настройка сервера SOCKS5
Популярный прокси-сервер, работающий по протоколу SOCKS5, поддерживает компания Permeo (
www.socks.permeo.com
). Я пользуюсь socks5 v1.0 release 11 и настройку рассмотрю на его примере. Этот сервер не в полной мере некоммерческий (лицензия — не GPL), поэтому вам может быть удобнее использовать альтернативы — DeleGate (www.delegate.org
) или Dante (www.inet.no/dante
). О последнем я скажу в п.18.10.4.Все настройки сервера socks5 содержатся в конфигурационном файле
/etc/socks5.conf
. В большинстве случаев параметры по умолчанию вполне приемлемы. Сейчас мы рассмотрим пример конфигурационного файла (листинг 18.1), а потом разберемся, что все это означает.Листинг 18.1. Файл /etc/socks5.conf
set SOCKS5_NOREVERSEMAP
set SOCKS5_NOSERVICENAME
set SOCKS5_NOIDENT
set SOCKS5_MAXCHILD 128
set SOCKS5_TIMEOUT 10
auth - - u
permit u - - - - - -
interface 192.168.0. - eth0
В первой строке мы отменяем обратное разрешение адресов, благодаря чему сервер будет работать заметно быстрее. Вторая строка означает, что мы будем протоколировать номера портов вместо имен сервисов. Теоретически это тоже должно повысить эффективность работы сервера. Параметр SOCKS5_NOIDENT запрещает рассылку клиентам ident-запросов. Четвертая строка устанавливает максимально допустимое число потомков сервера — не жадничайте. Пятая строка, как вы уже успели догадаться, устанавливает тайм-аут (10 секунд).
Вся остальная настройка сервера выполняется с помощью директив auth и permit. Первая устанавливает тип аутентификации, а вторая разрешает доступ определенным узлам и пользователям. Полный формат директивы auth такой:
auth <исходный_узел><исходный_порт><метод_аутентификации>
В приведенном примере мы будем запрашивать пароль у всех клиентов.
Формат директивы permit:
permit <аутентификация><команда><исх_узел><узел_назначения><исх_порт><порт_назнач> [список_пользователей]
В примере я разрешаю доступ всем и отовсюду с использованием аутентификации. Следующий пример использования директивы permit демонстрирует гибкость этого прокси-сервера:
permit u cpubt 192.168. - - [100,1000] den
В этом примере мы разрешаем доступ пользователю den (с использованием пароля, конечно). Пользователь
den
имеет право использовать Connect, Ping, UDP, BIND и Traceroute (cpubt) с адресов 192.168.*.*. Диапазон входящих (первый «-») и исходящих (второй «-») портов — от 100 до 1000.В дополнение к директиве permit можно использовать директиву deny такого же формата, но противоположного назначения (запрет доступа).
Директива interface в приведенном примере разрешает все соединения от компьютеров с адресами 192.168.0.* (наша внутренняя сеть) ко всем портам интерфейса
eth0
.Имена и пароли пользователей сервера socks5 содержатся в файле
/etc/socks5.passwd
в формате <имя><незашифрованный_пароль>
. После создания этого файла настройку socks5 можно считать законченной.18.10.3. Запуск сервера socks5
Запускается сервер следующей командой:
# /usr/local/bin/socks5 -f -s
При запуске с этими ключами демон должен перейти в фоновый режим и выводить диагностические сообщения на стандартный вывод (в нашем случае это экран). Если сервер сконфигурирован правильно, вы должны увидеть примерно следующее:
11410: Socks5 starting at Mon Mar 4 19:13:55 2002 in normal mode
После удачного запуска остановите сервер (
killall socks5
) и добавьте его запуск в сценарий автозагрузки системы.18.10.4. Dante — еще один сервер SOCKS5
Этот сервер считается более простым в настройке. Он использует файл конфигурации
/etc/sockd.conf
(листинг 18.2).Листинг 18.2. Примерный файл /etc/sockd.conf
internal: 192.168.0.1 port = 1080
external: 111.111.111.111
client pass {
from: 192.168.0.0/16 to: 0.0.0.0/0
}
pass {
from: 0.0.0.0/0 to: 192.168.0.0/16
command: bindreply udpreply
log: connect error
}
Директива internal определяет ваш внутренний интерфейс (точнее, внутренний IP-адрес), a external — ваш настоящий IP (111.111.111.111). В блоке client pass указываются возможные клиенты вашего сервера (сеть 192.168.0.0), а в блоке pass — имена узлов, которые могут «общаться» с вашими клиентами. В приведенном примере разрешается отвечать клиентам со всех узлов (0.0.0.0). Протоколироваться будут только ошибки соединения.
18.10.5. Настройка клиентов SOCKS5 (ICQ и licq)
Настройку клиентов будем рассматривать на примере двух самых, наверное, популярных SOCKS-клиентов. Сначала рассмотрим настройку программы ICQ для Windows, а потом licq — ICQ-клиента для Linux.
Запустите программу ICQ и нажмите на кнопку ICQ. Из появившегося меню выберите команду Preferences и перейдите в раздел Connections на вкладку Server (рис.18.3). Включите режим использования прокси-сервера и установите тип прокси-сервера — SOCKS5. Потом перейдите на вкладку Firewall и установите параметры прокси-сервера: имя, порт, тип (socks5), имя пользователя и пароль (рис. 18.4).
Рис. 18.3. Свойства соединения ICQ
Рис. 18.4. Параметры прокси-сервера
С программой licq будет немножко сложнее. Во-первых, нужно установить на компьютере пользователя программу runsocks, входящую в состав пакета прокси-сервера (эту программу можно также найти в Интернете отдельно), и перекомпилировать licq, включив поддержку SOCKS5. Для этого перейдите в каталог, содержащий исходные тексты licq, и запустите сценарий
configure
с параметром --enable-socks5:$ ./configure —enable-socks5
После этого выполните привычные команды:
make; make install
.Теперь нужно создать файл
/etc/libsocks5.conf
и добавить в него строку:socks5 - - - - 192.168.0.1:port
192.168.0.1 — это адрес вашего SOCKS5-сервера, port — порт, необходимый клиенту (обычно 1080).
Глава 19