Глава 22 Proxy-сервер

Глава 22 Proxy-сервер

При подключении к любому провайдеру вам выдаются параметры настройки – адрес сервера DNS, адрес почтового сервера и сервера новостей, а так же – адрес proxy-сервера.

Что собой представляет proxy-сервер? Если вы настроите свой браузер для работы через proxy-сервер, то при запросе некоторого документа из Интернета, если некоторое время назад кто-то уже обращался с подобным запросом, вы получите документ незамедлительно, с максимальной скоростью, на которую способно ваше сетевое подключение, потому что вы получите копию документа, взятую из кэша proxy-сервера. Если же proxy-сервер не имеет в своем кэше данного документа, то proxy-сервер запросит удаленный WWW-сервер, хранящий оригинал, и выдаст документ вам, одновременно положив копию документа в свой кэш.

Чем больше пользователей пользуются proxy-сервером, тем более существенной становится его помощь. Согласно статистике, количество обращений пользователей к одним и тем же документам в сети Интернет приближается к 60 %.

Многие proxy-серверы обладают еще одним интересным свойством – они могут обмениваться информацией с соседними proxy-серверами, что существенно ускоряет доступ к данным, хранящимся на удаленных или сильно загруженных серверах.

Proxy-сервер предоставляет следующие возможности:

• централизованный выход в Интернет через один сервер в сети;

• локальное хранение часто просматриваемых документов для увеличения скорости загрузки страниц;

• возможность регулировать пропускную способность канала в зависимости от его нагрузки;

• авторизованный доступ в Интернет;

• возможность обмена данными кэша с соседними proxy-серверами.

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

Наиболее распространенным proxy-сервером, доступным под лицензией GNU, является Squid.

Squid

Squid это высокопроизводительный кэширующий proxy-сервер, поддерживающий протоколы FTP, gopher и HTTP. Squid сохраняет часто запрашиваемые данные в оперативной памяти компьютера, что позволяет резко увеличить производительность proxy-сервера, кэширует DNS-запросы (это свойство интересно тем, кто не имеет своего DNS-сервера). Помимо вышеперечисленных возможностей, поддерживает SSL, расширенный контроль доступа и полную регистрацию запросов.

Одной из ключевых возможностей пакета Squid является использование протокола Internet Cache Protocol (ICP, Протокол интернет-кэширования), что позволяет создать иерархию proxy-серверов Squid для дополнительной экономии пропускной способности канала.

Поддерживаемые функции Squid:

• proxy и кэширование HTTP, FTP;

• proxy для SSL;

• иерархия кэшей;

• ICP, НТСР, CARP, Cache digests;

• прозрачный proxy;

• WCCP;

• гибкий контроль доступа;

• HTTP-серверное ускорение;

• SNMP;

• кэширование DNS-запросов;

• возможность ограничения трафика.

Рассмотрим некоторые из этих функций подробнее.

Протокол ICP

Протокол ICP используется в иерархии кэшей для поиска объектов в дереве кэшей Squid-серверов. Если ваш Squid не находит нужного документа, то посылает ICP-запрос другим Squid-серверам, входящим в вашу иерархию proxy-серверов. Эти серверы отвечают ICP ответами hit (попадание) или miss (промах). После получения ответов ваш сервер решает, при помощи какого кэша proxy-сервера получить необходимые ему данные.

Cache digest

Компактная форма представления списка содержимого кэша proxy-сервера. Proxy-серверы могут обмениваться этой информацией с соседями для избежания необходимости делать ICP-запросы (экономия трафика). В качестве ключей объектов используется протокол шифрования MD5.

Иерархия кэшей

Иерархия кэшей – это структура кэширующих proxy-серверов, расположенных логически как родительский/дочерний и братский узлы таким образом, что кэши, ближайшие к интернет-каналу, являются родителями тем proxy-серверам, которые находятся дальше от точки доступа к Интернету. В случае, когда кэш запрашивает объект от родителя, и у того в кэше необходимый объект отсутствует, родительский proxy-сервер получает объект из Интернета, кэширует его и передает дочернему. Таким образом, при помощи иерархии достигается максимальная разгрузка канала.

