Как настроить прозрачный прокси

Установка и настройка прокси-сервера Squid

Squid – самый популярный HTTP-прокси сервер для кэширования и перенаправления. Он широко используется различными компаниями для кэширования веб-страниц с веб-сервера для повышения скорости работы последнего, снижения времени ответа и ограничения использования пропускной способности сети. В данном руководстве мы рассмотрим установку прокси-сервера squid и его использование в качестве HTTP-прокси сервера.

Установка прокси-сервера Squid

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

Пакет Squid доступен в стандартном репозитории
В Ubuntu/Debian

Запустите его и задайте запуск при загрузке:

После этого можно проверить статус службы:

Важные файлы Squid располагаются в следующих директориях:

Файл конфигурации: /etc/squid/squid.conf
Журнал доступа: /var/log/squid/access.log
Журнал кэша: /var/log/squid/cache.log

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

В нем довольно много параметров, мы рассмотрим самые важные из них.

http_port порт HTTP-прокси сервера, по умолчанию 3128. Для безопасности рекомендуется сменить его на другой.
visible_hostname Параметр используется для определения имени узла сервера Squid. Можно задать любое имя.

Также можно указать параметр intercept (или transparent для старых версий), например, http_port 3128 intercept. В этом случае ваш сервер будет работать как прозрачный прокси (без необходимости настраивать его использование на стороне клиента).

Для последующего понимания работы прокси, нужно понять следующие параметры

http_access-Данный параметр регулирует доступ к HTTP-прокси серверу. С помощью него можно разрешить или запретить доступ через сервер как к определенным ресурсам в интернете, так и определенным группам пользователей.
В данный момент любой доступ запрещен (deny all). Чтобы начать использование сервера, нужно изменить ее, например, на http_access allow all (разрешить любой доступ). Параметр all можно заменить на имя списка доступа, которые мы рассмотрим чуть ниже.
acl(access control list) — В этом параметре указываются ресурсы в интернете, порты, ip адреса пользователей, локальные сети. В общем это список к которому будут применяться различные правила. Таких списков может быть неограниченное количество.

После внесения изменений нужно перезапустить Squid следующей командой:

Настройка Squid как HTTP-прокси

В данном разделе мы рассмотрим настройку Squid в качестве HTTP-прокси, использующий для аутентификации только IP-адрес клиента.
Общий синтаксис в прокси выглядит следующим образом

При описании контроля доступа можно использовать оператор отрицания «!». Например следующая строка запрещает доступ ко всем портам, кроме описанных в листе Safe_ports

Добавление списков контроля доступа

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

Вы можете его отредактировать или удалить. Создадим новый acl

Добавьте правило следующего вида:

Где boss — имя списка контроля доступа, src — параметр, задающий адрес источника (source), а XX.XX.XX.XX — IP-адрес машины клиента (можно также указывать подсети или диапазоны). Новые списки контроля доступа нужно добавлять в начало раздела ACL. Аналогичным образом можно создавать списки доступа с ограничением по адресу места назначения (параметр dst вместо src), а также использовать вместо адресов доменные имена (srcdomain для источника, dstdomain для места назначения).

Очень желательно рядом с ACL указывать комментарий с кратким описанием пользователя этого IP-адреса, например:

После этого нужно разрешить доступ для boss:

Чтобы изменения вступили в силу, нужно перезагрузить Squid.

Открытие портов

По умолчанию в конфигурации Squid разрешено использование только определенных портов.

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

Где XXX — номер порта, использование которого нужно разрешить. Снова желательно пояснять ACL комментарием.

Не забываем перезапустить Squid для применения настроек

Работа прокси в прозрачном режиме

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

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

В случае использования iptables нужно добавить следующие правила (в рассматриваемом примере eth1 — внутренний интерфейс, eth0 — внешний, SQUID_IP — IP-адрес прокси-сервера):

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

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

Создадим нового пользователя ivan и установим ему пароль.

Для задания базовой HTTP-аутентифркации откройте файл конфигурации Сквид в текстовом редакторе:

И пропишите следующие директивы после ACL портов:

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

Настройка параметров кэширования

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

Кэш в оперативной памяти настраивается следующими параметрами:

cache_mem 1024 MB — выделенный для кэширования объем памяти
maximum_object_size_in_memory 512 KB — максимальный размер объекта в кэше

Параметры кэша на жёстком диске задаются следующей директивой:

Размер указывается в мегабайтах, ур_1 и ур_2 — количество директорий первого и второго уровня, соответственно, например:

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

Ограничение скорости

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

Для реализации ограничения скорости Сквид использует механизм пулов задержки (delay pools). Пулы задержки можно условно представить в виде ёмкости, которая “заполняется” данными, и после этого “выпускает” их только с определенной скоростью. Количество пулов задаётся в файле конфигурации следующим образом:

