Межсетевой прокси: Доступ в Интернет, Tor, I2P и другие сети через Yggdrasil

Для выхода в скрытые сети вроде I2P, Tor, Zeronet и прочие, необходимо предварительно установить соответствующую программу. Подобная программа является окном в сеть, скрытую для постороннего наблюдателя, обеспечивая всю внутреннюю логику: криптографию, взаимодействие с другими узлами, обращение к стартовому узлу и тому подобное, что не надо знать обычному пользователю, дабы сберечь крепкий сон.

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

Путешествуя по обычному интернету мы не задумываемся над доменными зонами: ru, com, org и так далее, потому что все они открываются одинаково. Однако, настроив браузер для открытия сайта в сети I2P, вы не откроете onion-домен из сети Tor. Для этого нужно будет сменить настройки прокси-сервера. Поковырявшись с конфигами, вы сможете упростить эту задачу, но, если добавить сюда еще сеть Yggdrasil, тема сильно усложнится. Таким образом настройки вашего браузера будут неизменно усложняться, тем самым создавая поле для потенциальных утечек запросов с вашего настоящего IP-адреса на сомнительные ресурсы. И это при условии, что программы для доступа во все названные сети должны быть установлены на каждое из ваших устройств, где вы хотите ими пользоваться.

В этой статье рассмотрим настройку межсетевого прокси-сервера, который нужно настроить всего лишь один раз и затем использовать с любых устройств, переходя от сайта в одной сети на ресурс в другой скрытой сети вообще не задумываясь о дополнительных настройках браузера или чего-то еще. Будет использован tinyproxy — легковесный HTTP-прокси сервер для unix-подобных операционных систем. Для реализации показанного подойдет любой слабый сервер на базе Debian.

8cd97d9aae88fe442be93734a4ff1079.jpeg

Ликбез по безопасности

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

85b4d1966b962c71e0a3415ab2bca1e3.jpg

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

Установка и настройка

Не будем тратить время на демонстрацию установки Tor, I2P и Yggdrasil. Более того, список скрытых сетей может быть дополнен на ваше усмотрение. Недостающую справочную информацию на тему установки вы без труда найдете в интернете. Итак, имеем свежий слабенький сервер с установленными клиентами сетей Yggdrasil, I2P и Tor.

Переходим в гит-репозиторий tinyproxy. Копируем ссылку для клонирования. Чтобы клонировать репозиторий на сервер, необходимо предварительно установить git командой apt install git (если работаете не от суперпользователя, добавляйте в начало команд слово sudo).

image-loader.svg

Выполняем команду git clone https://github.com/tinyproxy/tinyproxy.git. Инструкция по компиляции исходных кодов находится на главной странице репозитория.

image-loader.svg

На «голом» сервере скрипт autogen.sh завершается с ошибкой: необходимо установить набор инструментов: apt install build-essential autotools-dev automake. Теперь autogen.sh отрабатывает корректно. При сборке версии прямиком из репозитория, после выполнения autogen.sh сразу переходим к команде make, пропуская пункт ./configure, а затем выполняем make install.

Релизы tinyproxy на GitHub распространяются также в виде исходного кода и собираются аналогичным образом, поэтому большой разницы между сборкой релиза и актуального состояния гит-репозитория нет.

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

Въедливый читатель наверняка возмутится: почему бы просто не установить tinyproxy из стандартного репозитория Debian, ведь он там присутствует! А почему бы и нет?… Давайте выполним команду apt install tinyproxy. В системе сразу появился привычный сервис systemd (tinyproxy.service), а также конфигурационный файл в /etc/tinyproxy/tinyproxy.conf.

Открываем конфигурационный файл nano /etc/tinyproxy/tinyproxy.confи указываем адрес, на который прокси-сервер будет принимать подключения пользователей. Это делается через параметр «Listen». Адрес IPv6 Yggdrasil можно легко посмотреть через утилиту ifconfig.

32611ceb47c4211d90374cefb1903a46.jpg

Идем ниже по конфигурационному файлу и теперь самое интересное: указываем апстримы, то есть адреса прокси-серверов, на которые будут передаваться те или иные подсети или домены. В нашем случае — это прокси i2pd (127.0.0.1:4444) для доменов ».i2p» и Tor (127.0.0.1:9050) — для доменов ».onion». Для i2pd рекомендую указать именно http-прокси, так как этот режим работы более удобен для управления адресной книгой и добавления новых коротких i2p-адресов прямо через браузер. Также возможно указание параметра «upstream none», который отвечает за прямое соединение прокси-сервера с конкретными адресами и доменами вне зависимости от других правил.

584e8a2cc07a04a9614a7392fec84044.jpg

upstream none "200::/7" # Подсеть Yggdrasil Network
upstream http 127.0.0.1:4444 ".i2p"
upstream socks5 127.0.0.1:9050 ".onion"

