Conf squid: Установка и настройка прокси сервера SQUID на Ubuntu Server » MHelp.kz

Содержание

Установка и настройка прокси сервера SQUID на Ubuntu Server » MHelp.kz

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

Воспользуемся для этого прокси сервером SQUID3

Устанавливаем сервер командой:

sudo apt-get install squid3

Внимание: В Ununtu Server версий менее 16, адрес папки прокси сервера squid — /etc/squid3 , в Ubuntu Server 16 адрес папки прокси сервера squid — /etc/squid. Будьте внимательны при прописывании путей. Визуально в правильном пути до папки SQUID можно убедится с помощью файлового менеджера MC.

Файл конфигурации SQUID3 находится по адресу /etc/squid3/squid.conf, так как данное руководство предназначается для новичков, а файл конфигурации очень большой и содержит очень много комментариев, мы создадим новый файл конфигурации, а оригинальный скопируем под другим названием.

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

Переименуем оригинальный файл squid3.conf в файл с названием squid3.conf.bac

sudo mv /etc/squid3/squid.conf /etc/squid3/squid.conf.bac

Создаем пустой файл конфигурации squid.conf:

sudo touch /etc/squid3/squid.conf

Открываем файл конфигурации:

sudo nano /etc/squid3/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 localnet src 192. 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
Ubuntu Server 15: Файл начальной конфигурации прокси сервера SQUID

Что мы изменили в изначальной конфигурации:

  • acl localnet src 192.168.137.0/24 — указали диапазон нашей локальной сети;
  • http_port 192.168.137.1:3128 intercept — открыли прозрачный прокси сервер на порту 3128, в режиме «прозрачный» на клиентах не нужно настраивать адрес прокси сервера;
  • cache_dir ufs /var/spool/squid3 2048 16 256 — указали настройки использования кеша. Обратите внимание на путь до папки SQUID в зависимости от версии вашего сервера;
  • maximum_object_size 4 MB — минимальный размер кешируемого файла;
  • maximum_object_size_in_memory 512 KB — максимальный размер кешируемого объекта в оперативной памяти;
  • cache_mem 1024 MB — допустимый объем памяти для хранения кеша;
  • access_log daemon:/var/log/squid3/access. log squid — включения ведения логов. Обратите внимание на путь до папки SQUID в зависимости от версии вашего сервера;
  • logfile_rotate 31 — срок хранения лог файлов.

Все остальные параметры, отставлены в изначальном файле конфигурации — без изменения.

Выполним проверку файла конфигурации перед перезапуском службы:

sudo squid3 -k check

Если команда отрабатывает без вывода — ошибок нет, в противном случае изучаем вывод и исправляем допущенные ошибки.

Перезапустим службу squuid, чтобы применить внесенные изменения:

sudo service squid3 restart

Откроем созданный в предыдущем шаге настройки сервера файл /etc/nat и укажем перенаправление http трафика через наш прокси сервер squid:

sudo nano /etc/nat

Добавим в конце файла следующее:

# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth2 ! -d 192. 168.137.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.137.1:3128
Ubuntu Server: Настройка squid

Перезапускаем сервер.

Прокси сервер Squid успешно настроен.

Большинство «не работает» вызвано невнимательностью! Внимательно проверяйте команды и не допускайте в файлах конфигурации лишних символов.

 

[nx_heading style=»coloredline» heading_tag=»h5″ size=»24″ align=»left»]От автора:[/nx_heading]

Если проблема решена, один из способов сказать «Спасибо» автору — здесь.

Если же проблему разрешить не удалось и появились дополнительные вопросы, задать их можно на нашем форуме, в специальном разделе.

