Прозрачный прокси что это
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Transparent proxy
Прозрачный прокси (Transparent Proxy) — схема связи, при которой трафик, или его часть, перенаправляется на прокси-сервер неявно (средствами маршрутизатора). При этом клиент может использовать все преимущества прокси-сервера без дополнительных настроек браузера (или другого приложения для работы с интернетом).
Содержание
Описание
Такие прокси помогают ускорить доступ к страницам сайтов, которые определяет пользователь – в основном часто посещаемым. Ускорение загрузки происходит за счет помещения сайтов в кэш. Как правило, прозрачные прокси работают быстрее (скорость загрузки выше), чем их элитные или анонимные «товарищи». Работодатели используют этот тип прокси для ограничения доступа сотрудников к определенным сайтам (социальные сети, например). Основной недостаток – низкий уровень скрытности. В основном прозрачные прокси применяются для накрутки счетчиков на странице, при скачивании файлов с файлообменников, для блокировки локальных фаерволов.
Transparent Proxy примерно так передают HTTP-заголовки:
REMOTE_ADDR – демонстрирует IP прокси
HTTP_VIA – демонстрирует адрес прокси-сервера
Присутствие переменной _X_ говорит о необязательности использования данной переменной. Передача аналогичной переменной происходит в виде HTTP_X_FORWARDER_FOR. Однако лидеры прокси (Cash Engine, Squid) довольно активно поддерживают эту переменную. [2]
Squid
Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS. Разработан сообществом как программа с открытым исходным кодом (распространяется в соответствии с GNU GPL). Все запросы выполняет как один неблокируемый процесс ввода-вывода. В сочетании с некоторыми межсетевыми экранами и маршрутизаторами squid может работать в режиме прозрачного прокси. В этом режиме маршрутизатор вместо того, чтобы сразу пересылать HTTP-запросы пользователя HTTP-серверу в Интернете, перенаправляет их прокси-серверу, который может работать как на отдельном хосте, так и на самом маршрутизаторе. Прокси-сервер обрабатывает запрос (с возможной отдачей содержимого из кеша), это содержимое направляется к запросившему пользователю, для которого оно выглядит как «ответ» сервера, к которому адресовался запрос. Таким образом, пользователь может даже не знать, что все запросы и ответы прошли через прокси-сервер. При таком подходе проксирования аутентификация не предусмотрена, так как прозрачность проксирования это и подразумевает.
На сегодняшний момент реализована поддержка HTTPS. [3]
«Прозрачный» HTTPS прокси для обхода блокировок Роскомнадзора
Привет, хабровчане! Я думаю, многие в последнее время столкнулись с проблемами доступа к нужным ресурсам из-за попыток Роскомпозоранадзора заблокировать Телеграм. И я думаю, комментарии тут излишни. Факт — эти ресурсы ни в чем не виноваты, но они заблокированы. Проблемы возникли с Viber, ReCaptcha, GoogleFonts, Youtube и др. (кроме самого телеграма). Это случилось и в моей организации, причем некоторые невинные сервисы нужны нам как воздух. В какое-то время решалось все использованием прокси серверов, но они были нестабильны или вовсе отключались (их также блокировал наш великий и могучий РКН).
После прочтения кучи статей, пришла идея научить Squid пускать отдельные URL через Tor. Использовать ли такой метод, решать вам. Но скажу, что после реализации пропали все проблемы, которые были до этого. Кому интересно, идем под кат.
Итак, для начала немного теории. Как мы все знаем, Tor — это не HTTP-прокси, его нельзя сделать прямым peer для нижележащего Squid’а. Он предоставляет SOCKS-проксирование (конечно же, не только, но нам нужно именно это). Чтобы нам поженить Tor со Squid, нужно что-то, что могло бы играть роль проводника от Tor к Squid и обратно. И конечно же, дамы и господа, это Privoxy. Как раз таки он способен быть прямым peer, и отправлять все далее в Tor.
Было, как я уже говорил, прочтено куча статей, но ни одна не подходила мне. Попалась вот эта статья, но и она мне не совсем подходила, так как мне не нужен bump. Вообще, все имеющиеся статьи, практически все, подразумевают либо бамп, либо только http, а в моем случае нужно и HTTPS, и splice, и прозрачность. Также видал вот это и это, но там совсем другие подходы. Свои плюсы и минусы. Я выбрал для себя именно связку Squid + Tor.
Я уже ранее писал о том, как сделать прозрачный Squid с проксированием HTTPS без подмены сертификатов. И конечно же, я попробовал реализовать идею на нем. Но меня ждало разочарование. HTTP запросы прекрасно уходили в TOR, а вот HTTPS нет. Проблема не очень-то и известная, и я узнал у одного из разработчиков, что это недостаток старых версий Squid. Но в ходе экспериментов было найдено решение — Squid 3.5.27, в котором исправлен данный баг + красивые доменные имена в логах (https), вместо ip адресов. Но и тут меня ждали несколько разочарований, о которых речь пойдет ниже. Но всё, как говорится, допиливается напильником.
Итак, исходные данные:
Итак, подготовимся к сборке:
Далее получаем исходники Squid 3.5.23
Качаем именно этот архив с исходниками Squid:
Переходим в каталог исходников Squid и обновляем исходники до новоскаченных сорцов:
Переходим в новоиспеченный каталог с обновленными исходниками:
Добавляем в debian/rules опции для компиляции:
Дальше нужно пропатчить исходники вот таким патчем:
Для чего он нужен? Я объясню. Когда я писал первую статью про peek and splice, я говорил что более новые версии не работают, и это было так, и вот как раз таки этот патч исправляет ту самую проблему, которая заключалась в том, что Squid выборочно рвет HTTPS соединения, с интересным сообщением в cache.log:
Дело в том, что на одном хосте что-то резолвится в один IP, на соседнем иногда в другой, на самом Squid в третий, т.к. существует кеш DNS и обновляется он не синхронно. Squid не находит соответствия ip-домен в своём кеше (потому что обновил свой кеш немного раньше или позже) и прерывает соединение. Вроде как, защита, но в наше время это считается нормальным (round-robin DNS). Разработчики перестраховались. И нам это не нужно совершенно! Тем, кто скажет, что данный патч, возможно, несет в себе угрозу безопасности, я отвечу, что по поводу этого патча я консультировался с Юрием Воиновым, который имеет непосредственное отношение к команде разработчиков Squid. Никакой угрозы здесь нет!
Итак, файлик для патча создали, код кинули, надо пропатчить:
Далее необходимо отменить применение одного патча при компиляции (иначе получите ошибку, что этот патч применить невозможно, так как он уже применен). Идем в debian/patches/series и закомментим там 0003-SQUID-2018_1.patch, поставив перед ним знак #:
Ну а дальше — компиляция и сборка пакетов!
и установим свеженькие пакеты
Если apt матерится на зависимости, сделайте
Далее нужно выключить Squid из автозагрузки (по умолчанию используется init файл, Squid жалуется на недоступность PID файла)
и создать systemd сервис в директории /etc/systemd/system (файл сервиса есть в исходниках, и полностью скопирован сюда)
Установим tor, privoxy
Конфиг Tor я лично вообще не трогал, а вот конфиг Privoxy можно привести к такому виду:
Почти готово. Перейдем в каталог /etc/squid, кое-что там изменим. Создадим pem файлик, необходимый для splice:
И приведем squid.conf к следующему виду:
Список url_regex имеет примерно такой вид (список дан для примера!):
Более подробно про этот формат списка читайте в оф документации. Результат себя долго ждать не заставил — все заработало, как и было запланировано. И работает по сей день. Возможно, со статьей опоздал, но она, вероятно, пригодится в будущем).
Тему буду пополнять по возможности.
UPD 04.05.18: можно добавить в torcc строчку
и в принципе отказаться от Privoxy. Спасибо dartraiden за замечание
Найден баг. Не рекомендуется использование HTTPTunnelPort, Privoxy нужен пока-что, пока не закроется вот это. Спасибо Юрию Воинову!
Также поправил статью по части libecap3. Не нужно компилировать ничего, а просто установить из репозитория Stretch. Спасибо AlucoST за замечание
UPD 05.05.18: товарищ dartraiden подсказывает, что в конфиг Tor можно добавить
Это исключает использование выходных узлов в указанных странах
Огромное спасибо Юрию Воинову, который помогал в решении проблем с работой данной связки!
Что такое прозрачный прокси? Как обнаружить и обойти
Если вы частый пользователь интернета, вы, вероятно, все время взаимодействуете с прозрачными прокси не осознавая этого. Скорее всего, ваш интернет-провайдер использует прозрачные прокси, когда вы хотите получить доступ к популярным веб-сайтам, видео и новостным статьям. Вместо того, чтобы отправлять и получать видео с сервера Netflix по всей стране каждый раз, когда кто-то хочет его посмотреть, ваш местный интернет-провайдер будет «кэшировать» копию видео на своих собственных серверах. Когда вы идете смотреть видео, прозрачный прокси перенаправит вас на кэшированную версию видео, сохраняя пропускную способность восходящего канала. Как конечный пользователь, вы получаете видео более высокого качества с меньшей буферизацией, но в остальном опыт неотличим от прямого подключения к Netflix..
Прозрачные прокси являются неотъемлемой частью сетей доставки контента или CDN, которые выполняют кэширование в больших масштабах. Но это только одно из многих приложений. В этой статье мы более подробно обсудим, как работают прозрачные прокси, как они используются, их плюсы и минусы, а также как их обнаруживать и обходить..
Как работают прозрачные прокси
Прозрачные прокси обычно находятся между пользователями и сетью. Когда пользователь отправляет запрос на подключение, скажем, к веб-сайту, он сначала перенаправляется на прокси-сервер. Перенаправление обычно обрабатывается брандмауэром на том же хосте, что и прокси-сервер, например iptables в Linux..
Как используются прозрачные прокси
Прозрачные прокси-серверы не требуют какой-либо настройки на стороне клиента, поэтому пользователям не нужно загружать какие-либо приложения или вносить какие-либо изменения в конфигурации для их использования. Вместо этого конфигурация остается за поставщиком услуг, который имеет больший контроль над тем, как пользователи взаимодействуют со своими услугами. Это делает прозрачные прокси полезными в ситуациях, когда количество и типы клиентов в сети неизвестны..
Кэширование
Мы кратко описали кэширование прокси во введении. Всякий раз, когда пользователь подключается к веб-сайту, скажем, для просмотра видео, копия видео сохраняется в кеше на хост-сервере прокси. Прокси-сервер перенаправляет будущие запросы на это видео в кэшированную версию, и пользователь никогда не узнает разницу. Подобные методы используются в крупных сетях доставки контента (CDN).
фильтрация
Фильтрующие прокси используются для ограничения доступа к ресурсам в сети. Если этой сетью является Интернет, то для цензуры можно использовать фильтрующие прокси. Прокси офисного здания может игнорировать запросы на Facebook и YouTube, чтобы держать сотрудников на задании. В школах и библиотеках часто используются фильтрующие прокси, чтобы запретить пользователям доступ к нежелательному контенту. Национальные государства могут использовать фильтрующие прокси для контроля и цензуры контента, который они считают неуместным или оскорбительным.
Вы когда-нибудь подключались к общедоступной точке доступа Wi-Fi, которая требовала от вас согласия с условиями обслуживания провайдера, входа в систему с помощью электронной почты или просмотра рекламы до того, как она позволит получить доступ к Интернету? Скорее всего, эта сеть использовала шлюз-прокси. Прозрачные прокси могут изменять или блокировать трафик на основе определенных правил, выборочно ограничивая доступ к Интернету. В этом примере прокси перенаправляет пользователей на страницу входа.
Защита от DDoS
Как определить, что вы находитесь за прозрачным прокси
Простой способ проверить, находитесь ли вы за прозрачным прокси, состоит в попытка подключиться к серверу, которого вы знаете, не существует. Если прокси отсутствует, вы увидите типичное сообщение об ошибке в вашем браузере. Chrome говорит: «Этот сайт недоступен», потому что IP-адрес не найден.
Если вы находитесь за прокси-сервером, ошибка может отличаться или вы можете быть перенаправлены на другую страницу, например страницу поиска.
Если это не дает прямого результата, на некоторых веб-сайтах есть службы обнаружения прокси с различной надежностью, как этот.
Если вы посещаете веб-сайт с HTTPS-шифрованием и нажимаете на значок замка, ваш браузер предоставит вам некоторую основную информацию о SSL-сертификате сайта. Если сертификат выдан вашему провайдеру, а не владельцу сайта, это может быть признаком того, что вы находитесь за прозрачным прокси.
VPN и HTTPS против прозрачных прокси
В стандартном незашифрованном соединении интернет-трафик может контролироваться и фильтроваться прозрачным прокси. Содержащиеся в нем данные могут быть кэшированы на прокси-сервере для последующего использования..
HTTPS
Веб-сайты, использующие HTTPS, защищают трафик браузера между сервером и клиентом с помощью шифрования SSL. Шифрование шифрует данные перед тем, как покинуть устройство, делая их недоступными для перехвата. тем не мение, DNS-трафик обычно не зашифрован и сообщает прокси-серверу, куда идет зашифрованный HTTPS-трафик. Фактическое содержимое сетевого трафика может быть невидимым, поэтому данные не могут быть кэшированы, но прокси-сервер может по крайней мере увидеть, куда он движется. (Примечание. Вот почему прозрачные прокси часто несовместимы с зашифрованным DNS или DNSSEC.)
Прозрачный прокси, как программное обеспечение Кальмар может обрабатывать HTTPS-трафик несколькими различными способами, но, как правило, прокси-сервер может по-прежнему отслеживать назначение данных, передаваемых транзитом. В некоторых случаях сетевые администраторы настраивают HTTPS перехват на прозрачных прокси. Прокси-сервер действует как посредник со своим собственным центром сертификации HTTPS. В этом случае HTTPS-трафик перехватывается и расшифровывается на прокси-сервере, а не на веб-сайте назначения. Затем данные могут быть кэшированы, отфильтрованы или проверены перед повторным шифрованием и отправкой в пункт назначения..
Если вы находитесь за прозрачным прокси-сервером и хотите полностью его обойти, тогда использовать VPN. Хороший VPN шифрует весь трафик, покидающий ваше устройство, включая трафик DNS и HTTP / S. Не зная содержимого или места назначения ваших данных, прозрачный прокси-сервер не может предпринимать какие-либо действия и просто перенаправляет его в пункт назначения без изменений (если только он явно не блокирует трафик на VPN-сервере). Обратите внимание, что VPN сделает недоступным прокси-кеш, что может замедлить работу конечного пользователя..
Прозрачный прокси для HTTPS в Squid
Протокол HTTPS был разработан для обеспечения безопасного соединения между браузером пользователя и удаленным веб сервером. Для этого все данные проходящие через соединение шифруются таким образом что их может расшифровать только получатель с помощью специального ключа. Изначально в стандартном протоколе HTTP не было предусмотрено защиты информации и HTTPS был разработан для обеспечения безопасности пользователей на сайтах финансовых организаций, банков и государственных учреждений.
В наше время все больше и больше сайтов используют HTTPS для обеспечения конфиденциальности своих пользователей. Нет никаких сомнений в том что шифрование это хорошая вещь для безопасности, но оно также создает ряд проблем для контролируемых сетей, часто используемых в офисах. Основной проблемой есть то что кроме пользователя и сервера никто не может видеть и тем более фильтровать зашифрованные данные. Для решения этой проблемы можно использовать прозрачную фильтрацию HTTPS в Squid с помощью расширения ssl_bump.
Как это работает?
Когда пользователь пытается открыть сайт iptables перенаправляет запрос на наш прокси Squid. Обязательно чтобы трафик от пользователей проходил через машину с настроенным iptables и squid. Если используется протокол HTTPS, прокси сервер устанавливает шифрованное соединение с запрашиваемым сервером выдавая себя за браузер, а затем на основе собственного корневого сертификата подписывает новый SSL сертификат для запрашиваемого доменного имени и отправляет его браузеру пользователя выдавая себя за сервер. Таким образом устанавливается два шифрованных соединения и прокси получает полный доступ к проходимому трафику. Получается такая себе подмена сертификата HTTPS Squid.
Установка Squid и OpenSSL в Gentoo
Для работы с SSL сертификатами в системе должен быть установлен пакет openssl, если еще нет, установите:
Если вы работаете в Gentoo, то теперь squid нужно собрать с поддержкой SSL и динамической генерации сертификатов, а это соответственно опции: —enable-ssl и —enable-ssl-crtd, поэтому:
net-proxy/squid ssl-crtd ssl
Затем осталось установить 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, она там одна такая. Затем останется только собрать и установить полученный пакет:
После установки вы можете убедится, что ваша версия Squid теперь поддерживает SSL выполнив:
Настройка Squid
Сначала создадим папку для хранения сертификатов, например в /etc/squid/ssl:
Теперь генерируем корневой сертификат собственного CA (Центра сертификации) на основе которого будут подписываться сертификаты для сайтов:
Генерируем корневой сертификат который затем нужно будет добавить в браузер:
Далее надо дать права на папку с сертификатами для Squid:
В файл конфигурации надо добавить такие настройки:
sudo vi /etc/squid/squid.conf
Дальше нужно пересоздать базу данных сертификатов:
Сервис 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:
Если вы хотите тестировать прокси с локальным трафиком, то надо перенаправлять на Squid весь трафик, кроме трафика от Squid, это можно сделать такими правилами:
Настройка браузера
Затем нажмите кнопку Импортировать и выберите файл squid.der, находящейся в директории /etc/squid/ssl. Отметьте галочки, что следует доверять этому сертификату.
Фильтрация трафика
Теперь откройте какой-либо сайт. Если всё сделано верно, то сайт откроется, но сертификат будет не его, а ваш:
Прозрачный прокси для https заработает и в логе /var/log/squid/access.log вы увидите куда и зачем ходит пользователь:
Завершение
В этой статье мы разобрали как выполняется настройка HTTPS Squid 4. Как видите мы можем узнать какие страницы и изображения запрашивает пользователь, а этого более чем достаточно для нормального контроля трафика. Далее можно настраивать правила блокировки и фильтрации как это обычно делается для Squid.
Прозрачный прокси
Прокси предоставляет пользователям возможность работать в сети с большими преимуществами. Он фильтрует сайты, позволяет экономить трафик, предоставляет защищенный серфинг в интернете, а также позволят войти на запрещенные сайты. Это причины, по которым сервер используется повсеместно.
Существует 3 типа серверов:
Рассмотрим подробнее, что такое прозрачные прокси.
Особенности прозрачных прокси
Прозрачный прокси сервер является самым доступным, но он имеет свои особенности и преимущества, среди которых.:
Кто выбирает transparent proxy:
Единственный недостаток такого типа защиты – низкий уровень анонимности. Поэтому, если пользователю важна конфиденциальность в сети больше, чем скорость серфинга, лучше купить прокси-сервер анонимного типа.
Что такое Squid пакет
Squid прозрачный прокси относится к лидерам proxy.Он выполняет функцию сервера для HTTP, HTTPS, FTP, Gopher. Этот программный пакет может работать в режиме прозрачного прокси. В этом случае маршрутизатор посылает запросы прокси-серверу вместо того, чтобы направлять их сразу в интернет. Неоспоримый плюс использования пакета в том, что нет необходимости настраивать каждую клиентскую машину для работы с сервером.
Возможности transparent proxy позволяют работать в сети с минимальными усилиями по подключению сервера, а администраторам можно не настраивать браузеры вручную. Этот тип защиты не потеряет популярности в ближайшее время, ведь высокая скорость доступа к веб-страницам – одна из важнейших характеристик успешной работы в сети.