Доброго времени, уважаемые читатели и гости! С данной статьи я начну описание работы кэширующего прокси-сервера SQUID . Эта статья в большинстве своем будет вводная теоретическая.
Начну с основ. squid является кэширующим прокси сервером для HTTP, FTP и др. протоколов. Прокси сервер для HTTP - это программа, выполняющая HTTP-запросы от имени клиентской программы (будь то браузер или другой софт). Proxy может быть кэширующим или не кэширующим . Кэширующий, соответственно, сохраняет все запросы в какое-либо хранилище для более быстрой отдачи клиентам, а не кэширующий - просто транслирует HTTP, ftp или другие запросы. Ранее, кэширование трафика позволяло добиться довольно значительной экономии трафика, но в настроящее время с ростом скоростей интернета это немного утеряло актуальность. Прокси серверА можно выстраивать в иерархии для обработки запросов. При этом, прокси серверА взаимодействуют между собой по протоколу ICP .
Squid разработан и может работать на большинстве операционных систем (как unix, так и windows). Лицензируется под лицензией GNU GPL. Способен обрабатывать и кэшировать HTTP, FTP, gopher, SSL и WAIS (убрано в 2.6) запросы, а так же DNS. Наиболее частые запросы хранит в оперативной памяти. На текущий момент существуют 2 стабильные версии squid : 2.7 и 3.1 . С отличиями можно ознакомиться в ссылках в конце статьи. Все зависимости при установке из пакетов у них одинаковые. Конфигурационный файл версии 2 совместим с версией 3, но в 3 версии добавлены новые параметры. В статье я буду рассматривать версию squid3 . Стоит так же заметить, что если устанавливать squid3 , то он свои конфигурационные файлы будет держать в /etc/squid3 , а так же логи по умолчанию в squid3 лежат в каталоге /var/log/squid3/ , а не /var/log/squid/ , как "любят считать" многие анализаторы логов.
Кучу раз упомянуто слово "кэширование ". А что же это, собственно, такое - кэширование ? Это способ хранения запрошенных из Интернет объектов на сервере, находящемся ближе к запрашивающему компьютеру нежели исходный. Интернет-объект это файл, документ или ответ на обращение к какому-либо сервису предоставляемому в Интернет (например, FTP, HTTP, или gopher). Клиент запрашивает интернет-объект из кеша прокси-сервера; если объект ещё не кеширован, то прокси-сервер получает объект (либо от узла сети указанного по запрошенному адресу URL, либо от родительского или соседнего кеша) и доставляет его клиенту.
Прокси-сервер Squid может работать в следующих трех основных режимах:
В этом режиме HTTP соединение осуществляемое клиентами перенаправляется на прокси-сервер без их ведома или явной конфигурации. В этом режиме не требуется настройка клиентов. Недостатки данного способа : необходима конфигурация NAT и перенаправления трафика, аутентификация клиентов не работает, не перенаправляются FTP и HTTPS запросы.
Для работы в этом режиме клиенты должны быть настроены для работы с прокси-сервером (в настройках соединения должен быть прописан адрес прокси-сервера). Может выполняться аутентификация и авторизация клиентов через Kerberos, Ldap, NTLM, IP и Radius. Возможно построение взаимодействия с серверами Microsoft Active Directory путем аутентификации клиентов – членов домена, используя протокол Kerberos, и последующей авторизации членов групп домена используя LDAP в прозрачном режиме (пользователь вводит свой пароль только при регистрации в домене). Для авторизированных групп возможно применение различных настроек контроля доступа и QoS (delay pools).
Прокси-сервер кэширует исходящие данные. Обратный прокси-сервер Squid получает данные у HTTP сервера от имени клиента и передает их обратно клиенту (например, в Интернет). Этот режим позволяет осуществить:
transparent режим |
обратный режим |
режим аутентификации |
На приведенных схемах зелеными стрелками обозначены потоки проксируемого трафика. Движение данных потоков в Linux чаще всего регулируется силами и настройками браузера. Кроме того, очень часто, функции маршрутизатора и прокси выполняет одна машина.
Перед установкой и настройкой squid необходимо и убедиться, что машина, на которой будет работать squid имеет доступ во внешнюю сеть и клиенты, которые будут использовать данный прокси имеют доступ к данной машине. Установка прокси-сервера squid как и другого ПО в Linux возможна различными способами, описанными в статье . Я затрону способ установки из репозитория в Debian. Итак, для установки squid необходимо установить пакет squid3, для этого выполнить вот такую команду:
Gw ~ # aptitude install squid3 Следующие НОВЫЕ пакеты будут установлены: libltdl7{a} squid-langpack{a} squid3 squid3-common{a} 0 пакетов обновлено, 4 установлено новых, 0 пакетов отмечено для удаления, и 0 пакетов не обновлено. Необходимо получить 2 157 kB архивов. После распаковки 10,3 MB будет занято. Хотите продолжить? y Получить:1 http://ftp.ru.debian.org/debian/ squeeze/main libltdl7 i386 2.2.6b-2 Получить:2 http://ftp.ru.debian.org/debian/ squeeze/main squid-langpack all 20100628-1 Получить:3 http://ftp.ru.debian.org/debian/ squeeze/main squid3-common all 3.1.6-1.2+squeeze2 Получить:4 http://ftp.ru.debian.org/debian/ squeeze/main squid3 i386 3.1.6-1.2+squeeze2 Получено 2 157 kБ в 9с (238 kБ/с) Выбор ранее не выбранного пакета libltdl7. (Чтение базы данных... на данный момент установлено 41133 файла и каталога.) Распаковывается пакет libltdl7 (из файла.../libltdl7_2.2.6b-2_i386.deb)... Выбор ранее не выбранного пакета squid-langpack. Распаковывается пакет squid-langpack (из файла.../squid-langpack_20100628-1_all.deb)... Выбор ранее не выбранного пакета squid3-common. Распаковывается пакет squid3-common (из файла.../squid3-common_3.1.6-1.2+squeeze2_all.deb)... Выбор ранее не выбранного пакета squid3. Распаковывается пакет squid3 (из файла.../squid3_3.1.6-1.2+squeeze2_i386.deb)... Обрабатываются триггеры для man-db ... Настраивается пакет libltdl7 (2.2.6b-2) ... Настраивается пакет squid-langpack (20100628-1) ... Настраивается пакет squid3-common (3.1.6-1.2+squeeze2) ... Настраивается пакет squid3 (3.1.6-1.2+squeeze2) ... Creating Squid HTTP proxy 3.x spool directory structure 2012/02/15 21:29:41| Creating Swap Directories Restarting Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x cache structure ... (warning). 2012/02/15 21:29:43| Creating Swap Directories .
Как видно, при установке пакета, была попытка создания каталога кэша , но т.к. он не настроен, то вывалилось предупреждение. Так же, squid добавлен в автозагрузку, запущен и принимает подключения на всех интерфейсах . Но т.к. он не настроен, доступ к интернет-страницам через сервер ограничен. Конфиг сквида расположен в /etc/squid3/squid.conf и состоит из более чем 5,5 тысяч строк и синтаксис его практически не отличается от конфига любого другого сервиса. Бросаться менять какие-то настройки срезу - не стоит. Потом не разгребете. Давайте рассмотрим конфиг, который нам предлагается по умолчанию без комментариев и пустых строк:
Gw ~ # grep -v ^# /etc/squid3/squid.conf | grep -v ^$ acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
Как видно, в конфигурации по умолчанию, прокси-сервер работает и разрешает обращения только с адресов 127.0.0.0/8. Следует внимательно просмотреть весь список и закомментировать строки с портами не нужных или не используемых сервисов. Более полное понимание данного конфига будет после прочтения следующих разделов. Т.о. если мы запустим консольный браузер lunx с указанием на наш прокси, то сможем увидеть заданную страницу:
Gw ~ # # запускаем бреузер с указанием страницы ya.ru: gw ~ # http_proxy=http://127.0.0.1:3128 lynx ya.ru Идет поиск "ya.ru" сначала gw ~ # # в логе видим обращение к заданной странице: gw ~ # cat /var/log/squid3/access.log 1329527823.407 110 127.0.0.1 TCP_MISS/200 9125 GET http://ya.ru/ - DIRECT/93.158.134.203 text/html
Некоторыепараметры в конфигурационом файле squid могут применяться несколько раз (например acl). Некоторые параметры, особенно имеющие одно значение могут использоваться только один раз. При этом, при использовании такого параметра 2 и более раз - будет использовано последнее значение. Например:
Logfile_rotate 10 # Несколько значений - кончное будет равно 5 logfile_rotate 5
Параметры, с которыми был собран squid Вашего дистрибутива можно посмотреть командой squid3 -v. Например, в Debian squeezу squid собран с параметрами, приведенными ниже:
Prefix=/usr - префикс для других ключей: --mandir=${prefix}/share/man - каталог хранения man-страниц --libexecdir=${prefix}/lib/squid3 - каталог с исполняемыми модулями (в том числе и хелперы) --sysconfdir=/etc/squid3 - каталог хранения конфигурации --with-logdir=/var/log/squid3 - каталог хранения журналов и мн. др...
Описание настроек squid3 начну с основных настроек , которые желательно произвести при настройке любой конфигурации прокси-сервера. Конфиг сквида расположен в /etc/squid3/squid.conf , это основной конфигурационный файл, в котором содержатся все настройки. (В дистрибутивах Debian и RedHat так же при запуске просматриваются параметры из стартовых файлов настроек /etc/default/squid3 и /etc/sysconfig/squid3 , соответственно). Так же, я упоминал, что там более 5 тысяч строк и что сразу рваться настраивать что-то не разобравшись - не стоит. Синтаксис конфига squid3 классический: строки с # - это комментарии, параметры представляют собой строки "параметр значение ", возможно использование . Конфигурационный файл разбит на разделы для удобства, но важно помнить, что разбор параметров производится "сверху вниз" в порядке очередности. Так же, с помощью параметра include можно подключать внешние конфигурационные файлы.
По умолчанию разрешение имени узла, на котором работает Squid, происходит при помощи gethostname(), в зависимости от установок DNS, он иногда не может однозначно определить имя, которое будет фигурировать в журналах и выводах об ошибках “Generated … by server.com (squid/3.0.STABLE2) ”. Для корректной записи имени хоста, необходимо это имя (FQDN??) занести в параметр:
Visible_hostname myproxy
По умолчанию, squid принимает подключения на всех интерфейсах. Если у нас сервер одним из сетевых интерфейсов смотрит во внешний мир, то желательно ограничить подключения только на интерфейсе локальной сети (допустим, 10.0.0.10/24). За это отвечает параметр http_port :
Http_port 10.0.0.10:3128
Как работают данные параметры можно увидеть в следующем листинге:
Gw ~ # # проверяем работу демона до настройки: gw ~ # netstat -antp | grep squ tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 25816/(squid) gw ~ # # внесенные изменения: gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 gw ~ # # перечитываем измененный конфиг gw ~ # /etc/init.d/squid3 reload Reloading Squid HTTP Proxy 3.x configuration files. done. gw ~ # # проверяем работу с измененным конфигом: gw ~ # netstat -antp | grep squ tcp 0 0 10.0.0.10:3128 0.0.0.0:* LISTEN 25816/(squid)
Как видно, теперь демон работает только на интерфейсе заданной сети. Стоит так же отметить, что новые версии squid (<3.1) поддерживают задание нескольких параметров http_port. При этом, у разных параметров могут быть указанны дополнительные ключи такие как intercept, tproxy, accel и др., например:
Gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 http_port 10.0.0.10:3129 tproxy
Данные параметры задают режи работы прокси-сервера. Например tproxy (старый синтаксис - transparent) задает режим . Данные режимы достойны отдельных статей и в будущем возможно будет рассмотрены.
Теперь необходимо настроить клиентский компьютер и пользоваться интернетом. Но по умолчанию, доступ разрешен только с локалхоста и при попытке доступа к веб пользователь получит ошибку "Доступ запрещен". В логе /var/log/squid3/access.log будет примерно такое сообщение:
1329649479.831 0 10.0.1.55 TCP_DENIED/403 3923 GET http://ya.ru/ - NONE/- text/html
Для того, чтобы клиенты локальной сети могли работать, необходимо настроить разрешения с помощью списков контроля доступа .
Фактически настройка доступа заключается в описании объекта доступа через параметр acl , а затем разрешении или запрете работы описанному объекту acl при помощи параметра “http_access” . Простейший формат данных настроек имеет следующий вид:
Acl имя_списка тип_отбора характеристики_типа_отбора
где acl - параметр описывающий список контроля доступа , имя которого задается значением имя_списка . Имя чувствительно к регистру букв. тип_отбора задает тип, которому будет соответствовать заданная далее характеристика_типа_отбора . Данная характеристика может принимать такие часто используемые значения, как src (от source) - источник запроса, dst - адрес назначения, arp - МАС-адрес, srcdomain и dstdomain - доменное имя источника и назначения соответственно, port - порт, proto - протокол, time - время и многие другие . Соответственно, значение характиристики_типа_отбора будут формироваться в зависимости от типа_отбора .
Можно указывать несколько строк acl с одинаковыми именами и типами_отбора, в таком случае, данные acl будут объеденены в один список с логической операцией ИЛИ. Например:
Acl site dstdomain site.com acl site dstdomain site.org # аналогичен записи: acl site dstdomain site.com site.org
Словами это звучит так: списку доступа с именем site принадлежат все запросы, отправленные на сайт site.com ИЛИ site.org. Кроме того, имена_спаска чувствительны к регистру, то есть acl site и acl Site это 2 разных списка доступа.
Когда списки доступа сформированы, при помощи параметра http_access разрешаем или запрещаем доступ указанному ACL. Общий формат вызова такой:
Http_access allow|deny [!]имя_списка
где, http_access - параметр задающий последующее правило разрешения (allow ) или запрещения (deny ) доступ, указанному далее имени_списка . При этом, необязательный восклицательный знак инвертирует значение имени списка. То есть при восклицательном знаке значение имени_списка будет звучать как все, кроме тех, кто в принадлежит данному списку . Кроме того, можно задавать несколько списков через пробел, тогда доступ будет разрешен при условии принадлежности ко всем заданным спискам. При этом, все разрешающие правила необходимо указывать до запрещающего ВСЁ правила:
Http_access deny all
Может возникнуть резонный вопрос: зачем задавать данное правило, если мы, например, разрешим доступ к сквиду только избранным acl? Ведь остальные, кто не попадают в данный acl итак "проходят мимо"... Все просто. По-умолчанию, squid использует разрешающее/запрещающее правило противоположное последнему. Например:
# у нас есть единственное разрешеющее правило для некоторого acl user: http_access allow user # если при доступе к squid, клиент не попал в этот acl, то к нему будет применено действие deny. # А если у нас есть два правила http_access allow user http_access deny user2 # и клиент не входит ни в acl user, ни в acl user2, то к нему применится allow. # То есть действие противоположное последнему http_access deny user2
Это, как говориться - основы основ. Давайте рассмотрим простой пример. Предположим, у нас есть 2 сети 10.0.1.0/24 и 10.0.0.0/24, а так же хост 10.0.4.1, которым необходимо разрешить доступ к интернету. Для разрешения доступа необходимо создать описание нового списка доступа в секции "ACCESS CONTROL" файла squid.conf:
Acl lan src 10.0.1.0/24 10.0.0.0/24 acl lan src 10.0.4.1
Для бОльшего удобства, можно задать эти правила в отдельном файле, указав путь к нему в место характеристики_типа_отбора . Вот:
Gw ~ # # создадим отдельный каталог для хранения списков доступа gw ~ # mkdir /etc/squid3/acls/ gw ~ # # занесем наши подсети и хосты в отдельный файл gw ~ # vim /etc/squid3/acls/lan.acl gw ~ # cat /etc/squid3/acls/lan.acl 10.0.1.0/24 10.0.0.0/24 10.0.4.1 gw ~ # # опишем созданный файл в конфиге (путь необходимо заключить в кавычки) gw ~ # grep lan.acl /etc/squid3/squid.conf acl lan src "/etc/squid3/acls/lan.acl"
Разрешим созданному списку доступа lan доступ в интернет и скажем сквиду перечитать конфигурационный файл:
Gw ~ # grep lan /etc/squid3/squid.conf | grep acce http_access allow lan gw ~ # service squid3 reload Reloading Squid HTTP Proxy 3.x configuration files. done.
Подводя маленький итог данному разделу, в двух словах можно сказать, что acl идентифицирует Web запрос, а http_access разрешает или запрещяет идентифицированный запрос. Теперь наши локальные клиенты с радостью пользуются интернетом, предварительно настроив браузер!
Важным моментом настройки squid является настройка параметров кэширования в squid . Место размещения кэша задается параметром cache_dir в squid.conf. Формат параметр следующий:
Cache_dir тип путь размер L1 L2
где, тип - это алгоритм формирования кэша, может быть: ufs (unix file system), aufs (async ufs), diskd (внешние процессы для избежания блокировки squid на дисковом вводе/выводе). Рекомендуется использовать ufs , хотя некоторые хвалят aufs . Путь - задает место размещения кэша в файловой системе (должен существовать и иметь права доступа на запись для пользователя, под которым работает squid - обычно proxy). Размер - задает максимальный размер, после которого кэш начнет очищаться. В сети существует множество холиваров по этому параметру. Идеальный размер кеша - от 2 до 10 ГБ в зависимости от числа клиентов. Приблизительно 1 ГБ кеша на каждые 100 тысяч запросов/день. Я придерживаюсь значения в 5 Гб. В Squid каждый кешируемый объект располагается в отдельном файле, сами файлы не сваливаются в одно место, а используется двухуровневая иерархия каталогов. Количество каталогов 1 и 2 уровней и определяют параметры L1 и L2 . Эти значения можно оставить по умолчанию. Но для ориентирования в ситуации приведу цитату с bog.pp.ru:
Эксперимент показал, что при кэше в 700 МБ используется только 2 директории первого уровня. То есть для при стандартной структуре директорий кеша в него "с комфортом" влезает миллион объектов (9 GB), если их больше, то надо увеличить число директорий верхнего уровня
Можно использовать несколько cache_dir . Это положительно сказывается на производительности, особенно, если разместить кэш на разных дисках. Еще больше ускорить работу кэша можно, разместив кэш в tmpfs. Для каждого параметра cache_dir можно в разделе options определить параметр read-only (только чтение) и max-size (максимальный размер объекта).
Максимальный размер объекта в кэше определяется параметром maximum_object_size , значение по умолчанию - 4 Мб. Я данное значение увеличил до 60 Мб, т.к. сотрудникам в локальной сети часто приходится скачивать однотипные файлы до указанного размера:
Maximum_object_size 61440 KB
Аналогично? есть и параметр minimum_object_size отвечающий за минимальный размер объекта, по умолчанию его значение “0” то есть отключен. Я рекомендую значение этого параметра увеличить до 2-3 Кб, что снизит нагрузку на диск при поиске маленьких объектов.
Объем ОЗУ , используемый сквидом задается в параметре cache_mem , значение по умолчанию 256 Мб (в версии 3.1). Данное значение я оставил по умолчанию. Менять это значение стоит лишь в том случае, если сквид вас об этом попросит в логах. После данных изменений, необходимо перезапустить сквид, при этом будет создана структура каталогов:
Gw ~ # service squid3 start Starting Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x cache structure ... (warning). 2012/02/19 22:58:21| Creating Swap Directories 2012/02/19 22:58:21| /var/spool/squid3 exists 2012/02/19 22:58:21| Making directories in /var/spool/squid3/00 2012/02/19 22:58:21| Making directories in /var/spool/squid3/01 2012/02/19 22:58:21| Making directories in /var/spool/squid3/02 2012/02/19 22:58:21| Making directories in /var/spool/squid3/03 2012/02/19 22:58:21| Making directories in /var/spool/squid3/04 2012/02/19 22:58:21| Making directories in /var/spool/squid3/05 2012/02/19 22:58:21| Making directories in /var/spool/squid3/06 2012/02/19 22:58:21| Making directories in /var/spool/squid3/07 2012/02/19 22:58:21| Making directories in /var/spool/squid3/08 2012/02/19 22:58:21| Making directories in /var/spool/squid3/09 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0A 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0B 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0C 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0D 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0E 2012/02/19 22:58:21| Making directories in /var/spool/squid3/0F .
Много интересных вопросов и ответов на них по использованию кэша и памяти squid"ом описано . На этом, можно считать типовое решение по настройке прокси-сервера законченным.
Что есть прозрачный прокси ? Это режим работы прокси сервера, когда клиент не настраивается на работу через прокси и посылает запросы в сеть по протоколу HTTP, как если бы клиент браузер работал напрямую с веб-сервером. При этом, силами (в linux - ) исходящие запросы на HTTP направляются на порт, на котором запущен прокси. Прокси-сервер же, в свою очередь, преобразовывает HTTP запросы в запросы протокола прокси-сервера и посылает ответы клиенту, как веб сервер. Т.о. для клиента прозрачно происходит взаимодействие с прокси-сервером.
Важно понимать и знать! Данный метод поддерживает только HTTP протокол , и не поддерживает gopher, FTP или другое проксирование. А так же, Squid не умеет одновременно работать в прозрачном режиме и в режиме аутентификации.
Для настройки прозрачного режима, необходимо:
1. Задать прозрачный режим в настройках прокси. Это делается в параметре http_port , например:
Http_port ip:port transparent
2. Завернуть пользователей соответствующим правилом на нужный порт силами iptables:
Iptables -t nat -A PREROUTING -i имя_входящего_интерфейса -s подсеть_локльной_сети -p tcp --dport 80 -j REDIRECT --to-port порт_squid, пример: iptables -t nat -A PREROUTING -i eth1 -s 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
Все. Можно наслаждаться завернутыми и ничего не подозревающими пользователями на наш прокси-сервер.
Траблешуттинг
В первую очередь, диагностика работы squid заключается в просмотре журналов , расположенных в /var/log/squid3 . Большинство проблем решается данным способом. Если это не помогло решить проблему, то переключив демона в дебаг режим командой squid3 -k debug проблему будет найти проще. Собственно, что из себя представляет лог сквида? Файлы логов содержат различную информацию о загрузке и производительности Squid. В log пишутся кроме информации о доступе, /preеще и системные ошибки и информация о потреблении ресурсов, таких, например, как память или дисковое пространство.
Формат log файлов Squid представляет собой строку из значений, разделенных одним или несколькими пробелами:
Время.мс время_отклика ip_src Squid_req_status/HTTP_status byte_snd метод URL user squid_her_status/ip_dst MIME
Рассмотрим на примере:
1329732295.053 374 10.0.1.55 TCP_MISS/200 1475 GET http://www.youtube.com/live_comments? - DIRECT/173.194.69.91 text/xml
Как видно, запрос сделан в 1329732295.053, ответ удаленного сервера составил 374 мс, хост, запросивший страницу имеет IP 10.0.1.55, запрошенный объект был передан не из локального кэша (TCP_MISS), код ответа сервера - 200, клиенту передано 1475 байт методом GET, был запрошен URL http://www.youtube.com/live_comments?, имя пользователя не определено, объект был получен напрямую от сервера с IP 173.194.69.91, был передан текст, т.к. mime - text/xml. Вот.
Некоторые заключительные моменты о squid3
В статье я рассмотрел основные принципы работы прокси сервера, а так же, базовые настройки, позволяющие реализовать простейший кэширующий сервер, а так же организовать работу squid в прозрачном (transparent) режиме. Squid поддерживает несколько вариантов авторизации (по IP, через LDAP, MySQL, NTLM и др.), возможности ограничения пропускной способности канала и контроля доступа к ресурсам интернет. Работу сквида с методами различной авторизации и примеры контроля трафика я рассмотрю в следующих статьях.
Linux: Полное руководство Колисниченко Денис Николаевич
18.3. Настройка SQUID
Сервер SQUID использует файл конфигурации squid.conf , который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID. Отредактируйте в этом файле следующие строки.
Укажите прокси-провайдера (тот сервер, который станет вашим «соседом» (neighbour, peer)):
cache_peer proxy.isp.ru
Установите объем памяти, разрешенный для кэша squid , в байтах, и каталог для дискового кэша:
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):
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
Из книги Linux-сервер своими руками автора15 Прокси-сервер SQUID 15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг),
Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг), увеличивает скорость
Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич15.2. Установка SQUID SQUID может быть установлен из исходных текстов или в виде RPM-пакета. Установка RPM-пакета SQUID очень проста - для этого нужно ввести команду rpm –ih squid-2.3.STABLE2-3mdk.i586.rpmЯ использую версию squid 2.3. Более новая версия доступна в виде исходных кодов. Исходники можно
Из книги автора15.4. Запуск SQUID Теперь, когда вы выполнили базовую настройку SQUID, его нужно запустить: /usr/local/squid/bin/squid –zПараметр –z необходим для создания (обнуления) каталога, содержащего кэш. Обычно этот параметр нужен только при первом запуске. Некоторые другие полезные параметры SQUID
Из книги автора15.5. Формат файла squid.conf В файле squid.conf задаются всевозможные параметры конфигурации прокси-сервера. Давайте рассмотрим их все по
Из книги автора17.1.5. Настройка Squid Установите пакет squid. Осталось настроить и запустить его. Для этого нужно отредактировать файл конфигурации /etc/squid/squid.conf. Сначала укажите адрес прокси провайдера: cach_peer proxy.your_isp.comЗадайте объем ОЗУ, который будет использовать прокси-сервером: cache_memВ том
Из книги автораГлава 18. Прокси-серверы SQUID и SOCKS 18.1. Что такое прокси-сервер? Прокси-сервер (сервер-посредник) - это программа, которая выполняет HTTP/FTP-запросы от имени клиентов. Применение прокси-сервера дает возможность использовать фиктивные IP-адреса во внутренней сети (IP-маскарадинг),
Из книги автора18.2. Установка SQUID Я использую версию squid 2.5. Пакет squid входит в состав современных дистрибутивов, а если его у вас почему-то нет, то скачать можно с www.squid-cache.org.При сборке SQUID из исходных кодов первым шагом должна быть команда# ./configure --prefix=/usr/local/squidSQUID будет установлен в каталог,
Из книги автора18.3. Настройка SQUID Сервер SQUID использует файл конфигурации squid.conf, который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID.
Из книги автора18.4. Запуск SQUID Первый раз squid нужно запускать с ключом -z, чтобы создать и очистить каталог кэша:# /usr/local/squid/bin/squid -zЕще несколько полезных ключей, с которыми можно запускать squid, перечислены в таблице 18.2.Ключи запуска squid Таблица 18.2 Ключ Назначение -а порт Задает
Из книги автора18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf 18.5.1. Параметры сети В файле squid.conf могут быть заданы следующие параметры сети:? http_port - порт для запросов клиентов. С этого порта прокси-сервер будет ожидать и обрабатывать запросы клиентов. Значение по умолчанию
Из книги автора18.8. Разделение канала с помощью SQUID Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров работала в Интернете с одной скоростью, а другая - с другой. Это может потребоваться, например, для разграничения пользователей, которые
Из книги автора9.3. squid Как я уже сказал, самым распространенным прокси-сервером является squid. Этот сервер имеет достаточно длинную историю, и за время его существования в нем реализовано много возможностей. Еще не было ничего такого, что я не смог бы получить с помощью squid.Основной
Из книги автора9.4. Права доступа к squid Это самая больная тема для любого администратора. Да, и в squid тоже есть права доступа, и они также описываются в конфигурационном файле /etc/squid/squid.conf. Но мы рассматриваем права отдельно, потому что основной упор делаем на безопасность. Именно поэтому
Из книги автора9.5. Замечания по работе squid Сейчас нам предстоит немного поговорить о некоторых вопросах безопасности сервиса squid и дополнительных возможностях, которые могут ускорить работу в
Из книги автора12.5.4. Журнал прокси-сервера squid Основным журналом прокси-сервера squid является /var/log/squid/access.log. Это текстовый файл, в котором каждая строка состоит из следующих полей:? время начала соединения или события;? продолжительность сессии;? IP-адрес клиента;? результат обработки
Сегодня мы поговорим о прокси-серверах.
Прокси-сервер - это такая штука, обеспечивающая доступ нескольких компьютеров из одной сети в другую сеть (но не путать с маршрутизаторами - это совсем разные вещи, прокси-сервер работает на прикладном уровне). Наиболее расспространенная задача прокси-сервера - обеспечить доступ в интернет для ПК, на которых его нет через один ПК, который имеет доступ в глобальную сеть. Рассмотрим эту задачу в случае использования Windows-компьютера в качестве шлюза в интернет.
Для решения этой задачи можно пользоваться проприетарными решениями с визуальным интерфейсом - например, UserGate.Но у меня не получилось заставить его корректно работать на ПК с Windows 7 да и он платный:) Поэтому лучшим решением я считаю доставшийся нам с *nix-ов Squid. Скачать сие творение можно по адресу: Squid 2.7 (последняя версия на момент написания статьи)
Скачиваем и распаковываем желательно в корень диска. Не пытайтесь что-нибудь запустить оттуда - в этой программе нет графического интерфейса - и пусть вас это не пугает:)
Далее открываем консоль - Win+R / сmd / переходим в папку с установленным сквидом (далее я буду писать для пути установки c:\squid)
c:\
cd c:\squid\sbin
Теперь необходимо установить сквид как службу Windows командой:
squid -i -f c:/squid/etc/squid.conf -n Squid27
Где Squid27 - имя службы, которое в принципе может быть любое допустимое.
Теперь надо подредактировать файл настроек squid.conf, который находится в папке c:/squid/etc/ советую забекапить оригинальный файл. Далее удаляем из этого файла весь текст и прописываем следующее:
http_port 3128
acl localnet src 192.168.3.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny all
squid -z -f c:\squid\etc\squid.conf
Вот, в принципе, мы и готовы к запуску нашего прокси. Пишем в командной строке (или можно зайти в Службы и запустить мышкой:)
net start Squid27
Остановка:
net stop squid27
Переконфигурация:
squid -n Squid27 -f с:/squid/etc/squid.conf -k reconfigure
Еще можно много чего наворотить в этом прокси, например, задать ограничения разным пользователям по времени, по скорости, запретить доступ на определенные сайты и т. д. и т. п. Но в задачи этой статьи не входит описывание этого всего - такой материал легко найти на просторах Интернета.
Squid - это популярный прокси-сервер, который используется в основном для кэширования часто запрашиваемого веб-контента, чтобы уменьшить время отклика страниц, а также для фильтрации сетевого трафика. Он поддерживает множество различных протоколов таких как HTTP, FTP, TLS, SSL, Internet Gopher и HTTPS. А еще эта штука может быть очень полезной при медленном интернет-соединении. Первоначально Squid был разработан как Unix демон, но потом было выпущено несколько портов для WIndows. Squid распространяется под лицензией GNU General Public License.
В этой инструкции вы узнаете как установить Squid в Ubuntu 16.04. Просто последовательно выполняйте эти инструкции и установка squid ubuntu не вызовет никаких проблем. Squid это довольно многофункциональная программа и мы не сможем охватить в этой статье все ее функции, но попытаемся рассмотреть основные, чтобы вы смогли ее полностью настроить и использовать. Начнем с установки.
Есть несколько способов установки Squid в Ubuntu, один из самых распространенных - установка из официальных репозиториев с помощью утилиты apt.
Сначала откройте терминал сочетанием клавиш Ctrl+Alt+T и обновите индекс пакетов:
После обновления списка пакетов можно переходить к установке прокси-сервера просто выполните команду:
sudo apt install squid
Затем утилита спросит нужно ли продолжать установку, введите Y и дождитесь окончания загрузки и установки:
Затем можно переходить к настройке.
Конфигурационный файл сервера находится в директории /etc/squid. В зависимости от версии Squid название папки и самого файла может отличаться, например, /etc/squid3/squid.conf или /etc/squid/squid.conf. Все настройки находятся в этом файле. Давайте его рассмотрим.
vim /etc/squid3/squid.conf
Когда откроется файл вы увидите что то похожее:
Файл содержит несколько опций настроек, а также очень много документации по их использованию. Мы не будем трогать многие из них, но основные рассмотрим.
Сначала нам нужно настроить правила доступа клиентов к нашему прокси-серверу. Squid проектировался как программа для организаций и даже если вы используете его дома, настройка squid 3 тоже должна быть выполнена.
Для это используется acl список. это обычный список объектов, сейчас он вообще ничего не значит. Это могут быть ip адреса, порты и т д. Потом мы укажем программе что нужно делать с этим списком, разрешать или запрещать доступ. Синтаксис создания acl списка такой:
acl имя_списка тип_списка элемент_списка
Таких строк может быть несколько с одним именем и типом, из них получается список. Имя списка может быть произвольным, мы его еще будем использовать. Тип списка это намного интереснее. Может быть одним из:
Это далеко не все типы списков, но для начала хватит, а более подробная информация есть в том же конфигурационном файле.
Добавим список, для доступа к серверу из локальной сети:
acl localnet src 192.168.0.0/16
Создадим список Safe_ports, чтобы разрешить трафик на порты основных сетевых служб, а также незарегистрированные порты выше 1024:
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
Создадим еще два списка - SSL_ports и connect, чтобы разрешить использовать метод connect только для ssl соединений. Это запретит клиенту использовать другие прокси-серверы поверх нашего:
acl SSL_ports port 443
acl connect method CONNECT
Как я уже говорил, эти списки сами по себе ничего не значат и никак не влияют на работу сервера. Чтобы применить список нужно использовать директиву http_access. Ее синтаксис:
http_access действие имя_списка
Действие может быть allow (разрешить) или deny (запретить). теперь запретим доступ ко всем портам, кроме заданных в Safe_ports:
http_access deny Connect !SSL_ports
Теперь разрешим доступ из этого компьютера (acl список localhos предопределен):
http_access allow localhost
Разрешим доступ из локальной сети:
http_access allow localnet
И запретим все остальное:
http_access deny all
Контроль доступа, это один из самых важных компонентов, но настройка squid ubuntu на этом незакончена. Есть еще много интересных параметров, мы рассмотрим только несколько из них:
http_port - задает ip адрес и порт, на котором будет работать программа. Можно запускать прокси только на этом компьютере такой конструкцией:
http_port localhost:3218
Или в локальной сети:
https_port - задает ip адрес и порт, на котором будут приниматься https соединения. Мы не рассматриваем работу с https в этой статье.
cache_mem - количество памяти, которая выделяется для кэширования объектов.
cache_dir - позволяет задать папку для хранения кэша. По умолчанию весь кэш хранится в оперативной памяти. Синтаксис:
cache_dir файловая_система папка размер_в_мб L1 L2
L1 и L2 - количество подпапок первого и второго уровня. Файловая система определяет каким образом данные будут писаться на диск. Например:
cache_dir aufs /var/spool/squid 100 16 256
coredump_dir - директория, в которую будет сохранен дамп памяти в случае ошибки.
refresh_pattern - очень интересный параметр, который позволяет продлить время жизни объектов в кэше. Синтаксис такой:
refresh_pattern -i регулярное_выражение минимальное_время процент максимальное_время параметры
параметры могут быть такие:
Например:
refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
Вам могут понадобиться и другие настройки после того, как установка squid ubuntu Будет завершена. Но они выходят за рамки этой статьи. Теперь сохраните изменения, закройте файл и перезагрузите Squid:
sudo service squid3 restart
Если эта команда вернет ошибку, попробуйте другую:
sudo service squid restart
Осталось проверить работу нашего прокси-сервера. Это можно сделать с помощью любого браузера. Откройте настройки браузера и выполните настройку прокси. Я покажу как это сделать в Mozilla Firefox. Если у вас другой браузер, например, Google Chrome думаю вы разберетесь как там настраивается прокси.
Откройте браузер, перейдите в Настройка --> Дополнительно --> Сеть . Затем нажмите Настройки в разделе Подключение и выберите настроить прокси вручную :
В поле HTTP прокси укажите IP адрес машины, на которой выполнялась установка Squid сервера, а в поле порт - номер порта 3128. Этот порт используется по умолчанию в Squid, но вы можете изменить номер порта с помощью /etc/squid/squid.conf
Для инсталляции Squid используется команда:
Apt-get install squid3
Когда установка завершится, сервис запустится автоматически.
Перейдём к настройке. Файл конфигурации расположен по адресу /etc/squid3/squid.conf . Для неподготовленного пользователя он может показаться совершенно необъятным — в нём более 7000 строк. Большая часть из них закомментированы и описывают значительную часть всех возможных вариантов работы Squid.
Для комфортной работы скопируем файл настроек в ту же папку под другим именем, чтобы всегда иметь под рукой стандартные настройки:
cp /etc/squid3/squid.conf /etc/squid3/backup-squid.confПри необходимости перед началом настройки можно обратиться к официальной документации проекта .
Теперь можно удалять из файла конфигурации все закомментированные строки и пояснения, оставляя только активные директивы. По умолчанию их немного:
acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025 -65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all http_port 3128 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20 % 10080 refresh_pattern ^gopher: 1440 0 % 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0 % 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20 % 2880 refresh_pattern . 0 20 % 4320Основной инструмент настройки Squid — это списки контроля доступа или ACL (Access Control List) . ACL объявляются директивой, имеющей следующий синтаксис:
acl имя параметр элементы_списка
Параметр даёт серверу понять тип элементов списка. АCL с параметром port содержит номера портов, а с параметром src — ip-адреса, с которых на сервер поступает запрос. Полный список параметров весьма обширен и доступен в официальной документации.
Таким образом, строка
acl Safe_ports port 80добавляет в список Safe_ports, содержащий элементы типа “порт”, новое значение 80.
Директива http_access, имеющая формат
http_access указание имя_acl
определяет правила работы с элементами указанного acl. Например, строка:
http_access deny !Safe_portsблокирует все порты, не входящие в список Safe_ports.
По умолчанию доступ к Squid разрешен только с самого сервера:
http_access allow localhost http_access deny allЧтобы открыть доступ клиентам локальной сети создадим для них новый список доступа c параметром src:
acl localnet src 192.168.0.0 /24И разрешим доступ:
http_access allow localnetТеперь укажем порт, на котором работает Squid, и установим прозрачный режим работы:
http_port 192.168 .0 .1 :3128 intercept #параметр intercept включает прозрачный режимМинимальная настройка конфигурационного файла Squid завершена, теперь можно перейти к описанию политики информационной безопасности.
Параметр src позволяет регулировать доступ для клиентов со статичными ip-адресами:
acl UserGroup src 192.168 .0 .2-192 .168 .0 .9 # группа пользователей acl SingleUser src 192.168 .0 .10 #отдельный пользователь http_access allow UserGrour #разрешаем доступ для группы http_access allow SingleUser # и для отдельного пользователя http_access deny all #запрещаем всем остальнымПараметр dst позволяет указать список ip-адресов назначения, к которым клиент желает получить доступ:
acl Net194 dst 194.67.0.0 /16 #описываем некую подсеть 194.67.0.0/16 http_access deny SingleUser Net194 # запрещаем пользователю доступ к нейПараметр dstdomain даёт возможность указывать домен, к которому выполняется запрос:
acl SitesBlocked dstdomain .example .ru .sample .ru #указываем несколько доменных имён http_access deny UserGroup SitesBlocked #и запрещаем к ним доступ группе пользователейЕсли необходимо указать домен источника, используется параметр srcdomain .
Параметры srcdom_regex и dstdom_regex позволяют использовать в ACL регулярные выражения:
Acl SitesRegexFree dstdom_regex free #сайты, содержащие в доменном имени слово “free” acl SitesRegexComOrg dstdom_regex \.com$ \.org $ #сайты доменных зон.com и.org http_access deny SingleUser SitesRegexFree http_access deny SingleUser SitesRegexComOrg
Ключ -i необходим для игнорирования регистра символов в регулярных выражениях:
acl имя [-i] url_regex элементы_списка
С помощью параметра url_regex возможно указать шаблон регулярного выражения для URL:
acl MusicMP3 url_regex -i \.mp3$ #охватывает музыкальные файлы.mp3Параметр port используется для указания списка портов. Он будет полезен для запрета отдельных портов, которые используются установленными на клиентской машине программами, например интернет-мессенджерами.
Ограничение пользователей по времени осуществляется с помощью параметра time:
acl имя time дни чч:мм-ЧЧ:ММ
Где день: M — Понедельник, T — Вторник, W — Среда, H — Четверг, F — Пятница, A — Суббота, S — Воскресенье.
Важно отметить что время начала промежутка должно быть всегда меньше времени конца. Например, возможно указать вариант 00:00-23:59, но промежуток 20:00-09:00 придётся разбить на 20:00-23:59 и 00:00-09:00.
Ограничения по времени можно комбинировать и с другими правилами. Есть возможность по расписанию разрешать или запрещать доступ к просмотру определённых сайтов, открывать и закрывать порты, управлять доступностью IP-адресов и отдельных доменов. Например:
Acl WeekendTime time AS 10 :00 -15 :00 #обозначим некоторый временной промежуток для выходных дней: http_access allow SingleUser WeekendTime MusicMP3 #разрешим пользователю достум к файлам формата mp3 в выбранный промежуток времени http_access deny SingleUser MusicMP3 #и запретим в любое другое время
Параметр proto позволяет указывать протокол передачи информации:
acl имя_acl proto список
Используя его можно запретить пересылку файлов по протоколу ftp:
acl proto_ftp proto ftp http_access deny SingleUser proto_ftpНа сегодняшний день, когда ушли в прошлое каналы с пропускной способностью в 256 кбит/с и менее, можно ошибочно предположить что устанавливать ограничения по скорости соединения в случае небольшого количества клиентов локальной сети бессмысленно. Тем не менее, очень желательно устанавливать хотя бы самые простые правила регулирования скорости соединения для отдельных пользователей, чтобы избежать перегрузки сети и нехватки ресурсов для отдельных пользователей, для которых важна хорошая скорость работы сети. Подводные камни могут скрываться в следующих процессах:
Прокси-сервер Squid позволяет реализовывать политику ограничения скорости с помощью механизма пулов. Пул можно представить себе, как емкость с водой, которая постоянно заполняется до краёв, а клиенты по мере надобности наливают воду в свои стаканы через персональные краны.
Работу пулов регулируют три директивы: delay_class , delay_parameters , delay_access .
Количество пулов устанавливает директива delay_pools:
delay_pools количество_объявленных_пулов
Создадим несколько пулов:
delay_pools 2 #всего 2 пула с номерами 1 и 2 соответственноПулы могут быть трёх классов:
Класс пула должен быть указан в директиве delay_class:
delay_class номер_пула класс_пула
Укажем класс пула:
delay_class 1 1 #пул №1 ограничит скорость для всех клиентов, для которых он будет примененДиректива delay_parameters устанавливает параметры пула:
delay_parameters номер_пула параметры
Формат записи параметров зависит от выбранного класса пула:
delay_parameters 1 байт_на_всю_сеть # для класса 1 delay_parameters 1 на_всю_сеть на_клиента #для класса 2 delay_parameters 1 на_всю_сеть на_подсеть на_клиента #для класса 3Для пула №1 выбран класс 1, установим для него скорость передачи данных в 512 кбит/с:
delay_parameters 1 64000 /64000 # 512 Кбит = 64 Кбайта = 64000 байтЗапись параметра производится по следующим правилам: сперва указывается ограничение скорости, затем указывается лимит, после которого это ограничение начинает действовать. Таким образом значение параметра 64000/64000 говорит о том, что после того, как пользователь скачал на максимальной скорости первые 64Кб запроса, на клиента накладывается ограничение скорости в 512 Кбит/с. Удобно устанавливать второе значение параметра несколько больше чем первое, например конфигурация:
delay_parameters 1 64000 /256000позволяет пользователю получить первые 256Кбайт запроса на максимальной скорости и только потом ограничить клиента шириной канала в 512 Кбит/с.
delay_parameters 1 -1 #неограниченная скорость доступа для пула №1Теперь можно распространять действие пула на отдельных клиентов сети при помощи директивы delay_access , имеющей формат:
delay_access номер_пула действие имя_acl
Параметр “ действие” имеет значения allow (разрешить) и deny (запретить). Пул будет действовать на тех клиентов, которым он разрешен и не будет действовать на тех, кому запрещён.
Например, конфигурация:
delay_access 1 deny UserGroup delay_access 1 allow SingleUserраспространяет действия пула №1 на отдельного пользователя SingleUser, но не затрагивает группу пользователей UserGroup.
Для группы пользователей используем пул №2:
delay_class 2 2 # пул №2 позволит отрегулировать общую ширину канала для всей группы клиентов и установить отдельные органичения для каждого пользователя группы.Опишем ограничения:
delay_parameters 2 512000 /512000 64000 /128000 # 8 Мбит/с - ограничение ширина канала для всей группы, на этой скорости клиент может скачать первые 128Кбайт запроса, а затем скорость его соединения упадёт до 512 Кбит/с.Применим ограничения пула №2:
delay_access 1 allow UserGroup #действует на группу пользователей UserGroup delay_access 1 deny SingleUser #но не действует на отдельного пользователя SingleUserПрокси-сервер Squid поддерживает два вида кэширования — кэш в оперативной памяти и на жестком диске. При их настройке стоит помнить, что кэширование в принципе может ускорить скорость обработки запросов, но может вызвать и обратный эффект — в случае неверно подобранных параметров конфигурации. Также немаловажным является тот факт, что любое кэширование влечет дополнительную нагрузку на ресурсы сервера, в частности, слишком большой объем кэша в RAM может полностью парализовать работу сервера, спровоцировав нехватку оперативной памяти.
В стандартной конфигурации Squid включен только RAM кэш, объем используемой памяти установлен на 256Мб. Увеличим объем кэша и установим максимальный размер кэшированного объекта с помощью соответствующих директив:
Cache_mem 1024 MB # объем доступной для кэширования памяти maximum_object_size_in _memory 512 KB # максимальный размер объекта в кэше
Следует учитывать, что кэш в оперативной памяти сбрасывается каждый раз при перезагрузке или выключении сервера, поэтому оценивать результаты изменения конфигурации стоит только по прошествии некоторого времени.
За использование HDD кэша отвечает директива cache_dir , имеющая формат:
cache_dir тип_хранилища путь_к_хранилищу размер L1 L2
Cache_dir ufs /var /squid_cache 1024 16 256
Размер кэша на диске указывается в мегабайтах, в примере выше кэш с максимальным размером 1 Гб будет хранится в папке /var/squid_cache . Тип хранилища ufs стандартный. Параметры 16 и 256 указывают количество директорий первого и второго уровня, эти значения так же прописаны в документации как стандартные.
Максимальный размер объекта в дисковом кэше также можно указать:
maximum_object_size 2 MBSquid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала:
Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения:
access_log daemon:/etc/squid3/logs/access.log squidПараметр, имеющий в примере значение “squid” определяет формат лог-файла. Можно задать формат лога “common” для того, чтобы можно было обрабатывать полученный журнал сторонними программами, но в таком случае стоит помнить, что этот формат лога не содержит всей информации, которая есть в логе по умолчанию. Помимо стандартных вариантов имеется возможность создать собственный формат лог-файла, используя директиву logformat. Подробную информацию о работе этой директивы можно найти в документации к продукту.
Директивы cache_log и cache_store_log позволяют указать путь к файлам cache.log и store.log соответственно. Они не требуют указания формата:
Cache_log daemon:/etc/squid3/logs/cache .log cache_store_log daemon:/etc/squid3/logs /store .log
Помимо различных видов журналов Squid имеет настройку уровней логирования. За глубину отладки отвечает директива debug_options . У неё два обязательных параметра — секция и глубина отладки:
debug_options ALL ,1 # секция “ALL ”, глубина отладки 1Значение секции рекомендуется оставлять ALL (либо осторожно выбирать конкретную секцию из списка). Уровень логирования же может менятся в диапазоне от 1 до 9, где с ростом уровня увеличивается подробность логов, и, соответственно, количество записей в журнале. Как правило, уровень выше 5 редко используется в реальной жизни, потому что выводит уже слишком много “избыточной” информации для каждого произошедшего события.
Для того чтобы всегда иметь возможность начать новый файл логов и упорядочить их существует параметр количества ротаций:
logfile_rotate 31Значение 31 означает, что при создании нового файла логов старый получит расширение от 0 до 30 и дальнейшая запись в него вестись не будет. Создание нового файла логов производится с помощью команды:
squid -k rotateТаким образом, добавив в cron задачу каждый день создавать новый файл логов, можно иметь упорядоченный отчет обо всём прошедшем через прокси-сервер трафике за прошедший месяц.
Если даже с самым низким уровнем логирования объем логов возрастает до нежелательных масштабов — стоит применить дополнительные средства, вроде автоматического сжатия журналов или переноса их в отдельное хранилище. Так же можно изменить количество или частоту ротаций в зависимости от задачи. Можно хранить меньшее количество логов, либо чаще создавать свежий журнал, а старый архивировать и перемещать. Для прокси-сервера Squid есть множество надстроек и сторонних программ, упрощающих все этапы работы с лог-файлами.
Оставим без изменений остальные параметры и проверим файл настроек с помощью команды:
squid3 -k checkЭта команда предназначена для поиска ошибок в конфигурационном файле, если она ничего не выводит — значит ошибок нет.
Теперь осталось применить новые параметры:
service squid3 reloadПосле завершения настройки прокси-сервера перенаправим на него весь трафик локальной сети, внеся изменения в файл /etc/nat командой:
nano /etc/natДобавим в самый низ файла следующую строку:
#Перенаправление всего http-трафика на прокси-сервер iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0 /24 -p tcp -m multiport --dport 80 ,8080 -j DNAT --to 192.168.0.1:3128После этого перезагрузим сервер для автоматического применения новых настроек:
Таким образом, несмотря на большое общее количество параметров настройки Squid, минимальный набор для начала работы достаточно скромен. Использование прокси-сервера Squid позволит вам быстро реализовать политику доступа групп пользователей или отдельных клиентов к ресурсам сети интернет, а так же мониторинг их деятельности и сбор статистики об использовании канала.