Кроме родительских/дочерних отношений, Squid поддерживает понятие братских кэшей – находящихся на одном уровне иерархии. Каждый proxy-сервер в иерархии независимо ни от кого решает, откуда получать необходимый объект – напрямую из Интернета, от родительского или братского кэша.

Алгоритм получения запрошенного объекта пакетом Squid

Алгоритм таков:

1. Разослать ICP-запросы всем братским кэшам.

2. Дождаться всех ответов, пришедших в течение заданного времени:

• получив первый ответ hit (попадание), получить объект;

• или взять объект от первого родительского кэша, ответившего miss (зависит от настройки);

• или получить объект из Интернета.

Конфигурирование пакета Squid

Основное место конфигурирования пакета Squid – файл /etc/Squid.conf. Размер этого файла достаточно велик, поскольку он содержит множество конфигурируемых параметров, начиная с номера порта для ICP-запроеов и заканчивая правилами доступа к информации. Далее приведены параметры конфигурации Squid-сервера, разбитые на типы. Однако приведенный список не является полным и исчерпывающим, поскольку он содержит только наиболее интересные (с нашей точки зрения) параметры конфигурации.

Сетевые параметры

Сетевые параметры proxy-сервера имеют следующие настройки.

• Порт для запросов клиентов proxy-сервера:

http_port 3128

• Порт для ICP-запросов. В том случае, если не предполагается использовать иерархию proxy-серверов – необходимо указать нулевой порт:

icp_port 3130

• Порт для общения с соседями ICP – через ТСР-протокол:

htcp_port 4827

• К каким multicast-rpynnaM (соседи-серверы squid) подсоединяться для получения ICP, если используется multicast:

mcast_groups 239.128.16.128 224.0.1.20

• По умолчанию режим пассивного FTP включен, но если Squid находится за брандмауэром, то необходимо выключить:

passive_ftp on | off Соседи

Как уже упоминалось ранее, Squid может обмениваться информацией с другими squid-серверами, которых принято называть соседями.

• Каждый сосед описывается отдельной строкой:

cache_peer hostname type proxy-port icp-port options

– параметр type имеет следующие значения:

· parent – старший в иерархии;

· Sibling – одного уровня.

– параметр options имеет следующие значения:

· proxy-only – объекты, взятые с указанного узла, не хранить у себя в кэше;

· weight=число – указывает приоритет хоста, чем значение больше, тем больше приоритет;

· ttl=число – время жизни пакета используется при настройке multicast;

· no-query – не посылать ICP-запросы;

· default – самый старший в иерархии;

· round-robin – определяет родительские кэши, используемые по очереди;

· multicast-responder – данный сосед является членом multicast-группы;

· no-digest – не запрашивать от этого соседа cashe digest;

· iogin=user: password – определение имени и пароля для случая, если старший в иерархии proxy-сервер требует аутентификации;

· connect-timeout=число – время ожидания ответа от соседей;

• cache_peer_domain host domain [domain…] – ограничить запросы К данному соседу данным списком доменов;

• icp_query_timeout miiisec – время ожидания ответа в миллисекундах;

• mcast_icp_queгy_timeout miiisec – ожидание ответа на регулярные multicast-опросы;

• dead_peer_timeout seconds – время ожидания ответа от соседа, по истечении которого считается, что сосед отсутствует в сети;

• hierarchy_stopllst – список строк (через пробел), при встрече которых в URL, запрос не будет кэшироваться; по умолчанию cgi-bin;

• no_cache deny имя-acl – определяет список объектов, которые не будут кэшироваться.

Размер кэша

Раздел предназначен для определения параметров кэша – размера, использования, времени хранения информации и т. п.

• cache_mem 8 MB – объем оперативной памяти, используемой для хранения обрабатываемых объектов;