Каждый пул имеет номер (от 1 до заданного количества), а также класс. Классы реализуют многоступенчатую структуру ограничения:

1 класс — общее ограничение
2 класс — общее ограничение и ограничения для подсетей
3 класс — общее ограничение, ограничения для подсетей и ограничения для отдельных ip-адресов

Классы пулов задаются директивой delay_class, в качестве аргументов которой передаются номер пула и класс.

Параметры пулов задаются директивой delay_parameters и описывают максимальный объем пула и ограничение на каждый уровень (в байтах) в зависимости от класса. Например, параметры для пула 1 класса с номером 1:

Будут означать, что после получения первых 256 Кб запроса на максимальной скорости скорость будет ограничена 64 Кб/с, то есть 512 Кбит/с.

Для 2 класса и выше аналогичным образом задаются ограничения для подсети, отдельного адреса и т.д., например следующая директива ограничивает общую скорость до 8 Мбит/с, а скорость для подсети после первых 256 Кб запроса — до 512 Кбит/с.

Чтобы задать пулы задержки для определенных списков контроля доступа, используется директива delay_access, содержащая номер пула, параметр allow или deny и имя списка, например:

для примера создадим два пула, 1 и 2 класса:

Теперь пользователи из листа office1 будут иметь скорость доступа в интернет в соответствии с delay_parameters 1.
Создаем 2-й класс

Это означает, что пользователи acl office2 ограничены общей скоростью на всю сеть в 512 кбит, но при этом отдельные пользователи в этой сети ограничены после первых 256 Кб, скоростью в 64 кбит
Проверим на сайте speedtest.net, работу ограничений

Как видите скорость загрузки действительно ограничена приблизительно до 256 кбит. Обратите внимание, что сквид ограничивает только скорость отдачи от него, т.е скорость загрузки пользователя. На скорость отдачи от пользователя ограничение не действует.

Блокировка веб-сайтов

Для блокировки доступа к нежелательным веб-сайтам сначала создайте файл с “черным списком”:

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

Точки перед именами указывают Сквид блокировать все ссылки на эти сайты, в том числе www. vk.com, subsite.vk.com и т.д.

Далее нужно открыть файл конфигурации

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

Обратите внимание на порядок расположения правил, правила доступа выполняются сверху вниз. Поэтому запрещающее правило расположено выше разрешающего
Сохраните файл и перезапустите Squid:

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

Блокировка по маске

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

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

Откройте файл конфигурации и внесите в него следующие список контроля доступа и правило:

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

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

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Прозрачный прокси для HTTPS в Squid

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

В наше время все больше и больше сайтов используют HTTPS для обеспечения конфиденциальности своих пользователей. Нет никаких сомнений в том что шифрование это хорошая вещь для безопасности, но оно также создает ряд проблем для контролируемых сетей, часто используемых в офисах. Основной проблемой есть то что кроме пользователя и сервера никто не может видеть и тем более фильтровать зашифрованные данные. Для решения этой проблемы можно использовать прозрачную фильтрацию HTTPS в Squid с помощью расширения ssl_bump.

Как это работает?

Когда пользователь пытается открыть сайт iptables перенаправляет запрос на наш прокси Squid. Обязательно чтобы трафик от пользователей проходил через машину с настроенным iptables и squid. Если используется протокол HTTPS, прокси сервер устанавливает шифрованное соединение с запрашиваемым сервером выдавая себя за браузер, а затем на основе собственного корневого сертификата подписывает новый SSL сертификат для запрашиваемого доменного имени и отправляет его браузеру пользователя выдавая себя за сервер. Таким образом устанавливается два шифрованных соединения и прокси получает полный доступ к проходимому трафику. Получается такая себе подмена сертификата HTTPS Squid.

Установка Squid и OpenSSL в Gentoo

Для работы с SSL сертификатами в системе должен быть установлен пакет openssl, если еще нет, установите:

sudo emerge -av openssl

Если вы работаете в Gentoo, то теперь squid нужно собрать с поддержкой SSL и динамической генерации сертификатов, а это соответственно опции: —enable-ssl и —enable-ssl-crtd, поэтому:

net-proxy/squid ssl-crtd ssl

Затем осталось установить Squid:

sudo emerge -pv squid

Установка Squid и OpenSSL в Ubuntu

Прежде чем будет выполнятся настройка HTTPS Squid, надо установить правильный прокси сервер и OpenSSL. Для Ubuntu и других дистрибутивов, основанных на Debian команда установки OpenSSL будет выглядеть вот так:

sudo apt install openssl

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

sudo apt build-dep squid

Затем установите библиотеку для SSL:

sudo apt install libssl-dev

Создайте папку для сборки в домашней директории и перейдите в неё:

Скачайте в эту папку исходники Squid:

sudo apt source squid

В текущей папке появится ещё одна папка с исходниками, перейдите в неё.

