Блог ИТ склеротика. SQUID в Linux, основы

Страницы

Расширенный поиск в статьях блога

5 марта 2012 г.

SQUID в Linux, основы

Прокси-сервер SQUIDНачну с основ. squid является кэширующим прокси сервером для HTTP, FTP и др. протоколов. Прокси сервер для HTTP - это программа, выполняющая HTTP-запросы от имени клиентской программы (будь то браузер или другой софт). Proxy может быть кэширующим или не кэширующимКэширующий, соответственно, сохраняет все запросы в какое-либо хранилище для более быстрой отдачи клиентам, а не кэширующий - просто транслирует HTTP, ftp или другие запросы. Ранее, кэширование трафика позволяло добиться довольно значительной экономии трафика, но в настроящее время с ростом скоростей интернета это немного утеряло актуальность.
Прокси серверА можно выстраивать в иерархии для обработки запросов. При этом, прокси серверА взаимодействуют между собой попротоколу ICP.
Squid разработан и может работать на большинстве операционных систем (как unix, так и windows). Лицензируется под лицензией GNU GPL. Способен обрабатывать и кэшировать  HTTP, FTP, gopher, SSL и WAIS (убрано в 2.6) запросы, а так же DNS. Наиболее частые запросы хранит в оперативной памяти. На текущий момент существуют 2 стабильные версии squid2.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

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

Установка SQUID

Перед установкой и настройкой squid необходимо настроить сеть linux и убедиться, что машина, на которой будет работать squid имеет доступ во внешнюю сеть и клиенты, которые будут использовать данный прокси имеют доступ к данной машине. Установка прокси-сервера squid как и другого ПО в Linux возможна различными способами, описанными в статье управление программным обеспечением в 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/n/?] y
Получить:1 http://ftp.ru.debian.org/debian/ squeeze/main libltdl7 i386 2.2.6b-2 [295 kB]
Получить:2 http://ftp.ru.debian.org/debian/ squeeze/main squid-langpack all 20100628-1 [228 kB]
Получить:3 http://ftp.ru.debian.org/debian/ squeeze/main squid3-common all 3.1.6-1.2+squeeze2 [193 kB]
Получить:4 http://ftp.ru.debian.org/debian/ squeeze/main squid3 i386 3.1.6-1.2+squeeze2 [1 442 kB]
Получено 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 работа через браузер lynx

Управление squid

Демон управляется init-скриптом /etc/init.d/squid3. Прокси-сервер представляет собой процесс /usr/sbin/squid3. Демон поддерживает множество параметров, с которыми можно ознакомиться в man squid, но в таких дистрибутивах, как Debian и RH для управления демоном вполне достаточно init-скрипта.
Проверить работоспособность сервера squid можно следующим образом:
gw ~ # # проверка работоспособности squid на сетевом интерфейсе
gw ~ # netstat -npl | grep 3128
tcp        0      0 0.0.0.0:3128            0.0.0.0:*               LISTEN      25816/(squid)
gw ~ # # проверка, запущен ли процесс демона
gw ~ # ps aux | grep squ
root     25814  0.0  0.0   9316  1644 ?        Ss   Feb15   0:00 /usr/sbin/squid3 -YC -f /etc/squid3/squid.conf
proxy    25816  0.0  0.4  37308 13184 ?        S    Feb15   2:29 (squid) -YC -f /etc/squid3/squid.conf
root     28451  0.0  0.0   3328   784 pts/0    S+   00:20   0:00 grep --colour=auto squ
Как видно, при запуске данный демон стартует с параметрами -YC -f /etc/squid3/squid.conf. Параметр -f задает конфигурационный файл, который используется для работы демона. Параметры -Y и -С мне не совсем ясны. -Y вроде как ускоряет каким-то образом запуск в случае падения, а -С позволяет корректно завершать демона.
Программа squid3 с ключом -k и дополнительным параметром позволяет удобно управлять демоном, не прерывая пользователей. Примеры:
  • -k - послать команду работающему серверу:
    • reconfigure - посылка сигнала HUP - перечитать и использовать файл конфигурации
    • rotate - обрезать логи; сигнал USR1
    • shutdown - корректно остановить squid; сигнал TERM
    • interrupt - убить squid; сигнал INT
    • kill - жестко убить squid; сигнал KILL
    • debug - начать/закончить полную трассировку; сигнал USR2
    • check - проверить корректность работы squid (без сообщений - работает корректно); сигнал ZERO
    • parse - проверить синтаксис squid.conf