• cache_swap_high 95 – при достижении данного уровня заполнения кэша (в процентах) начинается ускоренный процесс очистки кэша от устаревших объектов;

• cache_swap_iow 90 – процесс удаления старых объектов заканчивается, если достигнут данный уровень (в процентах);

• maximum_object_size 4096 KB – максимальный размер кэшируемого объекта;

• minimum_object_size 0 KB – минимальный размер кэшируемого объекта; файлы меньшего размера не сохраняются;

• ipcache_size 1024 – размер кэша для IP-адресов;

• ipcache_high 95 – верхний уровень заполнения IP-кэша для алгоритма удаления старых объектов;

• ipcache_iow 90 – нижний уровень заполнения IP-кэша для алгоритма удаления старых объектов.

Имена и размеры файлов

В этом разделе определяются имена и размеры используемых файлов:

• cache_dir тип Directory-Name Mbytes Level-1 Level2 – определяет имя, размер и количество подкаталогов на первом и втором уровне кэша на диске – каждый кэшируемый объект кладется в отдельный файл, файлы хранятся в двухуровневой иерархии каталогов;

• cache_access_log /usr/local/squid/logs/access.log – место хранения журнала обращений к кэшу;

• cache_log /usr/local/squid/logs/cache. log – место хранения журнала запусков процессов;

• Cache_store_log /usr/local/squid/logs/store.log – место хранения журнала записи объектов в дисковый кэш;

• emulate_httpd_log on | off – производить ли эмуляцию формата журнала HTTPD;

• mime_table /usr/local/squid/etc/mime. conf – таблица ТИПОВ MIME;

• iog_mime_hdrs off – в журнал access записываются полученные HTTP-заголовки;

• useragent_log имя-файла – в этот файл будут записываться строки User-agent из HTTP-заголовков;

• debug_options раздел, уровень – уровень отладки; all – для всех разделов; по умолчанию all, i;

• iog_fqdn off – позволяет определять и записывать в журнал полные доменные имена источника запроса.

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

Как и большинство серьезных программ, Squid позволяет воспользоваться внешними программами для выполнения некоторых действий. К примеру – сбор статистики или обработка трафика.

• ftp_user email-адрес – будет подставляться вместо пароля при анонимном доступе к FTP-серверам; по умолчанию – squid@, вызывает проблемы с серверами, которые проверяют синтаксис адреса;

• cache_dns_program /usг/local/squid/bin/dnsserver – местоположение программы, кэширующей DNS-запросы;

• dns_children 5 – число процессов, которые делают DNS lookup (получение по IP-адресу доменного имени и наоборот);

• dns_nameservers список-IР-адресов – используется вместо списка DNS-серверов, определенного в /etc/resolv.conf;

• redirect_program none – позволяет подключить программу преобразования URL при каждом запросе;

• redirect_children 5 – параметр определяет, сколько процессов преобразования URL запускать параллельно;

• redirect_rewrites_host_header on – разрешает или запрещает изменение поля Host: в заголовке запроса; по умолчанию Squid переписывает поле Host: в заголовках преобразованных запросов;

• redirector_access aci – какие запросы направлять через редиректор; по умолчанию – все;

• authenticate_program none – позволяет производить аутентификацию клиентов, делающих запросы; программа должна в цикле читать строку "имя пароль" выдавать ок или err; должен быть определен параметр ACL proxy_auth;

• authenticate_children 5 – сколько параллельных процессов будут заниматься аутентификацией;

• authenticate_ttl 3600 – сколько секунд кэшировать результаты работ программы аутентификации;

• authenticate_ip_ttl число – необходимо установить 0, чтобы с нескольких адресов не смогли воспользоваться одним именем.

Тонкая настройка кэша

С помощью следующих параметров можно произвести тонкую настройку параметров кэша:

• wais_reiay_host localhost – куда перенаправлять WAIS-запросы:

• wais_reiay_port 8000 – куда перенаправлять WAIS-запросы;

