Установка и настройка прокси сервера SQUID на Ubuntu Server. Начальная настройка прокси-сервера Squid

Linux: Полное руководство Колисниченко Денис Николаевич

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

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-адрес клиента;? результат обработки

Настройка прокси сервера Squid

Очень часто нам нужен прокси. Например у вас серый IP или вы счастливый пользователь спутникового интернета. Скачать что-то с сайтов подобных Rapidshare нереально. Здесь нас и выручит squid.

Для установки proxy необходим сервер на виртуализации KVM. На других виртуализациях размещение proxy-серверов запрещено.

Более расширенный вариант моей статьи можно найти на сайте Курского LUG , где я так же рассмотрел возможность использования squid домашними пользователями, а также интеграцию системы сжатия траффика Globax или Toonel каскадом в squid.

Установка squid

cd /usr/ports/www/squid && make BATCH=yes install

Настройка squid

Немного об acl и правилах

Сердцем конфигурирования squid являются acl (access control list) и правила.
Для начала надо усвоить принципы работы acl. ACL имеют сделующий формат:

Acl <имя> <тип> <содержание>

Например этот acl описывает две пользовательские машины с айпишниками (тип src) 192.168.0.1 и 192.168.0.2

Acl comps src 192.168.0.1/32 192.168.0.2/32

Теперь рассмотрим правила.
Правила имеют следующий формат:

<тип_правила> <действие>

На этом этапе надо усвоить то, что правила одного типа проверяются до первого выполняющегося правила. Действие этого правила будет выполнено, и проверка дальнейших правил этого типа будет остановлена. Пример:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access allow vasya http_access deny all

Правила типа http_access это правила разрешающие или запрещающие доступ по http. Рассмотри действие вышеописанного отрывка. acl all указывает нам на все айпишники. А acl vasya указывает на один ip 192.168.1.12
Проверка будет проходить так:
1) http_access allow vasya Если через прокси сидит пользователь с этого айпишника то разрешим ему доступ. Проверка будет остановлена, четвертая строка даже не будет проверена.
2) если прокси использует пользователь не с этого айпи, то правило на строке 3 не выполнится и мы перейдем к правилу на строке 4. Поскольку под acl all подходит любой айпи, то данное правило выполнится и мы заблокируем доступ. дальнейшие правила проверяться не будут . Таким образом мы запретили пользоваться прокси всем кроме Васи.

Рассмотрим частую ошибку на основе прошлого примера:

Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access deny all http_access allow vasya

В данном случае даже Вася не сможет пользоваться прокси. Так как правилом на строке 3 мы заблокировали доступ всем, оно выполнилось, и правило на строке 4 даже не будет проверяться. Внимательно следите за порядком правил одного типа.

Создаем конфиг squid

Приступим к написанию конфига. Разберу на примере своего конфига.

Для начала в папке /etc/squid создадим папку acls. В ней я создал 3 файла: banners, nobanners, 1banners
В файле banners хранятся регулярные выражение реклам и баннеров которые будут вырезаны. В nobanners хранятся исключения, то есть те страницы и картинки которые будут грузиться даже если в banners есть правило под которое они попадают. В файле 1banners хранятся регулярные выражения описывающие те баннеры которые будут вырезаться в первую очередь. Содержимое своих файлов фильтрации рекламы приведу в конце статьи.

С root правами создадим файл /etc/squid/squid.conf и начинаем добавлять в него строки:

Укажем порт на котором будет работать прокси: (ВНИМАНИЕ!! Никогда не ставьте стандартные порты вроде 8080 80 или 3128 если не хотите чтобы ваш прокси легко можно было обнаружить)

Http_port 1234

Укажем имя нода на котором стоит squid. Узнать свое имя можно выполнив uname -n

Visible_hostname dimon4eg

Отключим icp

Icp_port 0

Через acl с регулярными выражениями укажем страницы которые не будут кешироваться

Acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache

Создадим папку /var/spool/squid и сделаем chmod 777 /var/spool/squid
Опишем обьем "быстрого" кеша и кеша на жестком диске. Объем быстрого кеша рекомендуется ставить не более 32 метров для экономии оперативной памяти.

Cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256

Аналогично создадим папки /var/log/squid и укажем где хранить логи

Cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log

Таблица mime и pid процесса

Mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid

Настройки фтп через прокси

Ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on

Служебные acl

Acl all src 0/0 acl SMTP port 25