Собственно, изменив squid.conf, выполнив squid3 -k parse, можно убедиться в корректности внесенных изменений, далее выполнив squi3 -k reconfigure можно практически не обрывая пользователей применить изменения. Очистку кэша (пересоздание) можно выполнить командой squid3 -z.
Будет неправильно, если я не обращу внимание на следующий момент. При установке squid из репозиториев Вашего дистрибутива, пакет является уже настроенным и имеет какие-то заданные настройки по умолчанию. Например, расположение каталога журнала, каталога конфигурационных файлов, поддерживаемые методы проверки подлинности и множество других. Какие настройки задавать при сборке бинарного пакета определяется сборщиком пакета и сообществом, которое осуществляет поддержку дистрибутива. Если параметры по умолчанию Вас не устраивают, то необходимо будет установить 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)
Как видно, теперь демон работает только на локальном интерфейсе. Теперь необходимо настроить клиентский компьютер и пользоваться интернетом. Но по умолчанию, доступ разрешен только с локалхоста и при попытке доступа к веб пользователь получит ошибку "Доступ запрещен". В логе /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 - время и многие другие. Соответственно, значение характиристики_типа_отбора будут формироваться в зависимости от типа_отбора.
Когда списки доступа сформированы, при помощи параметра http_access разрешаем или запрещаем доступ указанному ACL. Общий формат вызова такой:
http_access allow|deny [!]имя_списка
где, http_access - параметр задающий последующее правило разрешения (allow) или запрещения (deny) доступ, указанному далее имени_списка. При этом, необязательный восклицательный знак инвертирует значение имени списка. То есть при восклицательном знаке значение имени_списка будет звучать как все, кроме тех, кто в принадлежит данному списку. Кроме того, можно задавать несколько списков через пробел, тогда доступ будет разрешен при условии принадлежности ко всем заданным спискам. При этом, все разрешающие правила необходимо указывать до запрещающего ВСЁ правила:
http_access deny all
Это, как говориться - основы основ. Давайте рассмотрим простой пример. Предположим, у нас есть 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.
Теперь наши локальные клиенты с радостью пользуются интернетом, предварительно настроив браузер!

Настройка параметров кэша squid

Важным моментом настройки squid является настройка параметров кэширования в squid. Место размещения кэша задается параметром cache_dir в squid.conf. Формат параметр следующий:
cache_dir  тип  путь  размер  L1 L2  [options]
где, тип - это алгоритм формирования кэша, может быть: 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, как если бы 
клиент
 браузер работал напрямую с веб-сервером. При этом, силами firewall (в linux - iptables) исходящие запросы на 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 пишутся кроме информации о доступе, еще и системные ошибки и информация о потреблении ресурсов, таких, например, как память или дисковое пространство.
Формат 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 и др.), возможности ограничения пропускной способности канала и контроля доступа к ресурсам интернет. Работу сквида с методами различной авторизации и примеры контроля трафика я рассмотрю в следующих статьях.
Что еще почитать:
В SQUID-FAQ есть много интересной и полезной информации, с которой определенно стоит ознакомиться: http://unix1.jinr.ru/faq_guide/net_management/squid/squid_faq.html
Описание разницы между 2 и 3 squid: http://www.tux.in.ua/articles/731
Перевод squid.conf: http://break-people.ru/cmsmade/index.php?page=translate_squid_conf_file
Еще один перевод: http://www.opennet.ru/base/net/squid_conf.txt.html
Много информации на русском о сквиде: http://squid.opennet.ru/

# объем кеша в памяти
cache_mem 512 MB
# максимальный размер файла, хранящегося в кеше в ОЗУ
maximum_object_size_in_memory 1024 KB
# максимальный размер файла, хранящегося в кеше на диске
maximum_object_size 32768 KB
# Настраиваем политику замещения файлов в памяти и дисковом кэше, мы используем
# сочетание LFUDA и GDSF. Политика GDSF оптимизирует скорость объектов, храня
# маленькие популярные объекты в кэше поэтому она имеет больше шансов на совпадение.
# Она достигает более низкой скорости, чем LFUDA, так как она исключает
# большие (возможно, популярные) объекты.
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
# объем кеша на диске — 32 Гб
cache_dir ufs /var/spool/squid 32000 128 256


.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free