Затем надо отредактировать файл debian/rules и добавить в него следующие флаги компиляции:

sudo vi debian/rules

—enable-ssl \
—enable-ssl-crtd \
—with-openssl

Эти опции надо вставить в переменную BUILD_CXX, она там одна такая. Затем останется только собрать и установить полученный пакет:

sudo debuild -d -uc -us

sudo dpkg -i ../squid*.deb

После установки вы можете убедится, что ваша версия Squid теперь поддерживает SSL выполнив:

squid -v | grep ssl

Настройка Squid

Сначала создадим папку для хранения сертификатов, например в /etc/squid/ssl:

Теперь генерируем корневой сертификат собственного CA (Центра сертификации) на основе которого будут подписываться сертификаты для сайтов:

sudo openssl genrsa -out /etc/squid/ssl/squid.key
sudo openssl req -new -key /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.csr
sudo openssl x509 -req -days 3650 -in /etc/squid/ssl/squid.csr -signkey /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.pem

Генерируем корневой сертификат который затем нужно будет добавить в браузер:

sudo openssl x509 -in /etc/squid/ssl/squid.pem -outform DER -out squid.der

Далее надо дать права на папку с сертификатами для Squid:

chown -R proxy:proxy /etc/squid/ssl

В файл конфигурации надо добавить такие настройки:

sudo vi /etc/squid/squid.conf

http_access allow all
http_port 3128
http_port 3129 intercept
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/squid.pem key=/etc/squid/ssl/squid.key
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER
always_direct allow all
ssl_bump server-first all
ssl_bump none all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB

Путь /usr/lib/squid/security_file_certgen (ранее /usr/libexec/squid/ssl_crtd) указывать обязательно иначе будет ошибка. Директива http_access allow all разрешает все подключения к Squid, не используйте её в production версии она добавлена здесь для того, чтобы не засорять конфигурационный файл настройкой доступа и сосредоточится на SSL и прозрачном прокси. Первый порт для http_port — это обычный прокси, к нему можно подключится из браузера, следующие два, с ключевым словом intercept прозрачные, работают только с помощью редиректа в iptables.

Дальше нужно пересоздать базу данных сертификатов:

rm -rf /var/lib/ssl_db

/usr/lib/squid/security_file_certgen -c -s /var/lib/ssl_db -M 4MB

chown -R proxy:proxy /var/lib/ssl_db

Сервис Squid должен обязательно иметь права на директорию /var/lib/ssl_db. Следующим шагом включаем ip_forwarding для разрешения проходящего трафика через узел:

echo 1 >> /proc/sys/net/ipv4/ip_forward

Затем можно перезапускать Squid:

sudo systemctl restart squid

Прозрачный прокси Squid HTTPS настроен, осталось настроить редирект и браузер.

Настройка iptables

Перенаправляем весь проходящий через узел трафик с целевыми портами http и https на squid:

iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 3129

iptables -t nat -A PREROUTING -p tcp —dport 443 -j REDIRECT —to-port 3130

Если вы хотите тестировать прокси с локальным трафиком, то надо перенаправлять на Squid весь трафик, кроме трафика от Squid, это можно сделать такими правилами:

sudo iptables -t nat -A OUTPUT -p tcp -m owner ! —uid-owner proxy —dport 80 -j REDIRECT —to-port 3129

sudo iptables -t nat -A OUTPUT -p tcp -m owner ! —uid-owner proxy —dport 443 -j REDIRECT —to-port 3130

Настройка браузера

Сейчас большинство сайтов используют технологию HSTS для предотвращения MiTM атак, поэтому если вы хотите настроить Squid для фильтрации трафика в своей организации, вам следует добавить сертификат .der сгенерированный на предыдущем шаге в браузер. Рассмотрим на примере Firefox. Откройте Настройки -> Защита и приватность -> Просмотр сертификатов -> Центры сертификации:

Затем нажмите кнопку Импортировать и выберите файл squid.der, находящейся в директории /etc/squid/ssl. Отметьте галочки, что следует доверять этому сертификату.

Фильтрация трафика

Теперь откройте какой-либо сайт. Если всё сделано верно, то сайт откроется, но сертификат будет не его, а ваш:

Прозрачный прокси для https заработает и в логе /var/log/squid/access.log вы увидите куда и зачем ходит пользователь:

tail -f /var/log/squid/access.log

Завершение

В этой статье мы разобрали как выполняется настройка HTTPS Squid 4. Как видите мы можем узнать какие страницы и изображения запрашивает пользователь, а этого более чем достаточно для нормального контроля трафика. Далее можно настраивать правила блокировки и фильтрации как это обычно делается для Squid.

Иногда важно отдохнуть, расслабиться, посмотреть на природу. На десерт сегодня, красивое видео — путь на вершину:

Источник

Читайте также:  Не работает этот способ
Оцените статью