• request_header_max_size 10 KB – максимальный размер заголовка;

• request_body_max_size 1 MB – максимальный размер объекта;

• refresh_pattern [-i] regex min_age percent max_age[options] – используется для определения, не устарел ли объект в кэше.

Имя объекта сравнивается по очереди с регулярными выражениями в строках refreshjsattern до первого совпадения, параметры из соответствующей строки используются в алгоритме проверки. По умолчанию регулярные выражения различают прописные/строчные буквы, чтобы игнорировать это различие, используется ключ -i. min_age и max_age – время жизни объекта в минутах. По умолчанию:

• refresh_pattern ^ftp: 1440 20 % 10080

• refresh_pattern ^gopher: 1440 0 % 1440

• refresh_pattern. 0 20 % 4320

Более подробную информацию смотрите в документации на Squid;

• reference_age 1 month – максимальное время хранения неиспользуемого объекта до его удаления;

• quick_abort_min 16 КВ – если клиент оборвал запрос, а осталось докапать всего min кв, то Squid произведет докачку объекта;

• quick_abort_max 16 КВ – если клиент оборвал запрос и осталось качать больше max кв, то Squid прекратит получение объекта;

• quick_abort_pct число – если клиент оборвал запрос и уже получено больше чем число процентов объекта, то Squid докачает объект;

• negative_ttl 5 minutes – время кэширования негативных ответов (например "connection refused", "404 not found") – число задает их время жизни в кэше;

• positive_dns_ttl 6 hours – время кэширования положительных DNS-ответов – число задает их время жизни в кэше;

• negative_dns_ttl 5 minutes – время кэширования негативных DNS-ответов – число задает их время жизни в кэше;

• range_offset_iimit о KB – если клиент делает запрос с середины объекта, то:

– 1 – вынуждает Squid загрузить весь объект в кэш до того, как начать передачу клиенту;

– 0 – означает, что Squid никогда не будет грузить больше, чем клиент запросил;

– число, отличное от 1 – начало запроса меньше этого числа – Squid будет грузить весь объект.

Время ожидания

В этом разделе задаются различные временные параметры Squid:

• connect_timeout 120 seconds – время ожидания соединения с сервером;

• siteselect_timeout 4 seconds – максимальное время на выбор URL;

• read_timeout 15 minutes – сколько времени разрешается ждать следующего байта от сервера;

• request_timeout 30 seconds – сколько разрешается ждать запроса после установления соединения;

• client_lifetime 1 day – сколько времени разрешать клиенту быть присоединенным к Squid; соединение обрывается, даже если происходит передача данных;

• haif_ciosed_clients on – разрешать наполовину закрытые соединения – например чтение есть, а запись уже закрыта;

• shutdown_lifetime 30 seconds – сколько времени продолжать обслуживание после получения сигнала SIGTERM или SIGHUP.

ACL – Access Control List

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

acl имя тип строка – определение списка доступа (имя – имя правила, тип – тип объекта, строка – регулярное выражение (шаблон для сравнения), по умолчанию чувствительное к регистру букв.

Параметр тип может принимать следующие значения:

• IP-адреса клиентов:

src ip-address/netmask…

• диапазон адресов:

src addrl-addr2/netmask…

• получение IP-адреса no URL:

srcdomain foo.com…

• если в URL использовался IP, то делается попытка определить имя домена, если не удалась, то подставляется слово попе:

dstdomaien foo.com…

• получение IP-адреса клиента по URL с использованием регулярных выражений:

srcdom_regex [-i] строка…

• если в URL использовался IP, то делается попытка определить имя домена используя регулярные выражения:

dstdom_regex [-i] строка…

• регулярное выражение для всего URL:

url_regex [-i] строка

• регулярное выражение для path-части URL:

urlpath_regex [-i] строка

• определяются безопасные порты:

port порт…

• сопоставляется заголовок User-Agent:

browser [-i] regexp

• ограничивает число соединеной с одного и того же IP:

Данный текст является ознакомительным фрагментом.