Linux: Полное руководство — страница 65 из 98

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

18.1. Что такое прокси-сервер?

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

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

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

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

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

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

www.squid-cache.org
.

При сборке SQUID из исходных кодов первым шагом должна быть команда

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

SQUID будет установлен в каталог, заданный ключом prefix. Другие ключи сценария configure перечислены в таблице 18.1.


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

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

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

Сервер SQUID использует файл конфигурации

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

Укажите прокси-провайдера (тот сервер, который станет вашим «соседом» (neighbour, peer)):

cache_peer proxy.isp.ru

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

cache_mem 65536

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

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

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

acl allowed_hosts src 192.168.1.0/255.255.255.0

acl localhost src 127.0.0.1/255.255.255.255

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

acl SSL_ports port 443 563

Запретите метод 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

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

ident_lookup on

acl allowed_users user den admin developer

http_access allow allowed_users

http_access deny all

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

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

acl GaMS url_regex games

http_access deny GaMS

http_access allow all

18.4. Запуск SQUID

Первый раз squid нужно запускать с ключом -z, чтобы создать и очистить каталог кэша:

# /usr/local/squid/bin/squid -z

Еще несколько полезных ключей, с которыми можно запускать squid, перечислены в таблице 18.2.


Ключи запуска squid Таблица 18.2

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

18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf

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

В файле squid.conf могут быть заданы следующие параметры сети:

http_port — порт для запросов клиентов. С этого порта прокси-сервер будет ожидать и обрабатывать запросы клиентов. Значение по умолчанию равно 3128;

icp_port — порт для общения с соседями через ICP. Если «соседей» (peer) нет, то установите icp_port 0. По умолчанию используется значение 3130. При использовании этого параметра нужно установить ключ --enable-htcp для директивы htcp_port 4827;

tcp_outgoing_address — при отправлении информации указанный адрес будет использован в качестве исходного. Значение по умолчанию: tcp_outgoing_address 255.255.255.255;

udp_outgoing_address — то же самое, что и предыдущая директива — но только для ICP. Значение по умолчанию: udp_outgoing_address 255.255.255.255. То же, но для ICP при приеме — директива udp_incoming_address со значением по умолчанию 0.0.0.0;

passive_ftp on | off — по умолчанию этот режим включен, но если прокси-сервер находится за брандмауэром, то параметр passive_ftp нужно выключить.

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

«Соседи» — это другие кэширующие серверы, в кэшах которых SQUID ищет запрошенный ресурс перед тем, как обратиться к нему напрямую. Так, SQUID-сервер локальной сети может обратиться к серверу провайдера, региона и т.д. в расчете на то, что чем больше пользователей, тем больше шанс найти копию запрошенных данных ближе, чем по оригинальному адресу. Существует два типа «соседей»:

♦ parent (старший): если запрошенных данных не оказалось в кэше у parent, тот пересылает запрос дальше и возвращает подчиненному готовый ответ. Если SQUID получает отказ (TCP_DENIED) от parent, то обращается к ресурсу напрямую;

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

Каждый «сосед» прописывается отдельной строкой следующего формата:

cache_peer hostname type proxy-port icp-port options

где: hostname — имя узла-«соседа»;

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

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

 icp-port — порт ICP;

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

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

За управление кэшем отвечают следующие директивы:

cache_mem<число> — задает размер оперативной памяти, отводимой под кэш. Размер этот указывается в байтах, килобайтах, мегабайтах (MB) или гигабайтах (GB). По умолчанию используется значение 8 MB;

cache_dir<тип><каталог><размер><1уровня_кат><2уровня_кат> — задает местоположение кэша на диске и его параметры:

 • тип — тип хранения. Практически всегда используется значение ufs;

 • каталог — задает имя каталога, в котором будет храниться кэш;

 • размер — размер (в мегабайтах) отводимого под кэш пространства на жестком диске;

 • 1уровня_кат — максимальное число подкаталогов 1 уровня, которое может быть в указанном каталоге кэша;

 • 2уровня_кат — максимальное количество подкаталогов, которое может быть в каждом из подкаталогов 1 уровня.

Значение по умолчанию: cache_dir ufs /usr/local/squid/cache 100 16 256. Допускается использование нескольких записей с директивой cache_dir для определения нескольких каталогов для размещения кэша;

сасhe_swap_high<число> — процент заполнения кэша, по достижении которого начинается ускоренный процесс удаления старых объектов. Значение по умолчанию равно 95;

cache_swap_low<число> — процент заполнения кэша, по достижении которого прекращается удаление старых объектов. Значение по умолчанию равно 90;

maximum_object_size<число> KB — максимальный размер кэшируемого объекта. Значение по умолчанию равно 4096 KB;

minimum_object_size — файлы меньшего размера не кэшируются. Значение по умолчанию: 0 KB.

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

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

cache_access_log /usr/lосal/squid/logs/aссеss.log — протоколирование запросов к SQUID:

cache_log /usr/local/squid/logs/cache.log — протоколирование запусков процессов;

cache_store_log /usr/local/squid/logs/store.log — протоколирование записи объектов в кэш.

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

В конфигурационном файле

squid.conf
могут быть заданы следующие параметры внешних программ и сервисов:

ftp_user email-адрес — этот email-адрес будет использоваться вместо пароля при анонимном доступе к ftp-серверам;

dns_nameservers список IP-адресов — этот список используется вместо того списка DNS-серверов, который определен в файле

/etc/resolv.conf
; значение по умолчанию — none;

cache_dns program /usr/local/squid/bin/dnsserver — указывает программу разрешения имен (сервер DNS);

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

authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd — традиционная программа аутентификации. Определена в ../auth_modules/NCSA.

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

Параметры администрирования, которые можно задать в файле

squid.conf
, таковы:

cache_mgr_email — почтовый адрес, на который будет послано письмо, если SQUID перестанет функционировать;

cache_effective_user nobody — при запуске SQUID от имени root изменить UID на указанный в параметре сасhe_effective_user:

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

visible_hostname имя_узла — это имя будет упоминаться в сообщениях об ошибках;

hostname_aliases имя — этот параметр задает список синонимов для имени узла.

18.6. Списки ACL