[nx_box title=»Поделиться этой статьей» style=»glass» box_color=»#ED303C»]Если данная статья вам помогла и вы хотели бы в ответ помочь проекту Mhelp.kz, поделитесь этой статьей с другими:

[/nx_box]

Такой разный Squid

Статья напечатана в мартовском номере журнала Системный Администратор

Одним из самых популярных решений для организации совместного доступа в Интернет, кэширования трафика и борьбы с баннерами является прокси-сервер

Squid. В различных HOWTO можно найти готовые настройки и инструкции, но работают они не всегда.

Зачем это необходимо?

Прокси-сервер Squid развивается в течение уже многих лет, за это время было выпущено несколько версий, настройки в которых хотя и не значительно, но отличаются. В последние дни декабря 2007 в разряд STABLE перешла третья версия Squid, которая сегодня уже рекомендуема к использованию. В репозитариях дистрибутивов встречается сразу несколько версий Squid, и только это под час вызывает путаницу у новичков. Например возьмем Ubuntu. Для сервера до недавнего времени рекомендуемым являлся Ubuntu 6.06, который был единственным из всех Ubuntu обладателем титула LTS (Long Term Support) и его поддержка будет продолжаться до середины 2011 года. Но при установке Squid при помощи команды:

$ sudo apt-get install squid

Мы обнаружим, что имеем дело с версией 2.5.STABLE12. В репозитарии Gutsy Gibbon уже присутствует версия 2. 6.14. Но это еще не все. Начиная с Festy Fawn (7.04) в репозитарии доступны пакеты и с третьей версией Squid, для установки которой следует вводить:

$ sudo apt-get install squid3

Причем в 7.04, 7.10 и 8.04 версиях тройки разные, но на настройках это никак не отражается, поэтому трогать их не будем.

В FreeBSD ситуация аналогична, хотя и не так запутана. В портах FreeBSD присутствуют обе версии. Для установки 2.6.x (на момент написания 2.6.18) вводим:

# cd /usr/ports/www/squid

Или для 3.0:

# cd /usr/ports/www/squid30

И далее стандартные:

# make install

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

Подключение внешних файлов

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

include /path/to/included/file/squid.acl.config

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

$ sudo squid -k parse

2008/03/31 12:57:52| parseConfigFile: line 1860 unrecognized: ‘include /etc/squid/acl’

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

Напомню, что в некоторых правилах и раньше было разрешено использовать внешние файлы. Например, вместо того чтобы писать:

acl blockfiles url_regex -i ftp \.

exe \.mp3 \.zip \.rar \.avi \.mpeg \.mpg \.iso \.raw \.wav

Удобнее такие файлы указывать во внешнем файле.

acl blockfiles urlpath_regex -i «/etc/squid/blocks.files.acl»

И в blocks.files.acl прописываем регулярные выражения:

$ sudo nano /etc/squid/blocks.files.acl

\.exe$
\.avi$
\.mpg$
\.mpeg$
\.mp3$

И так далее.

Начиная с версии 2.6 Squid стал дополнительно поддерживать несколько типов ACL:

— атрибуты SSL сертификата — user_cert и ca_cert;

— имя пользователя полученное с внешней ACL — ext_user,extuser_regex.

Появление их в конфигурационном файле версии 2.5 вызовет остановку прокси-сервера.

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

Для включения прозрачного проксирования в версиях 2.6 и 3.0 достаточно использовать параметр transparent:

http_port 3128 transparent

Но версия 2.5 его не поддерживает, при попытке его включения получаем критическую ошибку:

$ sudo squid -k parse

FATAL: Bungled squid. conf line 53: http_port 192.168.0.1:3128 transparent

Squid Cache (Version 2.5.STABLE12): Terminated abnormally.

Причем ошибка является фатальной и дальнейшая работа сервера прекращается.

Директива urlgroup используемая в параметре https_ports при помощи которого указывается адрес и порт для SSL подключений через Squid, будет работать только в 2.6. Ни в 2.5 ни в 3.0 ее нет. Хотя за это время она, правда, так и не успела набрать популярности. Но теперь при помощи параметра «

name» можно задать имя порта, для более удобного использования в правилах. Напомню, что сам https_ports, как и поддержка других параметров для работы с SSL появилась, только начиная с версии 2.5, да и то не все. Так в 2.6 добавился ssl_engine и целый набор параметров sslproxy_*.

Списки доступа

Для обработки ACL Squid может задействовать внешнюю программу, описание которой дается в параметре external_acl_type. В версии Squid-2.5.STABLE3 и ранее вместо директивы children, при помощи которой указывается количество процессов выполняющихся для external_acl_type, использовался concurrency. В более поздних версиях 2.5 в целях совместимости поддерживаются оба параметра, но начиная с 2.6 старый параметр уже не поддерживается. Поэтому вместо правила, вроде:

external_acl_type nt_group %LOGIN concurrency=10 /usr/lib/squid/wbinfo_group.pl

Пишем такое:

external_acl_type nt_group %LOGIN children=10 /usr/lib/squid/wbinfo_group.pl

В версии 3.0 убран параметр http_access2, который выполнял те же функции, что и http_access, но правила срабатывали после программы-редиректа. Впрочем, особой популярностью он также не пользовался.

Аутентификация

С версии 2.5 и выше, Squid может предлагать клиенту несколько схем аутентификации (Proxy-Authenticate), а браузер выбирает самую безопасную из поддерживаемых. Для задания параметров аутентификации используется auth_param. В версии 3.0 в схеме basic убрана директива casesensitive отвечающая за регистрозависимость имени пользователя подключающегося к Squid. В большинстве примеров, которые мне приходилось видеть, он был отключен. Поэтому при переносе squid.conf на новую версию прокси-сервера, строку:

auth_param basic casesensitive off

Можно убирать, хотя ее наличие не приводит к фатальной ошибке.

Работа с кэшем

Расположение и размер кэша Squid определяется параметром cache_dir. Причем в squid.conf может быть несколько таких описаний, что очень удобно, так как можно расположить кэш на разных дисках. Версии 2.5 и 2.6 поддерживают дополнительную директиву read-only, указывающую на режим «только чтение» для этого cache_dir. В Squid 3.0 она убрана.

Начиная с 2.6, появился еще один параметр read_ahead_gap, отвечающий за размер упреждающего буфера при передаче данных клиенту от другого сервера. gopher: 1440 0% 1440

refresh_pattern (cgi-bin|\?) 0 0% 0

refresh_pattern . 0 20% 4320

В версиях 2.5 и 2.6 третье правило отсутствует. Но не это главное изменение. В поле options, через пробел указываются дополнительные параметры. В версии 2.x параметров семь, в 3.х добавилось еще два. Большинство из них идут в разрез со стандартами HTTP и их использование может вызвать проблемы при работе с некоторыми серверами. Но обычно серверы корректно с этим справляются, и до каких-либо конфликтов не доходит.

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

override-expire — в нарушение стандарта заставляет игнорировать параметр expire, то есть время актуальности объекта;

override-lastmod — игнорирование времени последней модификации объекта переданное сервером;

reload-into-ims, ignore-reload— изменяет или игнорирует клиентские запросы nocache или reload и принудительно выдает объект, хранящийся в кэше;

ignore-no-cache, ignore-private, ignore-auth — игнорирует заголовки «Pragma: no-cache», «Cache-control: no-cache», «Cache-control: private» и «Cache-control: public» принудительно кэшируя такой объект;

И два параметра появившиеся в третьей версии:

ignore-no-store — игнорирование заголовка «Cache-control: no-store»;

refresh-ims — заставляет проверять наличие новой версии файла при получении от клиента If-Modified-Since.

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

refresh_pattern . 518400 80% 518400 override-expire override-lastmod reload-into-ims ignore-no-cache ignore-private ignore-auth ignore-no-store

Это конечно крайний случай, но администратор в Squid 3.0 получает фактически полный контроль над кэшем.

Изменение в журналах

Также стоит обратить внимание на изменение форматов в logformat, при помощи которой описывается как должен выглядеть файл журнала запросов access.log. Вроде этого:

logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
access_log /var/log/squid/access.log squid

Но например в версии 3.0 появился новый формат «<sS» показывающий размер потока объекта, а убран «st» показывающий общий (Request+Reply) размер включая HTTP заголовки. Кстати параметр logformat впервые появился в версии 2.6. Поэтому при запуске в более раннем Squid, получаем ошибку.

$ sudo squid -k parse

2008/03/31 19:57:55| parseConfigFile: line 3512 unrecognized: ‘logformat Squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt’

Да и вместо access_log в версии 2.5 следует использовать — cache_access_log.

Работа с HTTP заголовками

В 2.4 вместо aninymize_headers, который отвечал за анонимизацию заголовков (в нарушение HTTP) был введен параметр header_access, он и используется в версиях от 2.4 до 2.6. В третьей версии вместо header_access следует применять request_header_access. Ничего нового в дополнительных параметрах придумывать не нужно, достаточно просто добавить префик request_ к имеющимся правилам:

request_header_access From deny all

request_header_access Referer deny all

request_header_access Server deny all

request_header_access User-Agent deny all

request_header_access WWW-Authenticate deny all

request_header_access Link deny all

Так же как и раньше по умолчанию используется «request_header_access Allow allow all» то есть все заголовки разрешены.

Это далеко не все отличия, с которыми можно столкнуться, но я думаю этого достаточно, чтобы понять насколько отличаются разные версии Squid. Совет может быть только один — обязательно проверяйте перед запуском корректность файла squid.conf с помощью команды «squid -k parse«. Успехов.

Настройка прокси сервера Ubuntu, SQUID прозрачный прокси

Программный пакет squid — наиболее широко используемый в настоящее время прокси сервер, реализуемый на Linux. Отличается широким функционалом и достаточной сложностью конфигурации. Основной файл с настройками содержит около 4 000 строк. Конфигурация «squid прозрачный прокси» является популярной администраторской задачей — процесс будет рассмотрен в рамках данного материала.

 

 

Режимы работы SQUID и идентификация

Режимы работы: обычный, анонимный прокси сервер, SQUID прозрачный прокси

Прозрачный прокси (transparent) подразумевает отсутствие необходимости указывать на использование прокси со стороны клиента (в интернет-браузерах на клиентских компьютерах). Трафик со стандартных портов (80, 8080, 443) переадресуется на порт, на котором работает  SQUID.

 

Анонимный прокси сервер не предполагает авторизации. т.е. его может использовать кто-угодно в Интернете, знающий IP сервера, на котором установлено и сконфигурировано ПО.

SQUID поддерживает насколько способов идентификации пользователей — самый распространенный способ — по IP адресам

 

 

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

 

 

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

Настройка же базового функционала довольно проста. Она и будет рассмотрена в рамках данного материала.

 

Устанавливаем необходимые пакеты стандартным способом — из репозитория

apt-get install squid squid-common

 

После установки с дефолтным конфигурационным файлом squid блокирует доступ в Интернет полностью.

 

В этом можно убедиться обратившись к какому-либо ресурсу в Интернете через браузер

Обращаемся к файлу, запускающему squid из консоли с ключом -v, таким образом мы сможем увидеть установленную версию программного пакета, в данном случае 3.2

/usr/sbin/squid -v

 

Делаем бэкап конфигурационного файла

cp /etc/sqid/squid.conf /etc/sqid/squid.conf.backup

 

Приступаем к редактированию файла

mcedit /etc/sqid/squid.conf

 

Находим закомментированную строку #TAG: visible_hostname, копируем visible_hostname и вставляем в тело конфига

#TAG: visible_hostname
visible_hostname remote-tech-support-ProxyServer

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

 

Аналогичным образом поступаем с переменной, определяющей e-mail администратора прокси сервера, он также будет отображаться на странице с ошибкой, клиенты компании смогут направить на него письма с вопросами относительно разумности ограничения доступа к определенному веб-сайту)

#TAG: cache-mgr
cache-mgr [email protected]

 

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

acl localnet 192.168.0.0/24

 

Маску можно задавать непосредственно как это показано строкой выше, можно задавать в виде нулей

Например, при указании следующего адреса к прокси смогут использовать клиенты из всей сети 192. Х.Х.Х

acl localnet 192.0.0.0

 

В конфигурационном файле может быть задано множество правил — например, ограничение на возможность использования сервера по времени:

acl hours time S M T W H F A 2:00-20:00

 

После задания правила — его нужно активировать используя директивы allow или deny

http_access allow network hours

 

 

Включение кэширования в SQUID

Чтобы включить кэширование необходимо найти и раскомментировать следующую строку:

cache_dir ufs /var/spool/squid 100 16 256

100 здесь — размер буфера под кэш в Мб, его можно изменить, максимальное адекватное значение параметра 1/3 объема жесткого диска

 

Кэш будет храниться в /var/spool/squid. Необходимо убедиться в том, что каталог существует и SQUID имеет достаточно прав для того чтобы записывать в файлы, в нем размещающиеся информацию

 

Останавливаем прокси

