3.5.4.1.1 Основные понятия squid
Скачать документЦентрализованный выход в Интернет через один сервер в сети (proxy)
В корпоративных сетях является стандартной ситуация, когда, с одной стороны, множество пользователей на разных компьютерах пользуются ресурсами сети Интернет, при этом обеспечить надлежащий уровень безопасности на этих компьютерах одновременно довольно сложно. Ещё сложнее заставить пользователей соблюдать некий «корпоративный стандарт», ограничивающий возможности использования Интернет (например, запретить использование определённого типа ресурсов или закрыть доступ к некоторым адресам).
Простейшим решением будет разрешить только определённые методы доступа к Интернет (например, по протоколам HTTP и FTP) и определить права доступа абонентов на одном сервере, а самим абонентам разрешить только обращение к этому серверу по специальному прокси-протоколу (поддерживается всеми современными браузерами). Сервер же, после определения прав доступа, будет транслировать (проксировать) приходящие на него HTTP-запросы, направляя их адресату. Допустим, несколько пользователей с нескольких компьютеров внутренней сети просматривают некоторый сайт. С точки зрения этого сайта их активность представляется потоком запросов от одного и того же компьютера.
Обычный доступ
Непосредственно после установки Squid уже поддерживает функции прокси, но принимает соединения только с того компьютера, на который установлен. Для того, чтобы можно было воспользоваться этим сервисом с других компьютеров, необходимо изменить таблицы управления доступом (Access Control Lists, далее ACL), находящиеся, как и большинство настроек Squid, в файле /etc/squid/squid.conf. Файл содержит подробные комментарии и примеры для всех настроек, представленные в следующем формате:
# TAG: <настройка>
Таким же образом там описаны все значения, выставленные по умолчанию. В частности, для того, чтобы Squid принимал соединения из всей внутренней сети, необходимо раскомментировать две строки, и подставить в них действительный диапазон адресов вашей сети:
acl our_networks src 192.168.1.0/24 192.168.2.0/24
http_access allow our_networks
При обработке запроса на доступ к Squid все строки http_access в файле squid.conf анализируются последовательно, начиная с верхней строки и заканчивая первой строкой, соответствующей параметрам запроса. Порядок расположения строк http_access имеет значение.
Анонимизирующий доступ
При использовании прокси-сервера остаётся некоторая угроза безопасности, связанная с тем, что топология внутренней сети и активность её абонентов не маскируются. Например, в протоколе HTTP используются заголовки (headers), значения которых заполняются браузерами при отправлении запроса. Squid умеет удалять опасные поля заголовка из запроса при помощи настройки header_access или подменять их значения на другие, заранее заданные, при помощи настройки header_replace. Варианты использования этих настроек приведены в squid.conf в районе TAG: header_access и TAG: header_replace, соответственно.
Имейте в виду, что из-за удаления и/или подмены полей заголовков может нарушиться связь с некоторыми системами, использующими значение этих полей для организации взаимодействия и авторизации.
«Прозрачный» доступ
Прокси-сервер можно использовать незаметно для конечных пользователей сети. Если прокси-сервер также выполняет функцию маршрутизатора, весь сетевой трафик неизбежно пройдет через него. Используя средства межсетевого экрана, можно перенаправлять все стандартные HTTP-запросы к удалённым серверам на специально настроенный порт Squid. С внешней стороны это будет выглядеть как обычный прокси-сервер, а для пользователей работа в сети останется привычной. Команда iptables, перенаправляющая HTTP-запросы к внешним серверам на порт Squid, может выглядеть следующим образом:
iptables -t NAT -A PREROUTING -d ! <адрес_самого_сервера> \ -i <внутренний_сетевой_интерфейс> -p tcp -m tcp --dport 80 \ -j REDIRECT --to-ports 3128
Или так:
iptables -t nat -A PREROUTING -p tcp -d 0/0 --dport www \ -i <внутренний_сетевой_интерфейс> -j DNAT \ --to <локальный_адрес_на_котором_слушает_прокси>:3128
Для настройки прозрачного проксирования в файле squid.conf используется обратный прокси, описанный ниже. Для организации прозрачного прокси достаточно добавить в squid.conf следующую строку:
http_port 80 intercept
Фильтрация доступа
Squid предоставляет гибкую систему фильтрации внешних ссылок, позволяющую закрывать доступ к определённым веб-сайтам и ресурсам, блокировать баннеры, ссылки непристойного содержания и другие нежелательные элементы. Фильтрация осуществляется с использованием ACL и соответствующих настроек http_access deny, примеры которых приведены в файле squid.conf.
При определении фильтруемых URL или доменов можно применять регулярные выражения, что позволяет создавать фильтры для целых классов адресов или доменных имен в одной строке. Дополнительную информацию о регулярных выражениях можно найти в руководстве regex.
Пример запрета доступа к домену baddomain.com:
acl Bad dstdomain baddomain.com
http_access deny Bad
Необходимо учитывать, что правило http_access deny Bad должно располагаться перед строками вида http_access allow, в этом случае доступ к любому сайту домена будет закрыт безусловно.
Авторизация доступа
Squid поддерживает возможность применения различных ACL для отдельных пользователей или категорий пользователей. Если для определения того, какой именно пользователь подключается к серверу, недостаточно IP-адреса его компьютера, следует воспользоваться одной из многих схем авторизации, принятых в Squid. Авторизация конфигурируется с помощью тега TAG: auth_param. Посмотреть, какие схемы (программы) авторизации поддерживает Squid, можно в каталоге /usr/lib/squid.
Пример настройки авторизации через LDAP:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b ou=People,dc=office,dc=lan -f (uid=%s) -h ldap.office.lan auth_param basic children 5
auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours
Дополнительную информацию по настройке выбранных программ авторизации можно найти в соответствующих руководствах.
Локальное хранение данных, которые уже запрашивались пользователями (cache)
Одним из преимуществ Squid является возможность кеширования данных, полученных из сети Интернет. Кешированные объекты остаются доступными для повторного использования до окончания срока их актуальности или до момента, когда они будут заменены новыми, более востребованными данными. Это значительно сокращает нагрузку на внешний канал связи и уменьшает время ожидания ответа для пользователей. Например, если несколько пользователей внутри сети одновременно обращаются к одному и тому же веб-ресурсу, общее количество запросов к внешнему источнику через Squid существенно снизится, так как большая часть необходимых данных уже находится в кеше.
Обычное кеширование
Сразу после установки Squid начинает выполнять функции кеширования. Эта функция не только экономит трафик, но и сокращает время доступа к ресурсам Интернета. Важно отметить, что снижение внешнего трафика возможно только если один и тот же ресурс был запрошен несколькими пользователями на протяжении определенного промежутка времени. Если пользовательские запросы практически не пересекаются, снижение объема внешнего трафика может оказаться минимальным.
Кроме того, кеширование неэффективно в ситуации, когда повторный запрос на большинство объектов приходит уже после того, как эти объекты вытесняются из кеша более новыми. Если анализ статистики показывает, что происходит именно это, можно попробовать увеличить объём кешируемой информации. Настройки Squid, отвечающие за размер кеша, приведены в файле squid.conf в разделе, начинающемся словами OPTIONS WHICH AFFECT THE CACHE SIZE.
Наконец, кеширование входящего трафика делает невозможным точное распределение оплаты трафика между разными пользователями. Например, если один пользователь посещает сайты по рекомендации другого, его трафик в значительной степени останется внутри сети, так как необходимые ресурсы уже были закешированы благодаря действиям первого пользователя.
Выборочное кеширование
Некоторые типы данных, такие как очень большие файлы, динамически генерируемые веб-страницы, аудиофайлы и прочие ресурсы, нецелесообразно кешировать, поскольку вероятность их повторного запроса в пределах установленного срока хранения невелика, при этом они занимают значительное пространство в кеше, вытесняя другие полезные объекты. С другой стороны, некоторые виды контента могут требовать обязательного кеширования для улучшения скорости доступа. Управление этими процессами осуществляется посредством ACL и настроек always_direct (для исключения кеширования) и never_direct (для принудительного кеширования).
Например, чтобы отключить кеширование файлов, загружаемых по протоколу FTP (что обычно рекомендуется), необходимо в соответствующем разделе файла squid.conf раскомментировать следующие строки:
acl FTP proto FTP
always_direct allow FTP
Иерархия серверов
Если запрашиваемый ресурс не найден в локальном кеше Squid, система может попытаться запросить его у вышестоящих серверов (parent peer) или у соседей (sibling peers), прежде чем отправлять запрос в Интернет. В качестве вышестоящего сервера может выступать сервер провайдера, а соседними серверами могут быть устройства других абонентов, подключённых к тому же провайдеру. Подробные правила взаимодействия и построения иерархии кеширующих серверов описаны в документации Squid. Раздел конфигурационного файла, отвечающий за механизм обмена кешем, начинается словами OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM.
Важно учитывать, что обмен содержимым кеша между серверами требует обязательной авторизации доступа между серверами для предотвращения подделки данных и других видов атак. Все параметры соединений между серверами (настройка cache_peer) задаются в текстовой форме, включая пароли, поэтому доступ к файлу настройки squid.conf должен быть строго ограничен.
Обратное проксирование и кеширование внутренних серверов (accelerate)
Функции кеширования и проксирования Squid могут использоваться для обработки входящих запросов к внутренним серверам. Такой подход, известный как обратное проксирование, позволяет скрывать реальную инфраструктуру серверов и снижать нагрузку на них.
Обычное обратное проксирование (один сервер)
В режиме ускорения (accelerate) сервер Squid обрабатывает внешние HTTP-запросы, направленные на стандартный порт 80. Необходимо указать имя внутреннего сервера и порт, на который будут перенаправляться запросы.
Пример конфигурации:
http_port 80 defaultsite=internal.www.com
cache_peer 192.168.1.1 parent 80 0 no-query originserver
Для ограничения доступа к внутреннему серверу можно использовать списки управления доступом (ACL).
Множественное проксирование
Для обратного проксирования нескольких внутренних серверов необходимо, чтобы внешние запросы на сайты с разными доменными именами попадали на вход Squid, который бы ставил в соответствие каждому имени действительный адрес сервера во внутренней сети и перенаправлял бы запрос туда. Делается это с помощью механизма виртуальных хостов. Вот как, например, можно организовать прокси для двух серверов, www1.foo.bar и www2.foo.bar, адреса которых в DNS указывают на машину со Squid-сервером (файл /etc/squid/squid.conf):
http_port 80 defaultsite=www1.foo.bar vhost
hosts_file /etc/hosts
Настройка defaultsite нужна серверу для заполнения HTTP-заголовков. Соответствие доменных имён адресам серверов во внутренней сети разумно получать из стандартного файла /etc/hosts:
10.0.0.1 www1.foo.bar
10.0.0.2 www2.foo.bar
Множественное обратное проксирование имеет важный побочный эффект. В сетях, подключённых к Интернету постоянно, нередки случаи, когда недобросовестные администраторы внутренних сайтов регистрируют их в других доменах и используют их в качестве хостинг-платформ, часто с документами незаконного или нецензурного содержания.
Допустим, сайт www1.foo.bar также зарегистрирован как www.verycoolwarez.com, и по этому адресу доступны контрафактные версии программ и т. п. В обычном случае для обнаружения этого факта необходимо анализировать трафик, делать внушение администратору www1.foo.bar и т.д. При использовании обратного проксирования такого вообще не может произойти без договорённости с администратором Squid, то есть без занесения в /etc/hosts.
Разное
Безопасность
Squid поддерживает проксирование разнообразных протоколов, использование которых необходимо контролировать на уровне прав доступа. Если прокси-сервер - анонимизирующий, им могут воспользоваться нарушители, чтобы скрыть обратный адрес при незаконном доступе к данным или даже атаке на другие серверы.
Неправильно настроенный прокси-сервер можно использовать для массовой рассылки почты (спама), что является инцидентом информационой безопасности и может привести к отказу пользователей сети и администраторов почтовых серверов принимать почту из данного домена.
Сбор статистики и ограничение полосы доступа
В Squid входит утилита кеш-менеджер, которая служит для сбора статистических данных и загрузки сервера. Кеш-менеджер представляет собой cgi-приложение и должен выполняться под управлением сконфигурированного HTTP-сервера. Все настройки кеш-менеджера производятся в файле /etc/squid/squid.conf, строки, которые относятся к кеш-менеджеру, обычно включают cachemgr.
При помощи Squid можно ограничить полосу пропускания (толщину канала) для пользователей. За это отвечают параметры delay_pools и delay_class. Эта технология позволит вам снизить загрузку канала, например, большими по объёму медиафайлами, и отдать полосу какому-то более приоритетному трафику.
Кеширование DNS-запросов
Squid содержит встроенный минисервер для обработки DNS-запросов. Он выступает как посредник между Squid и внешними DNS-серверами. При запуске Squid выполняет проверку доступности DNS и общего подключения к Интернету. Это можно отключить, используя опцию -D. Время кеширования удачного DNS-запроса по умолчанию составляет шесть часов.
Дата последнего изменения: 28.12.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.