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 root@localhost #Адрес сервера, отображаемый на страницах ошибок #По умолчанию используется функция 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.