/etc/init. d/squid stop

 

Даем команду на создание дерева директорий

squid -z

 

Снова запускаем сервис

/etc/init.d/squid start

du -sh /var/spool/squid

Если все сделано правильно вывод последней команды изначально должен показывать приблизительно 70 Мб, в дальнейшем размер каталога с кэшем, естественно, должен увеличиваться

 

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

refresh_pattern -i \.{gif|png|jpg|jpeg|ico}$ 3600    90%    43200

 

Также в конфиге присутствуют настройки безопасных портов — safe ports — портов, с которыми будет производиться работа и  SSL портов (настройка squid для работы по https является несколько более сложной задачей, чем разбираемая сейчас — она будет рассмотрена в рамках другой статьи). Настройки портов можно изменить.

acl SSL_ports port 443

 

Следующая директива запрещает доступ со всех портов, которые не определены в качестве безопасных

http_access deny !Safe_ports

 

Аналогично можно установить обязательность использования защищенного соединения — сейчас в тестовой среде директиву не применяем — здесь они приведена для примера

http_access deny CONNECT !SSL_ports

 

Разрешаем доступ служебному пользователю manager, это сделает возможным, в частности,  для него читать статистику — доступ даем только к localhost

http_access allow localhost manager

http_access deny manager

http_access allow localhost

 

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

#http_access allow localnet

#http_access allow all

 

Раскомментировав forwarded_for off мы спрячем ip адреса клиентов от Интернета — в лог файлах будет фигурировать адрес прокси сервера — используется в анонимайзерах, сейчас оставим знак комментария

#forwarded_for off

 

Ограничим возможность получения трафика с определенных сайтов указав их подряд разделяя имена пробелами

acl block_websites dstdomain . badgirls.com .yahoo.com

 

Активируем правило

http_access deny block_websites

 

 

SQUID прозрачный прокси — настройка

В конфиге зададим IP адрес прокси сервера в локальной сети и порт на котором он работает (по умолчанию 3128). Адрес обязательно указывать только если используется более одного сетевого интерфейса

http_port 192.168.0.9:3128

 

Основная настройка завершена. Чтобы клиенты могли его использовать адрес прокси потребуется указать в браузере каждого клиента. Это может быть неудобно, необходимости выполнять данные действия можно избежать настроив прокси в качестве «прозрачного»

http_port 192.168.0.9:3128 intercept

Добавляем в строку параметр intercept, в squid версии до 3.1 — transparent

 

Конфигурация завершена — перезагружаем squid

/etc/init.d/squid restart

Проверяем статус службы

/etc/init. d/squid status

 

 

Настройка IPTABLES для работы в режиме «SQUID прозрачный прокси»

iptables-save

Просматриваем используемые правила

-A FORWARD -s 192.168.0.0/24 -p tcp -m multiport —ports 110,25,21 -j ACCEPT

-A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

 

Видим, что использование протоколов http, https не разрешается правилами iptables

 

Добавляем правило, позволяющее подключение по проту 3128

iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport —ports 3128 -j ACCEPT

 

Делаем редирект с веб портов 80,8080 3128

iptables -t nat -A PRROUTING -s 192.168.0.0/24 -p tcp -m multiport —dports 80,8080 -j REDIRECT —to-ports 3128

 

Сохраняем конфигурацию

iptables-save

Заходим в браузер и проверяем — должен появиться доступ по http (не по https) ко всем сайтам, кроме запрещенных ранее конфигурацией.

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

Прозрачный Squid

главная —

Теги: Настройка прокси

Зачем нужен прозрачный Squid

Для начала представим, что у нас есть обычная сеть, выходящая в интернет через один шлюз (прокси-сервер Squid установлен здесь же). Предположим, IP-адрес шлюза 192.168.1.1. Все остальные компьютеры в сети получают настройки IP по DHCP. Компьютеры в сети разные, Windows XP/7, Ubuntu, да моло ли еще какие. За всеми не углядишь. Но мы должны считать трафик, ускоряя при этом доступ в интерент, должны контролировать (хотя бы от «дурака») доступ в интернет и пр. Squid обладает широкими возможностями по логированию, ограничению доступа и пр. Поэтому нам нужно, чтобы все компьютеры в сети не могли миновать нашего прокси-сервера Squid. Поэтому нам надо в любом случае направить (завернуть, пробросить) запрос клиентских компьютеров только через прокси-сервер Squid.

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

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

Переадресация портов в FreeBSD

Если на нашем шлюзе установлена FreeBSD и брандмауэр по-умолчанию — IPFW, то для выполнения этой задачи мы должны на шлюзе установить переадресацию (проброс) портов:

# Redirect to local proxy
/sbin/ipfw add 0170 fwd 127. 0.0.1,3128 tcp from 192.168.1.0/24 to any 80

где:

  • 0170 — номер правила (в вашем случае может быть любой).
  • fwd 127.0.0.1,3128 — куда будем направлять пакеты, — в нашем случае нашему любимому Squid, запущенному на порту 3128 на шлюзе, — …
  • from 192.168.1.0/24 — … отправленные компьютерами локальной сети…
  • to any 80 — … на какой-либо сайт в интернете