Список айпи с которых разрешен прокси. Обязательно указать 127.0.0.1 и адрес самого сервера в локалке. Далее укажем всех пользователей кто имеет доступ. (ВНИМАНИЕ, обязательно отключите доступ всем кому попало.)

Acl doallow src 192.128.0.2/32 127.0.0.1/32

Зададим порты которые разрешены

Acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 5190 5552 acl Safe_ports port 777

Расположение файлов с правилами вырезания рекламы. Ключ -i означает сделать правила не чувствительными к регистру

Acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"

Теперь опишем правила

Http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all

Запретим доступ icp

Icp_access deny all

Приложения

Полный текст моего squid.conf

http_port 1234 visible_hostname dimon4eg icp_port 0 acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache
cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log
mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid
ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on
acl server src 192.168.0.2/32
acl all src 0/0 acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 563 acl SMTP port 25
acl doallow src 192.128.0.2/32 127.0.0.1/32
acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 acl Safe_ports port 777 acl CONNECT method CONNECT
acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"
http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all
icp_access deny all
never_direct allow all

Мои правила для нарезки рекламы

/etc/squid/acls/banners

.?(count(\d|er|\.rbc)|hitbox|advertising|linkexchange|click\d|\dcount|adriver) .*(/ad(s|v)|\.adnet\.ru|banview|banner|adriver|\dcount|bnr|bans\.|/sale|/pagead) .*exaccess\.ru/asp/. .*(spylog|warlog\.info|ipz.ru/cgi-bin/cm\.cgi\?|c\.mystat-in\.net|c\.bigmir\.net|online\.mirabilis|top\.winrate\.net|vipelita\.ru|cnews\.ru.*/informres).* .*(brs\.trilan\.ru/images|google-analytics\.com|/informer|bantex\.ru|100-100\.ru).* .?(hotlog|tours|sharereactor|&rand=|livejournal\.com/userpic).* ^(www\.)?ad\d?\..* .?images\.rambler\.ru/upl.* .*s1\.adward\.ru/\?r.* .*(bhanvad)\.com.* .*(dosugonline|blogonline|all-web|otvali|loveplanet|ziza|body\.imho|meganame)\.ru.* .?(clx|gold-music)\.ru/.* .*(nnm.ru|rambler|realcoding|kpnemo\.ru/advimg).*\.swf .*/ad?.* .?re(k|c)lama.* .^(www\.)?(1001tur|jmp\.net|kmindex.ru/.*/\?|kreis\.trl\.ru|rot\.goup\.ru/\?|au-au\.ru).* .?r\.mail\.ru/b.*\.swf .?bs\.yandex\.ru/show.* .?br\.gcl\.ru/cgi-bin/br.* .?m1.nedstatbasic.net/basic.js .*\.doubleclick\.net .*an.yandex.ru/* .*/adserver/*

Материалы о построении роутера на базе Squid - одни из самых популярных на нашем сайте. Такое решение позволяет с минимальными затратами (прежде всего на программную часть) организовать и упорядочить доступ к сети интернет на предприятии. Но рассматриваемые нами варианты предназначались преимущественно для работы в составе рабочей группы. Отсутствие интеграции с Active Directory резко снижало удобство применения такого роутера в доменных сетях, поэтому мы решили исправить это упущение.

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

Особенности интеграции с Active Directory

В чем смысл интеграции прокси-сервера Squid в Active Directory? Скажем сразу, что если ваша основная цель - просто раздать интернет всем и без ограничений, ну разве что закрыв социальные сети, то дальше можно не читать, уже описанная нами конфигурация полностью удовлетворит ваши потребности. Основное преимущество интеграции роутера в Active Directory - это использование единой точки аутентификации и управление доступом к сети интернет на базе уже существующих в домене учетных записей и групп безопасности.

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

В качестве DNS-серверов, в том числе и на роутере , должны обязательно указываться только доменные DNS, по умолчанию DNS-сервером является каждый контроллер домена. По этой причине роутер не должен иметь роли DNS-сервера. Также, для обеспечения интеграции с AD, роль DHCP-сервера также следует передать Windows Server, обычно на один или несколько контроллеров домена.

Теперь подходим к тому, ради чего все это затевалось. Аутентификация по доменным учетным записям позволяет использовать единую точку входа (SSO, Single Sign-On ), когда пользователь вводит логин и пароль один раз - при входе в систему. Это достигается применением протокола Kerberos , который является способом аутентификации в AD по умолчанию. В отличии от авторов иных руководств, мы не видим смысла настраивать или Basic-аутентификацию, в первую очередь по соображениям безопасности. Тем более Kerberos поддерживают все современные операционные системы.

Следующим шагом является авторизация на основе существующих групп безопасности, это особенно актуально при переходе с Forefront TMG или ISA Server . Это позволяет один раз настроив Linux-сервер дальнейшее управление доступом осуществлять привычным способом - через группы Active Directory, что позволяет снизить порог вхождения для администраторов.

Так как Active Directory имеет более сложную структуру и большее количество "действующих лиц", то чтобы вы не запутались в используемых нами адресах и именах хостов мы подготовили небольшую схему:


В наших примерах будет использоваться домен Active Directory с FQDN именем interface31.lab , за который отвечают два контроллера домена SRV-DC01 и SRV-DC02 с адресами 192.168.31.101 и 102 соответственно. Оба контроллера реализованы на базе Windows Server 2012 R2.

Роутер выполнен на базе Ubuntu Server 14.04 (Debian 7/8) и имеет имя SRV-GW01 с адресом 192.168.31.100. Также в сети имеется группа серверов со статическими адресами 192.168.31.103-105 и клиентские ПК, адреса которым выдаются DHCP сервером из диапазона 192.168.31.111-199.

Настройка сети

Сеть настраивается традиционным образом, посредством правки конфигурационного файла /etc/network/interfaces . Примем что внешней сети соответствует интерфейс eth0 , а внутренней eth1 . В результате настройки у нас должно получиться примерно следующее:

Auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-search interface31.lab
dns-nameservers 192.168.33.101 192.168.31.102

auto eth1
iface eth1 inet static
address 192.168.31.100
netmask 255.255.255.0

post-up /etc/nat

Обратите внимание, что несмотря на то, что в настройках внешнего интерфейса использован внешний адрес и шлюз, адреса DNS-серверов указаны внутренние. Также указана опция dns-search , которая определяет домен для разрешения не FQDN-имен. Это означает, что к каждому короткому имени будет автоматически добавлен указанный домен, например, srv-dc01 будет дополнено до srv-dc01.interface31.lab .

Если вас смущает указание внутренних DNS в настройках внешней сетевой карты, то можете перенести эти строки в секцию eth1, на работу сервера это не повлияет.

DNS-сервера провайдера или публичные DNS следует указать в разделе Серверы пересылки внутреннего DNS-сервера на любом из контроллеров домена.

Если вы получаете сетевые настройки от провайдера по DHCP, то для использования внутренних серверов имен, вместо DNS провайдера секция eth0 должна иметь вид:

Auto eth0
iface eth0 inet dhcp
dns-search interface31.lab
dns-nameservers 192.168.33.101 192.168.31.102

Таким образом явно указанные настройки перекроют полученные автоматом от провайдера.

Сохраняем содержимое файла, перезагружаемся. Проверяем наличие интернета на сервере и разрешение имен. Например, выполните команду:

Nslookup srv-dc02

Ответить вам должен первый указанный доменный сервер имен, в нашем случае 192.168.33.101 и выдать полное FQDN-имя хоста и его IP-адрес.

После чего проверьте разрешение внешних имен:

Nslookup ya.ru

Вы также должны получить ответ от внутреннего сервера. На этом настройку сети можно считать законченной.

Настройка NAT и брандмауэра

Базовая настройка брандмауэра принципиально ничем не отличается от варианта роутера для рабочей группы, за одним исключением. Так как наш прокси является непрозрачным, то существует возможность выхода напрямую через NAT, если по какой-то причине браузер не будет настроен на работу с прокси-сервером. Поэтому ограничим доступ по HTTP (порт 80) для всех клиентов локальной сети, за исключением серверов и отдельных хостов, которым может потребоваться прямой доступ.

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

Создадим и откроем файл /etc/nat

touch /etc/nat

внесем в него следующее содержимое:

#Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

#Разрешаем трафик на lo
iptables -A INPUT -i lo -j ACCEPT

#Разрешаем HTTP серверам
iptables -A FORWARD -i eth1 -s 192.168.31.101 -p tcp --dport 80 -j ACCEPT
...
iptables -A FORWARD -i eth1 -s 192.168.31.105 -p tcp --dport 80 -j ACCEPT

#Запрещаем HTTP
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j REJECT

#Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.31.0/24 -j MASQUERADE

#Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT

Секция #Разрешаем HTTP серверам подразумевает набор идентичных правил для каждого хоста, которому мы разрешаем выход в интернет в обход прокси. В нашем случае это адреса от 192.168.31.101 до 192.168.31.105, чтобы не загромождать пример мы написали первый и последний, разделив их многоточием (которого в реальном конфиге быть не должно).

Сохраним файл и дадим ему права на исполнение:

Chmod +x /etc/nat

Перезагрузимся:

После чего можно проверить интернет на клиентах, на тех, которые входят в список исключений - он будет, на остальных нет. Другие протоколы: почта (SMTP, POP3, IMAP), FTP, HTTPS и т.п. должны работать на всех клиентах.

Настройка синхронизации времени

Для успешной работы с доменом Active Directory и прохождения Kerberos-аутентификации важно чтобы часы роутера были синхронизированы с часами контроллера домена.

Установим NTP-клиент:

Apt-get install ntp

Затем откроем файл конфигурации /etc/ntp.conf и закомментируем все строки, начинающиеся на server . После чего добавим две свои записи:

Server srv-dc01.interface31.lab
server srv-dc02.interface31.lab

Как вы уже, наверное, догадались, мы закомментировали записи сторонних серверов времени и добавили в этом качестве контроллеры домена.

Затем добавим в конец файла две строки, ограничивающие работу NTP-клиента внутренним интерфейсом:

Interface ignore wildcard
interface listen eth1

Сохраняем файл и перезапускаем службу:

Service ntp restart

Чтобы убедиться, что NTP работает только на внутреннем интерфейсе, выполните:

Ss -l | grep 123

В выводе команды должны быть только внутренние адреса и адреса локальной петли (localhost):

Проверить синхронизацию можно командой:

В выводе обращаем внимание на колонки: when -время с последнего ответа сервера, pool - время опроса сервера, offset - разница времени в секундах.

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

Настройка кэширующего прокси-сервера Squid3

Внимание! Если вы перенастраиваете сервер для рабочей группы, то обязательно удалите пакет dnsmasq или иные DNS и DHCP сервера!

Установим прокси-сервер squid3 командой:

Apt-get install squid3

Откроем конфигурационный файл /etc/squid3/squid.conf и зададим минимальную конфигурацию, добавив или раскомментировав в соответствующих секциях указанные строки.

Укажем acl элемент для локальной сети:

Acl localnet src 192.168.31.0/24

Минимальный набор списков доступа:

Http_access allow localnet
http_access allow localhost
http_access deny all

Интерфейсы, порты и режимы работы прокси:

Http_port 192.168.31.100:3128
http_port 127.0.0.1:3128

Настройки кэша:

Cache_mem 1024 MB
maximum_object_size_in_memory 512 KB

cache_dir ufs / var /spool/squid3 2048 16 256

maximum_object_size 4 MB

Настройки лога:

Access_log daemon:/var/log/squid3/access.log squid
logfile_rotate 31

Для squid 3.1 и ниже первая строка должна выглядеть так:

Access_log /var/log/squid3/access.log squid

Сохраните и проверьте конфигурацию:

Squid3 -k check

Если нет ошибок, то перезапускаем squid:

Service squid3 restart

Перестраиваем кэш:

Service squid3 stop
squid3 -z
service squid3 start

На DNS-сервере домена добавьте A-запись для нашего роутера:

Теперь в настройках браузера укажите полное FQDN имя сервера и порт 3128:

Так как никаких ограничений пока не установлено, то вы должны получить доступ в интернет.

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

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

Установка

В терминале введите следующую команду для установки сервера Squid:

Sudo apt-get install squid

Настройка

Squid настраивается редактированием директив, содержащихся в конфигурационном файле /etc/squid/squid.conf. Следующие примеры иллюстрируют некоторые директивы, которые могут быть изменены для воздействие на поведение сервера Squid. Для более глубокой настройки Squid смотрите раздел .

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

Скопируйте файл /etc/squid/squid.conf и защитите его от записи следующими командами в терминале:

Sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original sudo chmod a-w /etc/squid/squid.conf.original

1. Для настройки вашего сервера Squid на прослушивание порта 8888 вместо стандартного 3128, измените директиву http_port как показано здесь:

Http_port 8888

2. Измените директиву visible_hostname для того, чтобы присвоить серверу Squid определенное имя хоста (hostname). Это имя необязательно должно быть именем хоста компьютера. В примере оно определено как weezie:

Visible_hostname weezie

3. Используя контроль доступа Squid, вы можете настроить, чтобы использование интернет сервиса прокси было доступно только пользователям с определенных IP адресов. Например, мы проиллюстрируем доступ пользователей только из подсети 192.168.42.0/24:

ACL

Acl fortytwo_network src 192.168.42.0/24

http_access вашего файла /etc/squid/squid.conf:

Http_access allow fortytwo_network

4. Используя великолепные возможности контроля доступа Squid, вы можете настроить возможность использования интернет сервиса прокси только в обычные рабочие часы. Например, мы покажем как настроить доступ сотрудников, которые работают с 9:00 до 17:00 с понедельника по пятницу из подсети 10.1.42.0/24:

Добавьте следующее в конец секции ACL вашего файла /etc/squid/squid.conf:

Acl biz_network src 10.1.42.0/24 acl biz_hours time M T W T F 9:00-17:00

Затем добавьте следующее в начало секции http_access вашего файла /etc/squid/squid.conf:

Http_access allow biz_network biz_hours

После внесения изменений в файл /etc/squid/squid.conf сохраните его и перегрузите приложение сервера squid, чтобы изменения вступили в силу, следующей командой в терминале: sudo /etc/init.d/squid restart

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

Что такое proxy-сервер и что такое 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

Прокси-сервер Squid может работать в следующих трех основных режимах:

Прозрачный режим

В этом режиме HTTP соединение осуществляемое клиентами перенаправляется на прокси-сервер без их ведома или явной конфигурации. В этом режиме не требуется настройка клиентов. Недостатки данного способа : необходима конфигурация NAT и перенаправления трафика, аутентификация клиентов не работает, не перенаправляются FTP и HTTPS запросы.

Аутентифицирующий режим

Для работы в этом режиме клиенты должны быть настроены для работы с прокси-сервером (в настройках соединения должен быть прописан адрес прокси-сервера). Может выполняться аутентификация и авторизация клиентов через Kerberos, Ldap, NTLM, IP и Radius. Возможно построение взаимодействия с серверами Microsoft Active Directory путем аутентификации клиентов – членов домена, используя протокол Kerberos, и последующей авторизации членов групп домена используя LDAP в прозрачном режиме (пользователь вводит свой пароль только при регистрации в домене). Для авторизированных групп возможно применение различных настроек контроля доступа и QoS (delay pools).

Обратный прокси-сервер

Прокси-сервер кэширует исходящие данные. Обратный прокси-сервер Squid получает данные у HTTP сервера от имени клиента и передает их обратно клиенту (например, в Интернет). Этот режим позволяет осуществить:

  • Использование кэширования, которое снижает нагрузку на HTTP сервера;
  • Распределение нагрузки между HTTP серверами;
  • Маскировку HTTP серверов и их характеристик;
  • Предотвращение web атак на сервера.

Схемы режимов работы SQUID

transparent режим

обратный режим

режим аутентификации

На приведенных схемах зелеными стрелками обозначены потоки проксируемого трафика. Движение данных потоков в Linux чаще всего регулируется силами и настройками браузера. Кроме того, очень часто, функции маршрутизатора и прокси выполняет одна машина.

Установка SQUID

Перед установкой и настройкой 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

Параметры, с которыми был собран 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 - каталог хранения журналов и мн. др...

Настройка squid

Описание настроек 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

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

Настройка доступа squid

Фактически настройка доступа заключается в описании объекта доступа через параметр 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 является настройка параметров кэширования в 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"ом описано . На этом, можно считать типовое решение по настройке прокси-сервера законченным.

Пример настройки прозрачного прокси 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

  • время - время в формате unix (Количество секунд от 00:00 1970.01.01)
  • мс - миллисекунды с точностью до 3х знаков
  • время_отклика - время отклика, миллисекунд
  • ip_src - IP адрес источника
  • Squid_req_status - статус запроса у squid (например, TCP_HIT для ранее кешируемых объектов, TCP_MISS если запрашиваемый объект взят не из локального кеша, UDP_HIT и UDP_MISS то же для братских запросов)
  • HTTP_status - статус http протокола (200 для удачных, 000 для UDP запросов, 403 для перенаправлений, 500 для ошибок)
  • byte_snd - передано, байт в ответ включая HTTP заголовок
  • метод - метод запроса GET или POST
  • URL - запрошенный url-адрес
  • user - имя авторизованного пользователя
  • squid_her_status - статус иерархии squid - Результат запросов к братским/родительским кешам
  • ip_dst - IP адрес запрашиваемого узла
  • MIME - mime-type

Рассмотрим на примере:

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 и др.), возможности ограничения пропускной способности канала и контроля доступа к ресурсам интернет. Работу сквида с методами различной авторизации и примеры контроля трафика я рассмотрю в следующих статьях.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то