Опускаемся ниже по файлу и комментируем строку «Allow» с локальным адресом, так как подключаться мы будем не с локальной машины. Если в конфигурационном файле нет ни одного значения «Allow», tinyproxy принимает подключения с любых адресов.

7d5a4ada5d82dfdd0df1b2511da413a0.jpg

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

53a4d91a19b79ced0d3bea27b2c61408.jpg

Сохраняем изменения и перезапускаем tinyproxy:

Ctrl + S - Сохранение изменений
Ctrl + X - Выход из текстового редактора
systemctl restart tinyproxy - Рестарт tinyproxy

В настройках браузера назначаю HTTP-прокси. Естественно, на хостовой машине должен быть установлен Yggdrasil. Порт по умолчанию 8888. Кажется, всё работает корректно: проверка IP-адреса показала адрес сервера, на котором только что был установлен tinyproxy.

58d0bb063aecf64eb2ecc18329a57434.jpg

Снова открываю конфигурационный файл прокси-сервера и удаляю домен ».onion» у прокси сети Tor: upstream socks5 127.0.0.1:9050. Такой вид строки означает, что все соединения кроме Yggdrasil (отмечен в upstream none) и ».i2p» должны направляться в Tor. Перезапустив tinyproxy, можно проверить поведение через браузер.

По состоянию на 2021 год такая конфигурация при установке старой версии работать не будет: выход в интернет по-прежнему происходит с IP-адреса сервера. Если убрать подсеть Yggdrasil и попробовать снова, tinyproxy наконец начнет работать корректно.

Возвращаемся к теме об использовании актуальной версии программного обеспечения, а не устаревших пакетов из репозиториев моего любимого дистрибутива. Начиная с версии 1.12 tinyproxy будет корректно работать с обозначениями IPv6-подсетей, однако на момент написания статьи последний релиз — 1.11. Он не умеет корректно воспринимать подсети IPv6. Говорить о более старом пакете из репозитория Debian вовсе не нужно.

Заменим устаревший бинарный файл tinyproxy на новый, который мы скомпилировали несколько минут назад:

rm /usr/bin/tinyproxy
cp ./src/tinyproxy /usr/bin/

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

468ef1e70085b8d756f01b233d241617.jpg

Открываю конфигурационный файл через редактор nano с флагом -l, чтобы отображались номера строк, и комментирую проблемные строчки. Это устаревшие параметры, которые новая версия программы не хочет воспринимать. Причина для зависания сомнительная, но всё же.

edf942fa914637aa2c1d609d1d289712.jpg

Если попробовать запустить tinyproxy, опять увидим зависание. Открываю файл сервиса systemd nano /lib/systemd/system/tinyproxy.service и немного упрощаю алгоритм запуска. Возможно, это не самое православное решение, но лишь бы работало: комментирую параметр «EnvironmentFile» и меняю строку «ExecStart», явно указывая путь до конфигурационного файла.

e572ea079fc999e51b7fc59a3a68f2ad.jpg

Необходимо выполнить команду systemctl daemon-reload, чтобы изменения в сервисном файле вступили в силу. Обновленный tinyproxy запустился.

Кстати, tinyproxy имеет веб-страницу мониторинга, доступную по умолчанию по адресу http://tinyproxy.stats. Естественно, открыть эту страницу можно только через сам прокси-сервер.

be99a718ac0620f930a2e4e626fb491b.jpg

Проверка адреса Yggdrasil также показывает, что мы сидим не со своего адреса, а с адреса сервера, где установлен tinyproxy. Смена адреса Yggdrasil через наш прокси теперь также работает. Более того, можно открыть любой домен из сетей I2P или Tor.

В браузере отображается адрес IPv6 Yggdrasil, который принадлежит прокси-серверуВ браузере отображается адрес IPv6 Yggdrasil, который принадлежит прокси-серверу

Если вам не нужен выход в IPv6-сети через прокси-сервер, по сути дела вы можете использовать исключительно устаревший пакет из репозитория вашей операционной системы без дополнительной мороки. Также кто-то сочтет лайфхаком предварительную установку полноценного пакета, чтобы создался файл службы tinyproxy, а затем обновит файл сервиса, как это сделано в примере выше. Ваш сервер — вам и решать, как вы будете его администрировать.

На этом конфигурацию мультисетевого прокси-сервера можно считать завершенной. По аналогии с показанным вы можете добавлять любые апстримы для других скрытых сетей или отдельных доменов и использовать единственный прокси-сервер на всех ваших устройствах для любых приложений, при этом не утруждая себя установкой дополнительно ПО на каждый девайс (кроме Yggdrasil).

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

Оригинальная статья опубликована в блоге дата-центра ITSOFT и является текстовой версией видео.

© Habrahabr.ru