Теперь внимание! Это правило нужно добавить ДО того, как правила NAT (Network Address Translation) получат этот запрос. Объясню немного неакадемично: что делает NAT? В нашем случае NAT изменяет адрес источника (заменяет локальный IP клиента на внешний IP шлюза и запоминает, от какого внутреннего клиента был запрос. Для того, чтобы Squid обработал запрос от клиента, ему не нужно ничего преобразовывать — он и сам с этим справится. Поэтому Squid должен получить пакет в первозданном виде и сам решить, что делать дальше.

К тому же NAT и Squid — все-таки разные вещи, и пакет, адресованный, скажем к 2.3.4.5:80, не содержит информации, как попасть в Squid (на порт 3128 шлюза). И пакет будет обрабатываться только средствами NAT. Squid пакет так и не увидит. Поэтому наша задача — просто отдать Squid-у тот пакет, который отправил броузер пользователя. Объясню на примере части конфига ipfw:


cmd="ipfw -q add"
$skip="skipto 5000"
pif="xl1" #внешний интерфейс 
...

# Redirect to local proxy
$cmd 0170 fwd 127.0.0.1,3128 tcp from 192.168.1.0/24 to any 80

# NAT
$cmd 0200 divert natd ip from any to any in via $pif

# Allow keep-state statement.
$cmd 0201 check-state

# POP3/POP3S
$cmd 0325 $skip tcp from any to any 110 out via $pif setup keep-state
$cmd 0326 $skip tcp from any to any 995 out via $pif setup keep-state

# WWW (HTTP/HTTPS/..)
$cmd 0350 $skip tcp from any to any 80 out via $pif setup keep-state
$cmd 0352 $skip tcp from any to any 443 out via $pif setup keep-state

# This is skipto location for outbound stateful rules
$cmd 5000 divert natd ip from any to any out via $pif

. ..

В конфиге выше запрос открыть сайт сначала обрабатывается правилом 0170, которое заворачивает запрос в Squid. Squid (как и любая другая программа) также выполняет требования брандмауэра — только для него правило 0170 не действует, а вот правило 0350 разрешает Squid отправить запрос в интернет. Для того, чтобы выходить в интернет без Squid, необходимо закоментировать правило 0170. В этом случае Squid не получит ничего, а все запросы броузеров из локальной сети будут обрабатываться правилом 0350.

Переадресация портов в Linux

Если на нашем шлюзе установлена Linux и iptables, то вышеуказанная команда будет выглядеть так:

iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j REDIRECT —to-port 3128

где eth0 — внутренний интерфейс.

В остальном смысл переадресаций и пр. аналогичен тому, как это объяснялось для ipfw. Разнятся только правила постороения конфигурационных файлов ipfw и iptables. Пример правил iptables можно изучить здесь.

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

Прозрачный Squid в squid.conf

Теперь дело осталось за малым — настроить Squid в режим невидимки, т.е. принимать автоматически перенаправленные пакеты и обрабатывать их. В разных версиях Squid за это отвечали разные команды. Настройка Squid версии 2.6.*  выглядит так:

http_port 127.0.0.1:3128 transparent # Squid работает в прозрачном режиме

Внимательно просмотрите конфигурационный файл squid.conf на предмет дубликатов директив — я потратил два часа времени, обратился на форум за помощью с «нестандартной проблемой», в то время как просто не обратил внимание на то, что первой строкой у меня включался обычный режим работы Squid:

http_port 3128 # Squid работает в обычном режиме

Практически все. Перезапустите Squid, примените правила брандмауэра с добавленной командой перенаправления портов — теперь любой компьютер локальной сети, выходя через наш шлюз в интернет, не сможет миновать нашего ставшего прозрачным для всех Squid. А теперь попробуйте настроить прокси на каком-нибудь компьютере — компьютер не должен получить выход в интернет. Вроде все. Если есть вопросы или советы — комментарии приветствуются, особенно учитывая, что настройка прозрачного Squid и проброс портов вообще «больная» тема на форумах.

Плюсы и минусы

Из плюсов можно отметить абсолютную уверенность, что все запросы на 80 порт (стандартный для веб) будут обработаны Squid-ом. Соответственно, будут логи, статистика для шефа и отсутствие необходимости бегать и руками все настраивать.

Из минусов можно отметить:

  • невозможность (по-крайней мере, простым способом) авторизовать пользователей для доступа в интернет;
  • если вдруг «упадет» Squid, то доступ к сайтам прекратится. Поэтому админу нужно или быть уверенным, что все будет ОК, или иметь возможность удаленно изменить конфиг брандмауэра, или написать скрипт, автоматом проверяющего, висит ли Squid на порту 3128, и если нет, то запускающего его.

Настройка Squid в прозрачном режиме завершена. Вот теперь — все.

Авторизуйтесь для добавления комментариев!

Настройка Squid 3 в качестве прозрачного прокси в FreeBSD

Настраиваем Squid в качестве прозрачного прокси-сервера для офисной сети. Предполагается, что маршрутизация на сервере настроена, и доступ к сайтам из внутренней сети уже работает. Используем прокси-сервер для расшифровки веб-трафика, ограничения доступа к сайтам и фильтрации медиа-контента.

Настройка ядра

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

В ядре GENERIC опция перенаправления по умолчанию отключена.Проверяем включено ли перенаправление пакетов командой:

grep ipfw /var/run/dmesg.boot

Получаем следующий результат:

ipfw2 (+ipv6) initialized, divert loadable, nat loadable, rule-based forwarding disabled, default to deny, logging disabled

Если видим: «rule-based forwarding disabled«, форвардинг отключен, необходимо пересобрать ядро. Если сообщение отсутствует, значит IPFW не настроен.

Получаем идентификатор ядра:

uname -i

Если ранее ядро не изменялось, в результате получаем:

GENERIC

Создаем конфиг ядра IPFORWARD, на основе GENERIC

echo include GENERIC >/usr/src/sys/i386/conf/IPFORWARD
echo ident IPFORWARD >>/usr/src/sys/i386/conf/IPFORWARD

Включаем перенаправление пакетов:

echo options IPFIREWALL >>/usr/src/sys/i386/conf/IPFORWARD
echo options IPFIREWALL_FORWARD >>/usr/src/sys/i386/conf/IPFORWARD

Проверяем полученный конфиг:

cat /usr/src/sys/i386/conf/IPFORWARD

В результате получаем:

include GENERIC
ident IPFORWARD
options IPFIREWALL
options IPFIREWALL_FORWARD

Переходим в папку с исходниками системы:

cd /usr/src

Если файлы в /usr/src отсутствуют, необходимо установить исходники, соответствующие вашей версии системы.

Собираем и устанавливаем ядро, используя созданный конфиг:

make kernel KERNCONF=IPFORWARD

Перезагружаем систему:

shutdown -r now

Проверяем идентификатор ядра:

uname -i

В случае успешной установки ядра, в ответ получаем:

IPFORWARD

Проверяем статус IPFW:

grep ipfw /var/run/dmesg.boot

В случае успеха получаем:

ipfw2 (+ipv6) initialized, divert loadable, nat loadable, rule-based forwarding enabled, default to deny, logging disabled

Установка Squid

Обновляем коллекцию портов:

portsnap fetch && portsnap update || portsnap extract

Получаем список доступных версий Squid:

cd /usr/ports/www && echo squid*

Настраиваем порт:

cd /usr/ports/www/squid32
make config

В параметрах сборки включаем прозрачное проксирование для используемого брандмауэра и поддержку больших файлов:

[*] LARGEFILE      Support large (>2GB) cache and log files
. ..
[ ] TP_IPF         Enable transparent proxying with IPFilter
[*] TP_IPFW        Enable transparent proxying with IPFW
[ ] TP_PF          Enable transparent proxying with PF

Устанавливаем порт:

make install clean

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

Настройка Squid

Сохраняем файл конфигурации, установленный по умолчанию:

mv /usr/local/etc/squid/squid.conf /usr/local/etc/squid/squid.conf.default

Создаем новый файл конфигурации:

ee /usr/local/etc/squid/squid.conf

Задаем параметры:

#Адрес и порт для входящих подключений
#Заданный порт используется при прозрачном проксировании для 
#передачи изображений на страницах ошибок и протоколом управления кэшем
http_port 3128
#Локальный интерфейс, для трафика, перенаправленного брандмауэром
http_port 127.0.0.1:3129 intercept

#Время ожидания установки TCP соединения с сервером
#По умолчанию 1 минута, если сервер не отвечает, выполняется 3 попытки установить соединение, итого время до появления ошибки 3 минуты
#Сократим таймаут до 20 секунд
connect_timeout 20 second

#При завершении работы ожидать закрытия клиентских подключений, так заявлено в документации
#По факту ждет независимо от наличия клиентских подключений
#По умолчанию - 30 секунд, сократим время ожидания до 1
shutdown_lifetime 1 seconds

#Кэш: формат, размещение, размер в мегабайтах, число папок первой и второй вложенности
#Указанный размер кэша не учитывает издержки файловой системы и должен быть примерно на 20% меньше доступного дискового пространства
#Директиву cache_dir, можно указать несколько раз, выделив под кэш дополнительные разделы
cache_dir ufs /usr/local/squid/cache 3000 16 256

#Не кэшировать файлы больше заданного размера
#По умолчанию 4Мб
maximum_object_size 320 MB

#Продолжить загрузку при отключении клиента, если осталось загрузить менее указанного объема данных
#Позволяет сохранить объект в кэше при отмене загрузки клиентом
#Значение 0 для quick_abort_min и quick_abort_max отменяют докачку
#Значение -1 включает полную закачку объекта, не зависимо от оставшегося объема, повышает нагрузку на канал
#По умолчанию 16 Кб
quick_abort_min 5 MB

#Размер кэша в оперативной памяти
#По умолчанию 256Мб
#cache_mem 256 MB

#Максимальный размер объекта, сохраняемого в оперативной памяти
#Объекты больше заданного размера в памяти не сохраняются
#maximum_object_size_in_memory 512 KB

#Отключить кеширование
#cache deny all

#Путь сохранения дампа аварийного завершения
coredump_dir /usr/local/squid/cache

#Путь и формат лог-файла
access_log daemon:/usr/local/squid/log/access. log squid

#Протоколировать параметры запросов
#По умолчанию в целях обеспечения приватности в логе не сохраняются параметры CGI-скриптов
#strip_query_terms off

#Протоколировать http-заголовки
log_mime_hdrs on

#Не отправлять заголовок X-Forwarded-For содержащий внутренний IP-адрес клиента
#forwarded_for transparent

#Не отправлять заголовок Via с именем и версией прокси-сервера
#via off

#Email администратора, для отправки уведомлений об отказе кэша
#На практике, ни одного уведомления не видел
#Адрес также отображается на страницах ошибок
cache_mgr [email protected]

#Адрес сервера, отображаемый на страницах ошибок
#По умолчанию используется функция gethostname(), которая при http_port 127.0.0.1, вернет localhost
#visible_hostname proxy.localnet.local

#
# Определяем списки контроля безопасности
#

#IP-адрес, с которого разрешен доступ к управлению кэшем
#acl CacheManagerIP src 192. 168.0.2

#Обслуживаемая прокси-сервером сеть
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src fc00::/7       # RFC 4193 local private network range
#acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

#Метод CONNECT, используется для SSL-соединений
acl CONNECT method CONNECT

#Путь к списку IP-адресов пользователей, для которых не действует фильтр сайтов и контента
#acl AdminsIP src "/usr/local/etc/squid/AccessLists/AdminsIP.txt"

#Путь к списку запрещенных сайтов
#acl RestrictedDomains dstdomain "/usr/local/etc/squid/AccessLists/RestrictedDomains.txt"

#Путь к списку доменов с рекламой
#acl AdDomains dstdomain "/usr/local/etc/squid/AccessLists/AdDomains.txt"

#Путь к списку доменов с рекламой для фильтрации по ответу
#Блокируются изображения и анимация, допускается переход по ссылкам
#acl AdDomains_ReplyFilter dstdomain "/usr/local/etc/squid/AccessLists/AdDomains_Content. http://[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/.*

#
# Задаем права доступа
#

#Разрешить локальное управление кэшем
http_access allow manager localhost
#Разрешить удаленное управление кэшем
#http_access allow manager CacheManagerIP
http_access deny manager

#Пароли для различных действий протокола управления кэшем
#Значение disable all отключает управление кэшем
#cachemgr_passwd disable all

#Запретить метод CONNECT
#Проксирование SSL-соединений в прозрачном режиме невозможно
http_access deny CONNECT

#Запретить доступ к локальным ресурсам сервера через прокси
http_access deny to_localhost

#Первичный фильтр рекламы
#Блокируется весь контент с заданных доменов
#http_access deny AdDomains

#Страница ошибки доступа для рекламы
#Создать командой: echo "[AD]" > /usr/local/etc/squid/ERR_ADV_DENIED
#deny_info ../../ERR_ADV_DENIED AdDomains

#Не ограничивать доступ администраторам
#http_access allow AdminsIP

#Блокировать запрещенные сайты
#http_access deny RestrictedDomains

#Запретить доступ к сайтам по IP-адресу
#http_access deny UrlIP

#Разрешить доступ из локальной сети
http_access allow localnet

#Блокировать все, что не разрешено
http_access deny all

#
#Фильтрация контента, на этапе получения ответа от сервера
#

#Фильтр рекламного контента: графика, анимация, JavaScript, клики по ссылкам продолжают работать
#http_reply_access deny AdDomains_ReplyFilter AdMimeTypes

#Не ограничивать доступ администраторам
#http_reply_access allow AdminsIP

#Блокировать загрузку аудио/видео контента
#http_reply_access deny MimeAudioVideo

#Разрешить весь остальной контент
http_reply_access allow all

#Время устаревания кэшируемого контента в минутах, если явно не задано сервером
#Поля: шаблон соответствия URL, минимальное время в минутах, процент для расчета времени устаревания объекта, максимальное время в минутах
#Если повторный запрос приходит до наступления минимального времени, объект считается актуальным, запрос к серверу не выполняется
#Расчет времени жизни производится по формуле: (ВремяПолучения-ВремяСоздания)*Процент
#Чем старее объект, тем дольше он содержится в кэше, но не дольше заданного максимального времени
#Подробности: http://etutorials. ftp:           1440    20%     10080
#Нулевое время жизни для динамического контента
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
#Время жизни по умолчанию
refresh_pattern .               0       20%     4320

Создаем папку для списков контроля доступа

mkdir /usr/local/etc/squid/AccessLists

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

Список IP-адресов с неограниченным доступом:

ee /usr/local/etc/squid/AccessLists/AdminsIP.txt

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

ee /usr/local/etc/squid/AccessLists/RestrictedDomains.txt

Фильтр рекламы:

ee /usr/local/etc/squid/AccessLists/AdDomains.txt

Фильтр рекламы с учетом типа контента:

ee /usr/local/etc/squid/AccessLists/AdDomains_Content. txt

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

Некоторые сайты используют протокол https, фильтровать который при прозрачном проксировании невозможно. Для ограничения доступа к таким сайтам придется использовать брандмауэр либо DNS-сервер, либо проксировать https традиционным, непрозрачным, способом.

Создаем папку для кэша, задаем права доступа:

mkdir -p /usr/local/squid/cache && chown root:squid /usr/local/squid/cache && chmod 770 /usr/local/squid/cache

Создаем структуру кэша:

/usr/local/sbin/squid -z

Создаем папку для логов доступа, задаем права доступа:

mkdir /usr/local/squid/log && chown root:squid /usr/local/squid/log && chmod 770 /usr/local/squid/log

Лог доступа за месяц может занимать достаточно большой объем, по этой причине в рассматриваемой конфигурации лог был размещен в /usr. Если свободного места в /var достаточно, лог доступа можно оставить в  /var/log/squid.

Отображение местного времени на страницах ошибок Squid

По умолчанию на страницах ошибок Squid отображает время по Гринвичу, для отображения местного времени необходимо скорректировать шаблоны ошибок. Параметр шаблона %T указывает мировое время, %t — местное.

Копируем шаблоны ошибок в папку erros.local:

mkdir -p /usr/local/etc/squid/errors.local/ru
cp /usr/local/etc/squid/errors/ru/* /usr/local/etc/squid/errors.local/ru

Заменяем общемировое время (%T), на местное (%t):

sed -i .bak "s/%T/%t/g" /usr/local/etc/squid/errors.local/ru/* && rm /usr/local/etc/squid/errors.local/ru/*.bak

Задаем путь к измененным шаблонам ошибок в squid.conf:

printf "\n\n#Отображение местного времени на страницах ошибок\nerror_directory /usr/local/etc/squid/errors.local/ru\n" >> /usr/local/etc/squid/squid.conf

Запуск Squid

Включаем Squid в rc. conf:

printf '\nsquid_enable=\"YES\"\n' >>/etc/rc.conf

Запускаем демон:

/usr/local/etc/rc.d/squid start

Проверяем, стартанул ли демон:

ps -ax | grep squid

Проверяем, слушается ли сокет:

netstat -an | grep 3128

Проверяем лог:

cat /var/log/squid/cache.log

В случае успешного старта вывод будет примерно следующим:

2013/03/03 21:29:54 kid1| Starting Squid Cache version 3.2.7 for i386-portbld-freebsd9.1...
2013/03/03 21:29:54 kid1| Process ID 40625
2013/03/03 21:29:54 kid1| Process Roles: worker
2013/03/03 21:29:54 kid1| With 7149 file descriptors available
2013/03/03 21:29:54 kid1| Initializing IP Cache...
2013/03/03 21:29:54 kid1| DNS Socket created at [::], FD 7
2013/03/03 21:29:54 kid1| DNS Socket created at 0.0.0.0, FD 8
2013/03/03 21:29:54 kid1| Adding nameserver 127.0.0.1 from /etc/resolv.conf
2013/03/03 21:29:54 kid1| Logfile: opening log daemon:/usr/local/squid/log/access. log
2013/03/03 21:29:54 kid1| Logfile Daemon: opening log /usr/local/squid/log/access.log
2013/03/03 21:29:54 kid1| WARNING: no_suid: setuid(0): (1) Operation not permitted
2013/03/03 21:29:54 kid1| WARNING: no_suid: setuid(0): (1) Operation not permitted
2013/03/03 21:29:55 kid1| Unlinkd pipe opened on FD 14
2013/03/03 21:29:55 kid1| Store logging disabled
2013/03/03 21:29:55 kid1| Swap maxSize 3072000 + 262144 KB, estimated 256472 objects
2013/03/03 21:29:55 kid1| Target number of buckets: 12823
2013/03/03 21:29:55 kid1| Using 16384 Store buckets
2013/03/03 21:29:55 kid1| Max Mem  size: 262144 KB
2013/03/03 21:29:55 kid1| Max Swap size: 3072000 KB
2013/03/03 21:29:55 kid1| Rebuilding storage in /usr/local/squid/cache (clean log)
2013/03/03 21:29:55 kid1| Using Least Load store dir selection
2013/03/03 21:29:55 kid1| Set Current Directory to /usr/local/squid/cache
2013/03/03 21:29:55 kid1| Loaded Icons.
2013/03/03 21:29:55 kid1| HTCP Disabled. 
2013/03/03 21:29:55 kid1| Squid plugin modules loaded: 0
2013/03/03 21:29:55 kid1| Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 17 flags=9
2013/03/03 21:29:55 kid1| Accepting NAT intercepted HTTP Socket connections at local=127.0.0.1:3128 remote=[::] FD 18 flags=41
2013/03/03 21:29:55 kid1| Done reading /usr/local/squid/cache swaplog (0 entries)
2013/03/03 21:29:55 kid1| Store rebuilding is 0.00% complete
2013/03/03 21:29:55 kid1| Finished rebuilding storage from disk.
2013/03/03 21:29:55 kid1|         0 Entries scanned
2013/03/03 21:29:55 kid1|         0 Invalid entries.
2013/03/03 21:29:55 kid1|         0 With invalid flags.
2013/03/03 21:29:55 kid1|         0 Objects loaded.
2013/03/03 21:29:55 kid1|         0 Objects expired.
2013/03/03 21:29:55 kid1|         0 Objects cancelled.
2013/03/03 21:29:55 kid1|         0 Duplicate URLs purged.
2013/03/03 21:29:55 kid1|         0 Swapfile clashes avoided.
2013/03/03 21:29:55 kid1|   Took 0.04 seconds (  0.00 objects/sec).
2013/03/03 21:29:55 kid1| Beginning Validation Procedure
2013/03/03 21:29:55 kid1|   Completed Validation Procedure
2013/03/03 21:29:55 kid1|   Validated 0 Entries
2013/03/03 21:29:55 kid1|   store_swap_size = 0.00 KB
2013/03/03 21:29:56 kid1| storeLateRelease: released 0 objects

По поводу «WARNING: no_suid: setuid(0): (1) Operation not permitted», отслеживаем баг-репорт: http://bugs.squid-cache.org/show_bug.cgi?id=3785.

В брандмауэре разрешаем исходящие подключения для Squid (порядковый номер правила и внешний интерфейс необходимо задать свой):

ipfw add 110 allow tcp from me to any out via em0 keep-state uid squid

Перенаправляем веб-трафик с тестового компьютера в Squid:

ipfw add 120 fwd 127.0.0.1,3129 tcp from 192.168.0.2 to any 80-83,8080-8088 out via em0

Инициируем веб-трафик с тестового компьютера и проверяем лог доступа:

cat /usr/local/squid/log/access.log

В случае проблем проверяем, работает ли правило брандмауэра:

ipfw show

Счетчик для правила перенаправления не должен быть нулевым.

Если при тестировании проблем не выявлено, заворачиваем в прокси всю подсеть:

ipfw add 120 fwd 127.0.0.1,3129 tcp from 192.168.0.0/16 to any 80-83,8080-8088 out via em0

Протокол управления кэшем

Если управление кэшем не было запрещено в конфиге, используем squidclient для получения статистики и оперативного управления.

Получить общую статистику сервера:

squidclient -h 127.0.0.1 cache_object://localhost/info

Получить список доступных команд:

squidclient -h 127.0.0.1 cache_object://localhost/menu

Управление кэшем возможно также из браузера. Статистика сервера доступна по адресу: http://адрес.прокси.сервера:3128/squid-internal-mgr/info, список команд: http://адрес.прокси.сервера:3128/squid-internal-mgr/menu.

Ротация лога доступа Squid

Настраиваем ежемесячную ротацию и архивацию access.log

Создаем скрипт RotateAccessLog:

ee /usr/local/etc/squid/RotateAccessLog

Со следующим содержимым:

#!/bin/sh

#Задаем число хранимых архивов
ArcCount=12

#Предварительно запускаем парсер LightSquid
#/usr/local/www/lightsquid/lightparser.pl today

#Выполнить ротацию, выход при ошибке.
/usr/local/sbin/squid -k rotate || return 1

#Ротация производится в фоновом режиме, ждем завершения 10 секунд.
sleep 10

#Удаляем старый cache.log.1, новый сохраняется с именем cache.log.0.
rm /var/log/squid/cache.log.1 2>/dev/null

#Удаляем старый store.log.1
rm /var/log/squid/store.log.1 2>/dev/null

i=$(($ArcCount-1))
#Переходим в папку с логами, выход, если папка не существует.
cd /usr/local/squid/log || return 1

#Удаляем самый старый архив.
rm access.log.$i.bz2 2>/dev/null

#Выполняем ротацию
while [ $i -gt 0 ]
do
    mv access.log.$(($i-1)).bz2 access.log.$i.bz2 2>/dev/null
    i=$(($i-1))
done

#Архивируем лог доступа.
bzip2 access.log.0

Разрешаем запуск скрипта:

chmod 700 /usr/local/etc/squid/RotateAccessLog

Выполняем тестовый запуск:

/usr/local/etc/squid/RotateAccessLog

Проверяем, создан ли архив:

ls -l /usr/local/squid/log/*.bz2

Настраиваем cron на ежемесячный запуск первого числа в полночь:

printf '\n0\t0\t1\t*\t*\troot\t/usr/local/etc/squid/RotateAccessLog\n' >>/etc/crontab && cat /etc/crontab

Автоматический перезапуск Squid при отказе

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

Создаем сценарий AutoRestart:

ee /usr/local/etc/squid/AutoRestart

Со следующим содержимым:

#!/bin/sh

#Точка монтирования файловой системы
FS=/usr

#Путь к кэшу
CacheDir=/usr/local/squid/cache

#Проверяем, загружен ли Squid, выходим в случае успеха
/usr/local/sbin/squid -k check >/dev/null 2>&1 && return

#При нехватке дискового пространства, удаляем кэш
#Если обнаружено сообщение filesystem full в журнале messages
if grep $fs:\ filesystem\ full /var/log/messages; then
 #Уведомляем об ошибке
 echo Disk full detected, cleanup

 #Удаляем кэш с предварительной проверкой, что заданный путь указывает именно на кэш
 test -f $CacheDir/swap.state && rm -R $CacheDir/*

 #Создаем структуру кэша
 /usr/local/sbin/squid -z
fi

#Запускаем демон
/usr/local/etc/rc.d/squid start

Разрешаем запуск скрипта:

chmod 700 /usr/local/etc/squid/AutoRestart

Выполняем тестовый запуск:

/usr/local/etc/rc.d/squid stop
/usr/local/etc/squid/AutoRestart

Запускаем через cron каждые 15 минут:

printf '\n*/15\t*\t*\t*\t*\troot\t/usr/local/etc/squid/AutoRestart\n' >>/etc/crontab && cat /etc/crontab

В случае проблем на почту root’у будет отправлено уведомление.

Анализ логов Squid

LightSquid — анализатор лога доступа, написанный на Perl. Каждые полчаса сканирует лог доступа и формирует отчеты по трафику для каждого пользователя (IP-адреса) за день, за месяц, за год. Фиксирует загрузку больших файлов, почасовую активность пользователя, строит рейтинг сайтов по объему потребленного трафика.  Для просмотра отчетов потребуется веб-сервер. Инструкции по настройке ищем здесь.

Список других анализаторов доступен на сайте проекта: http://www.squid-cache.org/Misc/log-analysis.html

Решение проблем

Если в cache.log постоянно пишутся предупреждения:

WARNING: transparent proxying not supported

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


Если получаем следующие предупреждения:

WARNING: (A) '192.168.0.0/16' is a subnetwork of (B) '::/0'
WARNING: because of this '192.168.0.0/16' is ignored to keep splay tree searching predictable
WARNING: You should probably remove '192.168.0.0/16' from the ACL named 'all'

Обнаружена декларация acl all. В третьей версии список доступа all создается сквидом автоматически, его декларация не требуется. Удалите или переименуйте acl all.

Дополнительная информация

Список всех параметров конфигурации:  /usr/local/etc/squid/squid.\(#\|$\)’ > /etc/squid/squid.conf

и приступаем к настройке конфига под свои нужды
$nano /etc/squid/squid.conf

у меня вышел, вот такой замечательный конфиг

#===========SQUID==============
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl office src 192.168.0.0/16
acl office2 src 91.227.181.10

################# PORTS ##################
# Открываем нужные порты
acl SSL_ports port 443         # https
acl SSL_ports port 563         # snews
#acl SSL_ports port 873         # rsync
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 Safe_ports port 631                # cups
#acl Safe_ports port 873                # rsync
#acl Safe_ports port 901                # SWAT
# разрешаем соединение типа CONNECT для нужных протоколов
#acl purge method PURGE
#acl CONNECT method CONNECT
#http_access allow purge localhost
#http_access deny purge
#http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports
#icp_access allow localnet
#icp_access deny all
############### NETWORK OPTIONS #############
# настройка порта для прокси
http_port 3128
##### OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM #####
# CGI-скрипты
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.Apache

############ ERROR PAGE OPTIONS ###############
# Отсюда берем файлы стандартных сообщений об ошибках
error_directory /usr/share/squid/errors/Ukrainian-1251
# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то всеравно продолжить скачивание
quick_abort_pct 60
# Время жизни запросов завершившихся ошибкой «connection refused» «404 Not Found»
negative_ttl 1 minutes
############### ACCESS CONTROLL############
# и назначаем права доступа
acl zapret dstdomain da.ru
acl zapret1 dstdomain «/etc/squid/zapret.conf»
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access deny zapret
http_access deny zapret1
http_access allow office
http_access allow office2

http_access deny all
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
# Место откуда берутся страницы с ошибками
coredump_dir /var/spool/squid
# Поддержка нестандартных Http запросов
half_closed_clients on
# Включать ли IP адрес клиента в заголовок Http запроса
forwarded_for on
# Вкл. сбор статистики по каждому клиенту
client_db on

#============================END==========================================

и создаем файл
nanо /etc/squid/zapret.conf
www.vk.com
vk.com

Сохраняем файл и перезапускаем сквид:
$sudo /etc/init.d/squid restart

Вот собственно и все, это не самый простой конфиг Squid, но простиникий, чуть ниже расскажу что еще можно прикрутить.

 

Режим скорость интернета  
После строчек с refresh_pattern начинаем настраивать пулы (по сути ограничения на ранее созданные группы сетей; помните acl?):
#указываем количество правил
delay_pools 2
#регистрируем 2 пула 3 класса
delay_class 1 3
delay_class 2 3
#указываем кто есть кто и указываем доступ
delay_access 1 allow office
delay_access 1 deny all
delay_access 2 allow office2
delay_access 2 deny all
#указываем параметры скорости для первого пула (нет ограничений)
delay_parameters 1 -1/-1 -1/-1 -1/-1
#второго пула-режем скорость примерно до 10 кбайт/с после первого Мб
delay_parameters 2 -1/-1 -1/-1 10000/1024000

Настройте протокол WCCP в Squid — Web Filter для вашей сети

Для включения протокола WCCP в Squid нам необходимо включить режим прозрачного прокси Cisco WCCP redirect . Для этого перейдите к Squid Proxy / Settings / Network и выберите поле со списком, как показано на следующем снимке экрана. Введите IP-адрес маршрутизатора WCCP как 192.168.6.1 и укажите произвольный пароль, например cisco .

Примечание

Были некоторые отчеты, что WCCP не работает, если заданный пароль слишком сложен.Рекомендуется сначала попробовать использовать простой пароль по умолчанию, например cisco , а после того, как вы убедитесь, что все работает должным образом, используйте вместо него более сложный пароль.

Щелкните Сохранить изменения внизу страницы, а затем Сохранить и перезапустить в правом верхнем углу веб-интерфейса. После перезапуска Squid откройте Squid Proxy / Settings / Network и проверьте, нормально ли выглядит сгенерированная конфигурация.

Веб-интерфейс внесет следующие изменения в конфигурацию Squid.

  • Сгенерированный файл /opt/websafety/etc/squid/wccp.conf будет содержать IP-адрес межсетевого экрана Cisco и директивы WCCP для фильтрации протоколов HTTP и HTTPS. Если значения по умолчанию вам не подходят или вам нужно что-то дополнительно добавить в сгенерированный файл, отредактируйте шаблон по адресу /opt/websafety-ui/var/console/squid/templates/squid/conf/wccp.conf .

     wccp2_router 192.168.6.1
    wccp2_rebuild_wait on
    wccp2_forwarding_method gre
    wccp2_return_method gre
    wccp2_assignment_method хеш
    wccp2_service стандартный 0 пароль = cisco
    wccp2_service динамический пароль 70 = cisco
    wccp2_service_info 70 протокол = tcp flags = dst_ip_hash приоритет = 240 портов = 443
    wccp2_weight 10000
     
  • Сгенерированный файл / opt / websafety / etc / squid / network.conf будет скорректирован, чтобы содержать определения портов для явного прокси и перенаправленных портов HTTP и HTTPS с помощью WCCP. Обратите внимание, перехваченные https_port и http_port разные!

     http_port 3128 ssl-bump generate-host-certificate = on dynamic_cert_mem_cache_size = 4MB cert = / opt / websafety / etc / myca.pem
    http_port 3126 перехват
    https_port 3127 перехватить ssl-bump generate-host-Certific = on dynamic_cert_mem_cache_size = 4MB cert = / opt / websafety / etc / myca.pem
     

Важно

НЕОБХОДИМО нажать Apply Settings / Save and Restart в правом верхнем углу пользовательского интерфейса хотя бы один раз, прежде чем перейти к следующему шагу.Невыполнение этого требования может привести к тому, что идентификатор маршрутизатора wccp еще не определен выходными данными в консоли Cisco (см. Снимок экрана ниже). Это происходит потому, что Squid необходимо перезапустить с новой конфигурацией, относящейся к WCCP, чтобы зарегистрироваться в Cisco ASA, который, в свою очередь, сгенерирует требуемый идентификатор маршрутизатора.

кальмар [Wiki ubuntu-fr]


Squid est un serveur mandataire, en anglais un proxy, entièrement libre et très performance. Squid поддерживает протоколы FTP, , HTTP, HTTPS, и Gopher.Самый общий элемент, используемый в некоторых предприятиях и университетах для функций фильтрации URL или тампона. Les Pages Internet sont stockées localement ce qui évite d’aller les recharger plusieurs fois et permet d’économiser la bande passante Internet.

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

Конфигурация Squid находится в / etc / squid / squid.конф . Pour toute configuration, éditez donc ce fichier.

Pour l’activer après une fausse манипуляции:

 sudo service squid start 

Налейте l’arrêter:

 sudo service squid stop 

Залейте устройство перенастройки (по месту остановки и начала или перезапуска до наступления темпа): sudo squid -k перенастроить. «Service Squid Reload» — это уникальное решение для конфигурации зарядного устройства.

Voici quelques модификации утилиты:

Autoriser les utilisateurs à utiliser le serveur mandataire

Rechercher la ligne commencant par «acl localhost src», et rajouter, après cette ligne, la ligne suivante:

 acl allowedips src X.Y.Z.T / N 

(où X.Y.Z.T / N представляет собой сообщение с авторизованными IP-адресами с предоставлением мандатного сервера, например: 192.168.0.1/255.255.255.0 для локального поиска IP-адресов 192.168.0.1 на 192.168.0.254)

Rechercher ensuite la ligne «http_access allow localhost» et rajouter, après cette ligne, la ligne suivante:

 http_access разрешить разрешено 

Indiquer le nom de la machine

dans la partie ТЕГ: visible_hostname , указатель имени машины по запросу:

 visible_hostname 

Не включает адрес IP в запросах HTTP

Pour ne pas inclure l’adresse IP or le nom du système dans les Requêtes HTTP, dans la partie TAG: forwarded_for , décommenter и модификатор la ligne Согласно запросу:

 forwarded_for выкл 

Messages d’erreur en français

В партии TAG: error_directory , décommenter et modifier la ligne com suit:

 каталог_ошибок / usr / share / squid / errors / французский 

Права на использование кальмара

L’utilisateur proxy de Squid doit appartenir au groupe root pour benéficier des droits nécessaires sur les fichiers de journalisation de Squid, afin de rendre l’authentification fonctionnelle:

Changer le propriétaire des fichiers de journalisation de Squid:

 sudo chown -R прокси: root / var / log / squid 
 sudo chown -R прокси: root / var / run / samba / winbindd_privileged 

Смена группы тампонов кальмаров:

Эдитер ле фишье / etc / squid / squid.conf,

В партии TAG: cache_effective_group , décommenter la ligne et y mettre le groupe root :

 cache_effective_group корень 

Редемаррер Кальмар:

 sudo /etc/init.d/squid перезапуск 

Модификация тампона Squid

Mise en tampon de page web

Par défaut, le tampon de Squid est activé, ce qui permet d’accélérer le chargement de определенные страницы.La taille par défaut est de 100 Mo (situé dans / var / spool / squid).

Залить чейнджер в хвост, модифицируйте файл /etc/squid/squid.conf Trouvez la ligne:

 # cache_dir ufs / var / spool / squid 100 16 256 

Et décommentez-la. Vous pouvez changer la valeur 100 par ce que vous voulez (номинал 200 на 200 мес): cache_dir ufs / var / spool / squid 200 16 256

Taille maximum de mémoire vive utilisée pour stocker le tampon:

 cache_mem 16 МБ 

# Максимальное количество предметов в тампоне:

 maximum_object_size 15 МБ 
Тампон DNS
По умолчанию, Squid настроен для 6-ти часового тампона DNS , после чего не получено разрешение на 5 минут и 5-минутное сообщение не прошло после того, как было получено имя DNS .

Модификация температуры тампона для разрешения номинального «положительного»; пример:

 positive_dns_ttl 8 часов 

Модификация температуры тампона для разрешения «отрицательный»; пример:

 negative_dns_ttl 4 минуты 

Rendre Squid прозрачный

Pour que Squid fonctionne Comm un serveur mandataire transparent, il faut ajouter à la fin du port de Squid:

 http_port 3128 прозрачный 

Выполните команду suivante pour indiquer à iptables qu’il doit rediriger les Requêtes provant du port 80 sur celui de Squid, le 3128:

Pensez à bien modifier l’interface réseau eth0 par celle que vous utilisez!

Вариант -с 192.168.0.0 / 24 — это факультативно, если вы не получили разрешения по доверенности, если хотите, чтобы его можно было использовать для смены адреса!

 sudo iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128 

Если вы используете Squid на своем собственном ПК, настраивайте ip-таблицы для того, чтобы пропустить запросы Squid (qui tourne sous l’utilisateur proxy) и перенаправить запросы на порт 3128.

 sudo iptables -t nat -A OUTPUT --match owner --uid-owner proxy -p tcp --dport 80 -j ПРИНЯТЬ
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 3128 

Relancer Squid avec la nouvelle конфигурации:

 sudo squid -k перенастроить 

Bloquer les sites dans un ficher

Ajouter ces lignes, dans le fichier: /etc/squid/squid.conf

 acl liste_url dstdomain "/etc/squid/liste-sites.txt"
http_access deny liste_url 

Créer le fichier: «/ etc / squid / liste-sites.текст»

 .youtube.com
.facebook.com 

Webmin — это веб-сайт администрирования для вашей машины Linux. Il permet de gérer le système, administrator les serveurs installés и т. Д.

Установка

Connexion

Залейте администратора в машину, заместителя Webmin, перейдите по ссылке navigateur , чтобы пройти через обязательную службу и по адресу:

 https: // nom_machine: 10000/

( nom_machine doit être remplacé par l’IP or le hostname de la machine)

Vous pouvez vous y Connecter avec vos identifiants / mots de pashabuels.

Администрирование Squid

Залейте установщик, установите пакет lightsquid .

Webalizer необходимо и досье, указанное в Webmin, в журнале регистрации общих отчетов. Créez donc un dossier webalizer dans le dossier персонала:

 мкдир ~ / webalizer 

Налейте суппраймер cette application, il suffit de supprimer son paquet. Конфигурация приложения sera conservée или supprimée selon la méthode de désinstallation que vous choisirez.

Beaucoup de logiciels sont compémentaires à Squid, et permettent de nouvelles fonctionnalités, com le filtrage de content, le blacklisted…

DansGuardian

Простат


Авторы: v0n, k20, yakusa77

Как использовать кэш-сервер Squid Proxy для управления доступом в Интернет

Squid — это кэширующий прокси-сервер. Если вы системный администратор Linux, вы можете использовать squid для управления доступом в Интернет в вашей рабочей среде.

Это руководство для новичков даст толчок к настройке squid в Linux для ограничения доступа в Интернет в сети.

Установить Squid

Вы должны установить в вашей системе следующие три пакета, относящихся к squid.

  • кальмар
  • кальмар обыкновенный
  • кальмар-langpack

В Debian и Ubuntu используйте aptitude для установки squid, как показано ниже. В CentOS используйте yum для установки пакета squid.

 $ sudo aptitude install squid 

Проверить конфигурацию и сценарии запуска

Помимо установки пакетов, связанных со squid, он также создает файл / etc / squid / squid.conf и скрипт запуска /etc/init.d/squid.

По умолчанию Squid работает на порту 3128. Вы можете проверить это в файле squid.conf. Вы также можете установить параметр visible_hostname в вашем squid.conf, который будет использоваться в error_log. Если вы не укажете, squid получает значение имени хоста с помощью функции gethostname ().

 # vim /etc/squid/squid.conf
visible_hostname ubuntuserver
httpd_port 3128 

Примечание: Номер http-порта (3128), указанный в squid.conf следует ввести в разделе настроек прокси в браузере клиента. Если squid построен с использованием SSL, вы можете использовать параметр https_port внутри squid.conf для определения https squid.

Запуск Squid и просмотр журналов

Запустите кэширующий прокси-сервер Squid, как показано ниже.

 # запуск службы squid
запуск / запуск squid, процесс 11743 

Squid поддерживает три файла журнала (access.log, cache.log и store.log) в каталоге / var / log / squid.

Из /var/log/squid/access.log вы можете увидеть, кто и в какое время заходил на какой сайт. Ниже приведен формат записи журнала squid access.log.

 время, прошедшее с кода удаленного хоста / байтов состояния URL метода rfc931 peerstatus / peerhost 

Чтобы отключить вход в squid, обновите squid.conf следующей информацией.

 # для отключения access.log
cache_access_log / dev / null

# чтобы отключить store.log
cache_store_log нет

# чтобы отключить кеш.журнал
cache_log / dev / null 

Использование Squid 1. Ограничение доступа к определенным веб-сайтам

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

Создайте файл с именем limited_sites и перечислите все сайты, доступ к которым вы хотите ограничить.

 # vim / etc / squid / limited_sites
www.yahoo.com
mail.yahoo.com 

Измените squid.conf, добавив следующее.

 # vim / etc / squid / squid.conf
acl RestrictedSites dstdomain "/ etc / squid / limited_sites"
http_access deny RestrictedSites 

Примечание: Вы также можете настроить squid как прозрачный прокси-сервер, о чем мы поговорим в отдельной статье. Также обратитесь к нашей предыдущей статье о том, как заблокировать ip-адрес с помощью fail2ban и iptables.

Использование Squid 2: разрешить доступ к веб-сайтам только в определенное время

В некоторых организациях может потребоваться разрешить сотрудникам просматривать страницы или загружать файлы из Интернета только в определенные периоды времени.

Конфигурация squid.conf, показанная ниже, разрешает доступ в Интернет для сотрудников только с 9:00 до 18:00 в будние дни.

 # vim /etc/squid/squid.conf
acl official_hours время ПТ С Ч П 09: 00-18: 00
http_access запретить все
http_access разрешить official_hours 

Использование Squid 3: Ограничение доступа к определенной сети

Вместо ограничения определенных сайтов вы также можете предоставить доступ только к определенной сети и заблокировать все остальное. В приведенном ниже примере разрешен доступ только к 192.168.1. * Внутренняя сеть.

 # vim /etc/squid/squid.conf
acl branch_offices SRC 192.168.1.0/24
http_access запретить все
http_access разрешить Branch_offices 

Информацию о системе обнаружения вторжений на базе Linux см. В нашей статье о tripwire.

Использование Squid 4: используйте регулярное выражение для сопоставления URL-адресов

Вы также можете использовать регулярное выражение, чтобы разрешить или запретить веб-сайты.

Сначала создайте файлы blocked_sites со списком ключевых слов.

 # кот / etc / squid / blocked_sites
футбольный
кино
www.example.com 

Измените squid.conf, чтобы заблокировать любые сайты, в URL которых есть любое из этих ключевых слов.

 # vim /etc/squid/squid.conf
acl blocked_sites url_regex -i "/ etc / squid / blocked_sites"
http_access deny blocked_sites
http_access разрешить все 

В приведенном выше примере параметр -i используется для игнорирования регистра при сопоставлении. Таким образом, при доступе к веб-сайтам squid будет пытаться сопоставить URL-адрес с любым из шаблонов, упомянутых в приведенном выше файле blocked_sites, и отказывает в доступе, когда он совпадает.

SARG — Генератор отчетов об анализе кальмаров

Загрузите и установите SARG для создания отчетов об использовании Squid.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *