• 15.1. Что такое SQUID?
  • 15.2. Установка SQUID
  • 15.3. Настройка SQUID
  • 15.4. Запуск SQUID
  • 15.5. Формат файла squid.conf
  • 15.5.1. Параметры сети
  • 15.5.2. Параметры соседей
  • 15.5.3. Управление кэшем
  • 15.5.4. Протоколирование
  • 15.5.5. Параметры внешних программ
  • 15.5.6. Списки ACL
  • 15.5.7. Параметры доступа
  • 15.5.8. Параметры администрирования
  • 15.6. Отказ от рекламы. Баннерный фильтр
  • 15.7. Разделение канала
  • 15.8. Программы для учета трафика
  • 15.9. Настройка клиентов
  • 15

    Прокси-сервер SQUID

    15.1. Что такое SQUID?

    SQUID — это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading — маскарадинг), увеличивает скорость обработки запроса при повторном обращении (кэширование), а также обеспечивает дополнительную безопасность.

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

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

    Прокси-сервер Squid образуется несколькими программами, в числе которых: сама программа сервера squid, а также программа dnsserver — программа обработки DNS-запросов. Когда запускается программа squid, то она сначала запускает заданное количество процессов dnsserver, каждый из которых работает самостоятельно и может осуществлять только один поиск в системе DNS. За счет этого уменьшается общее время ожидания ответа DNS.

    15.2. Установка SQUID

    SQUID может быть установлен из исходных текстов или в виде RPM-пакета. Установка RPM-пакета SQUID очень проста — для этого нужно ввести команду

    rpm –ih squid-2.3.STABLE2-3mdk.i586.rpm

    Я использую версию squid 2.3. Более новая версия доступна в виде исходных кодов. Исходники можно получить по адресу ftp://ftp.squid.org. Для распаковки исходных кодов, выполните следующие команды:

    cd /usr/src/

    gunzip squid-2.3.STABLE2-3-src.tar.gz

    tar xvf squid-2.3.STABLE2-3-src.tar.gz

    cd squid

    Теперь перейдем непосредственно к установке:

    ./configure --prefix=/usr/local/squid

    make all

    make install

    SQUID будет установлен в каталог, заданный ключом prefix — /usr/local/squid. Помимо prefix можно пользоваться ключами, представленными в табл. 15.1.

    Ключи сценария configure Таблица 15.1

    Ключ Описание
    --enable-icmp Измерять путь до каждого HTTP-сервера при запросах с помощью ICMP
    --enable-snmp Включить SNMP-мониторинг
    --enable-delay-pools Управление трафиком
    --disable-wccp Отключить Web Cache Coordination Protocol
    --enable-kill-parent-hack Более корректный shutdown
    --enable-splaytree Позволяет увеличить скорость обработки ACL

    15.3. Настройка SQUID

    Сервер SQUID использует файл конфигурации squid.conf, который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc — более ранние версии). Откройте его в любом текстовом редакторе, например, joe/usr/local/squid/etc/squid.conf. Далее выполните следующую последовательность действий:

    1. Укажите прокси провайдера:

    cache_peer proxy.isp.ru

    В данном случает proxy .isp.ru становится нашим «соседом» (neighbour, peer).

    2. Установите объем памяти, доступный squid, и каталог для кэша:

    cache_mem 6553 6

    cache_dir /usr/local/squid/cache 1024 16 256

     где: 65536 — объем оперативной памяти в байтах, который можно использовать под кэш;

     1024 — количество мегабайт, отводимое на диске в указанном каталоге под кэш. В этом каталоге будут храниться кэшированные файлы. Стоит ли говорить, что если у вас несколько жестких дисков, то кэш нужно разместить на самом быстром из них.

    3. Укажите хосты, которым разрешен доступ к прокси-серверу:

    acl allowed hosts src 192.168.1.0/255.255.255.0

    acl localhost src 127.0.0.1/255.255.255.255

    4. Укажите разрешенные SSL-порты:

    acl SSL_ports port 443 563

    5. Запретите метод CONNECT для всех портов, кроме указанных в acl SSL_ports:

    http_access deny CONNECT !SSL_ports

    и запретите доступ всем, кроме тех, кому можно:

    http_access allow localhost

    http_access allow allowed_hosts

    http_access allow SSL_ports

    http_access deny all

    6. Пропишите пользователей, которым разрешено пользоваться squid (в рассматриваемом примере это den, admin, developer):

    ident_lookup on

    acl allowed_users user den admin developer

    http_access allow allowed_users

    http_access deny all

    Тэги maxium_object_size и maxium_object устанавливают ограничения на размер передаваемых объектов.

    Ниже приведен пример запрета доступа к любому URL, который соответствует шаблону games и разрешения доступа ко всем остальным:

    acl GaMS url_regex games

    http_access deny GaMS

    http_access allow all

    15.4. Запуск SQUID

    Теперь, когда вы выполнили базовую настройку SQUID, его нужно запустить: /usr/local/squid/bin/squid –z

    Параметр –z необходим для создания (обнуления) каталога, содержащего кэш. Обычно этот параметр нужен только при первом запуске. Некоторые другие полезные параметры SQUID представлены в табл. 15.2.

    Параметры SQUID Таблица 15.2

    Параметр Описание
    -а порт Задает порт для входящих HTTP-запросов
    -d Включает режим вывода отладочной информации в стандартный поток ошибок (на stderr)
    -f файл Задает файл конфигурации
    -h Выдает справочную информацию
    -k reconfigure Посылает сигнал HUP
    -k shutdown Завершение работы прокси-сервера
    -k kill Завершение без закрытия журналов
    -u порт Задает порт для входящих IСР-запросов
    -s Включает журналирование с помощью syslog
    -v Выдает информацию о версии SQUID
    -D Не делать DNS-тест при запуске
    -N Не становиться демоном (фоновым процессом)
    -Y Более быстрое восстановление после сбоев

    15.5. Формат файла squid.conf

    В файле squid.conf задаются всевозможные параметры конфигурации прокси-сервера. Давайте рассмотрим их все по порядку.

    15.5.1. Параметры сети

    Порт для запросов клиентов (см. рис. 15.1):

    http_port 3128

    Рис. 15.1. Параметры прокси-сервера


    Если «соседей» (peer) нет, то установите icp_port 0

    icp_port 3130

    Порт для общения с соседями — ICP — через TCP. При использовании этого параметра нужно установить ключ --enable-htcp при установке htcp_port 4827.

    Следующий параметр указывает, по какому адресу нужно принимать входящие пакеты, если хост имеет несколько интерфейсов. В версии 2.3 этого параметра нет:

    tcp_incoming_address 0.0.0.0

    При отправлении информации указанный адрес будет использован в качестве исходного:

    tcp_outgoing address 0.0.0.0

    То же, но для ICP:

    udp_outgoing_address 0.0.0.0
    (аналогично, для ICP)

    То же, но для IСР (при приеме):

    udp_incoming_address 0.0.0.0

    По умолчанию этот режим включен, но если прокси-сервер находится за бастионом (firewall), то параметр passive_ftp нужно выключить:

    passive_ftp on|off

    15.5.2. Параметры соседей

    Описание соседей производится строками следующего формата:

    cache_peer hostname type proxy-port icp-port options

    где: hostname — имя соседа;

     type — тип соседа: parent — старший, sibling — одного уровня;

     proxy-port — порт прокси-сервера;

     icp-port — порт ICP;

     options — параметры.

    При этом каждый сосед прописывается отдельной строкой.

    Parent — при отсутствии запроса в локальном кэше он перенаправляется к parent; тот, если запроса не окажется в его кэше, пересылает его дальше и т.д. Возвращает готовый ответ подчиненному. Если squid получает TCP_DENIED от parent, то обращение к ресурсу будет идти напрямую.

    Sibling — при отсутствии запроса в локальном кэше, запрос перенаправляется в sibling; при отсутствии запроса в нем, возвращает сообщение об этом, никаких дополнительных действий не предпринимается.

    15.5.3. Управление кэшем

    cache_swap_high число

    При достижении этого уровня заполнения кэша (в процентном соотношении) начинается ускоренный процесс удаления старых объектов.

    cache_swap_low 90

    Процесс удаления прекращается при достижении этого уровня.

    maximum_object_size 4096 KB

    Максимальный размер кэшируемого объекта.

    minimum_object_size 0 KB

    Файлы меньшего размера не сохраняются.

    15.5.4. Протоколирование

    Ниже перечислены режимы протоколирования SQUID с указанием соответствующих журналов. Если какой-то журнал вам не нужен, установите none вместо имени файла.

    cache_access_log /usr/local/squid/logs/access.log

    Протоколируется каждый запрос к SQUID. Журнал называется /usr/local/squid/logs/access.log.

    cache_log /usr/local/squid/logs/cache.log

    Протоколируются запуски процессов. Журнал называется /usr/local /squid/logs/cache.log.

    cache_store_log /usr/local/squid/logs/store.log

    Протоколируются записи объектов в кэш. Журнал называется /usr/local/squid/logs/store.log.

    15.5.5. Параметры внешних программ

    ftp_user email-адрес

    Указанный здесь email будет использоваться вместо пароля при анонимном доступе к ftp-серверам.

    dns_nameservers список IP-адресов

    Значение данного параметра используется вместо того списка DNS-серверов, который определен в файле /etc/resolv.conf; по умолчанию — none.

    cache_dns_program /usr/local/squid/bin/dnsserver

    Данный параметр задает программу разрешения IP-адресов в имена (сервер DNS).

    authenticate_program none

    Позволяет производить аутентификацию клиентов, делающих запросы. При этом должен быть определен ACL proxy_auth.

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

    Традиционная программа аутентификации. Определена в ../auth_modules/NCSA.

    15.5.6. Списки ACL

    ACL (Access Control Lists) — списки контроля доступа. Довольно часто возникает потребность группировки однотипных параметров в единое целое для их последующей обработки. Для эффективного решения этой задачи используются списки контроля доступом (ACL). Например:

    acl SSL_ports port 4-43 563

    Эта запись означает, что создается список SSL_ports типа port. Элементами списка являются номера портов 443 и 563.

    Добавить новый элемент к уже существующему списку (параметр add) можно так:

    acl add SSL_ports port 999

    Удалить ненужный элемент можно с помощью параметра del: acl del SSL_ports 999

    Переименовать список позволяет параметр ren (от rename):

    acl ren SSL_ports Allowed_ports

    Удалить все списки вместе с их содержимым позволяет параметр flush:

    acl flush

    Стандарт ACL требует, чтобы перед именем списка обязательно был указан символ $. Другими словами, все перечисленные выше примеры по большому счету должны быть неправильными. Например, для создания списка нужно использовать запись:

    acl $SSL_ports port 443 563

    Однако большинство фильтров, например SQUID, пренебрегают этим требованием, и вы можете указывать имена списков без знака доллара.

    Итак, ACL — это определение списка доступа. Имеет следующий формат:

    acl имя тип строка

    где: тип — это тип объекта;

     строка — регулярное выражение.

    Можно использовать список:

    acl имя тип имя_файла

    Перечисление параметров производится по одному параметру в строке. Типы, которые можно использовать при составлении списков ACL, указаны в табл. 15.3.

    Типы ACL Таблица 15.3

    Тип Описание типа
    Src ip-address/netmask Задает IP-адрес клиентов
    Src addr1-addr2/netmask Указывает диапазон адресов
    Dst ip-address/netmask Задает URL хостов
    Time [day-abbrevs] [h1:m1-h2:m2] Время, где день — это одна буква из SMTWHFA
    Port Список портов
    Port port1–port2 Диапазон портов
    Proto Протокол — HTTP или FTP
    Method Метод — GET или POST
    Browser [-i] regexp Сравнивается заголовок User-Agent

    [-i] — игнорируется регистр букв.

    15.5.7. Параметры доступа

    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

    Строка текста, которая будет выдана на экран клиента при запросе имени/пароля доступа к кэшу.

    15.5.8. Параметры администрирования

    cache_mgr email

    Данный параметр задает почтовый адрес, на который будет послано письмо, если squid перестанет функционировать.

    cache_effective_user nobody

    При запуске SQUID от имени root изменить UID на указанный в параметре cache_effective_user.

    cache_effective_group nogroup

    При запуске SQUID от имени root изменить GID на указанный в параметре cache_effective_group.

    visible_hostname имя_хоста

    Это имя будет упоминаться в сообщениях об ошибках.

    hostname_aliases имя

    Этот параметр задает список синонимов для имени хоста.

    15.6. Отказ от рекламы. Баннерный фильтр

    Вам не хочется тратить лишнее время на загрузку рекламных баннеров? Мне тоже. К счастью, SQUID позволяет достаточно просто решить эту проблему. Просто вставьте следующие строки в свой файл /usr/local /etc/squid/squid.conf:

    acl good_url url_regex "/usr/local/etc/squid/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_urlpath !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://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

    15.7. Разделение канала

    Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров могла работать с одной скоростью, а другая — с другой. Это может потребоваться, например, для разграничения пользователей, которые используют канал для работы, и пользователей, которые используют ресурсы канала в домашних целях. Естественно, первым пропускная способность канала важнее, чем вторым. С помощью прокси-сервера SQUID можно разделить канал.

    Для начала в файле конфигурации укажите, сколько пулов, то есть групп пользователей, у вас будет:

    delay_pools 2

    Затем определите классы пулов. Всего существует три класса:

    1. Используется одно ограничение пропускной способности канала на всех.

    2. Одно общее ограничение и 255 отдельных для каждого узла сети класса С.

    3. Для каждой подсети класса В будет использовано собственное ограничение и отдельное ограничение для каждого узла.

    В файл 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

    Первые два числа задают соответственно скорость заполнения и максимальное ограничение для всех. Следующая пара чисел определяет скорость заполнения для каждой подсети и максимальное ограничение, а третья — скорость заполнения и максимальное ограничение для индивидуального пользователя.

    15.8. Программы для учета трафика

    Для мониторинга работы SQUID и вообще для учета трафика можно воспользоваться следующими программами:

    sqmgrlog — http://www.ineparnet.com.br/orso/index.html

    mrtg — http://www.switch.ch/misc/leinen/snmp/perl/

    iptraf — http://dkws.narod.ru/linux/soft/iptraf-2.4.0.tar.gz

    bandmin — http://www.bandmin.org

    webalizer (анализ работы Apache) — http://www.mrunix.net/webalizer/

    Вместе с данными программами поставляется довольно читаемая документация, поэтому подробно на их использовании я останавливаться не буду. Программа MRTG описана в п. 8.5.

    15.9. Настройка клиентов

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

    Internet Explorer 5

    Меню Сервис→Свойства обозревателя→вкладка Подключение→Настройка сети. В появившемся окне установите необходимые параметры, то есть имя прокси-сервера и его порт (см. рис. 15.2).

    Рис. 15.2. Настройка Internet Explorer


    Netscape Communicator

    Меню Edit→Preferences→Advanced→Proxies→Manual Proxy Configuration→View (см. рис. 15.3).

    Рис. 15.3. Настройка Netscape Communicator


    Konqueror

    Меню Настройки→Настройки→Прокси (см. рис. 15.4).

    Рис. 15.4. Настройка Konqueror








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх