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

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

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

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

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

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

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

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

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

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

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

На "голом" сервере скрипт 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.

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

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 принимает подключения с любых адресов.

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

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

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

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

Снова открываю конфигурационный файл прокси-сервера и удаляю домен ".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.

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

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

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

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

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

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

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

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

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

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

Комментарии (15)


  1. gavk
    24.07.2021 12:18
    +1

    Собрать пакет из новой версии и его установить никак? Зачем показывать как делать не надо?


    1. pureacetone Автор
      24.07.2021 12:41

      Своеобразный ответ на "а почему бы просто не сделать apt install tinyproxy". Возможно, не самая удачная реализация ответа, но как смог)


  1. Vindicar
    24.07.2021 16:16

    Я верно понимаю, что при такой настройке .i2p/.onion сайт может встроить на страницу трекер из открытого интернета, и наш браузер его ничтоже сумнящеся запросит?


    1. Aelliari
      24.07.2021 16:22

      Да, может, вопрос насколько это критично в вашем случае - решать только вам. Мне, например, было бы индифферентно, что какой то левый чувак получит ip моего ВПН сервера


      1. pureacetone Автор
        24.07.2021 16:30

        Ко всему надо подходить с умом. Обычно я выпускаю весь трафик (кроме I2P и Yggdrasil) через Tor, а если есть дополнительные левые прокси-сервера - перенаправляю все обращения в клирнет через них. Таким образом никакой запрос не уходит с IP-адреса самого сервера.


    1. dartraiden
      24.07.2021 17:23

      Там ещё больше вариантов. Tor Browser не просто так поставляется с определенным размером окна (который не рекомендуется менять) и прочими настройками.

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


      1. pureacetone Автор
        24.07.2021 17:29

        Не определился с ответом между вариантами с шуткой про заказчика этой статьи, либо чем-то конструктивным)


        1. dartraiden
          24.07.2021 17:30
          +1

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

          Это как заход на свой VPS от рута (вместо того, чтобы использовать sudo по мере надобности). Вроде, ничего страшного, но формирует нехорошую привычку.


          1. pureacetone Автор
            24.07.2021 17:34

            Можно было бы заабузить статью упоминаниями про безопасность: от JS до экзотических фингерпринтов слоя пыли на южном мосте материнской платы, но не стал. Если напишу такую статью когда-нибудь, добавлю сюда ссылку. В целом же считаю, что стать "хацкером" по одной статье на Хабре невозможно и всё это скорее научпоп для студентов-айтишников.


          1. elfukado
            25.07.2021 09:00

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


  1. Oxyd
    25.07.2021 03:27
    +4

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

    rm /usr/bin/tinyproxy

    cp ./src/tinyproxy /usr/bin/

    Не надо так делать! Примерно по той-же причине, что и коммент ниже + разведение бардака в системе. Для собственноручно собранных бинарей есть специальное место: /usr/local/bin А потом просто в оверрайде сервиса переписать путь вызова на /usr/local/bin/tinyproxy А ещё лучше добавить директиву Environment="PATH=/usr/local/bin:/usr/sbin:/usr/bin" и убрать пути из директив запуска бинарников.

    Открываю файл сервиса systemd nano /lib/systemd/system/tinyproxy.service и немного упрощаю алгоритм запуска.

    За прямое редактирование вендорского юнита, надо бить логарифмической линейкой по рукам! ;-) Оверрайды, для кого придумали? Команду systemctl edit unitnameдля кого? Да даже наличие одноимённого юнита в /etc/systemd/system полностью заменяет вендоринг. Как вы думаете, во что превратится ваш юнит, когда прилетит свежая версия пакета? Правильно! Вендорский юнит, который вы отредактировали, превратится в тыкву, будучи перезаписанным пакетным менеджером — файлом из свежей версии пакета!

    PS: И да. Утилита ifconfig не везде есть... И уже очень дааавно. В современных дистрибутивах эту deprecated, по очень многим причинам, утилиту заменяет ip a, а ifconfig надо ставить из отдельного пакета. Так что это тоже не очень хороший совет.

    PPS: у меня почти готова статья, на эту-же тему, только там, сделан акцен немного на другое применение tinyproxy и tor.


    1. pureacetone Автор
      25.07.2021 07:29

      Спасибо за комментарий. Ждем вашу статью)



  1. connected201
    04.09.2021 15:59

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


    1. pureacetone Автор
      04.09.2021 16:42

      3proxy - аналог, который в том числе работает на Windows. Его настройки выглядят иначе, но к вашему удовольствию официальная документация есть на русском языке. Nginx - это веб-сервер, поэтому я очень сомневаюсь, что от него можно добиться даже части описанного функционала прокси-сервера.