Tor2web — создание анонимных сервисов
Приветствую всех! Пробежавшись по страничкам хабра, ударившись в поиск, не нашел ни одного упоминания про проект Tor2web.
Tor2web — проект, предлагающий нам возможность использования и создания скрытых сервисов в сети Tor. Для этого представлен механизм «Hidden Services», позволяющий создавать анонимные серверные приложения, принимающие соединения по TCP, но не имеющие конкретного адреса и месторасположения.
Основное применение — публикация контента в Web с скрытием источника распространения. Дабы распространять контент не требуется фиксированный IP-адрес или регистрация доменного имени. Доступ к контенту осуществляется через сеть Tor. Ограничением данной возможности является то, что все связано с использованием браузерного клиента Tor, установка которого иногда приводит к затруднениям и не всегда целесообразна из-за привязки к определенному настроенному web-браузеру. Дабы упростить все это и унифицировать, был организован проект Tor2web, в рамках которого создан «транспорт» между реальным сервером и сетью Tor, действующий наподобие web-прокси.
Tor2web позволяет осуществлять работу с существующими серверами (сервисами) с задействованием механизмов сети Tor и шифрованием, что немало важно. Тем самым организовать распространение контента с сервера, при этом скрыв сам источник. Tor2web может использоваться как шлюз между сетью Tor и Интернетом (добровольно).
О песочнице
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
О модерации
Не надо пропускать:
Свой tor2web-сервис при помощи Nginx и Lua
Обсудим, как сделать шлюз из Интернета в скрытые сайты Tor.
Сеть Tor — это система прокси-серверов, позволяющая устанавливать анонимное сетевое соединение. С помощью Tor можно анонимно подключаться к обычным серверам и хостить непрослушиваемые серверы в самой сети Tor. В последнем случае создается скрытый сервер в зоне onion. Имя сервера включает 16 букв и цифр (фингерпринт).
Как можно заходить на скрытые серверы:
Проект Tor2web-3.0?
Tor2web-3.0 — важная часть проекта GlobaLeaks, которая облегчает доступ пользователей сети к скрытым серверам.
Tor2web-3.0 устанавливается как отдельная служба. Код написан на Python. К Tor2web-3.0 практически нет нареканий, но мне хотелось избежать дополнительного участника (пользователь — Nginx — Tor2web-3.0 — Tor — целевой сайт). Кроме того, мне не по душе сетевой софт, написанный на Python.
Polipo?
Polipo — HTTP-сервер, который умеет перенаправлять подключения в SOCK5-сервер. Раньше Polipo использовался для этой цели в составе Tor-браузера.
Можно было бы выстроить цепочку: Nginx — Polipo — Tor. Как и в случае с Tor2web-3.0, возникает лишний участник, так как Nginx не умеет проксировать трафик через SOCK5-сервер. Кроме того, для нормального отображения сайтов хочется заменять в ответе сервера onion-ссылки ссылками на шлюз: s/.onion/.onion.xx/
Патчим Nginx?
Существует патч для Nginx, который добавляет возможность проксировать трафик через SOCK5-сервер. На самом деле, протокол SOCKS5 очень простой, поэтому странно, что до сих пор нет официального модуля. Это решение выглядит заманчивым, но оно не доведено до ума: пришлось бы патчить Nginx при каждом обновлении. Хочется иметь решение, которое бы работало на обычном Nginx из коробки Debian Wheezy. Кроме того, нет возможности заменять ссылки в ответе сервера.
Пишем модуль для Nginx на Lua
Nginx давно поддерживает возможность встраивать сценарии на Lua. Коду на Lua предоставляется широкий круг возможностей, в том числе манипуляции с сокетами прямого доступа. К сожалению, модуль для подключения к SOCKS5-серверу я не нашел, поэтому написал свой. Для каждого запроса устанавливается соединение с программой Tor через порт 9050, проходит рукопожатие SOCKS5 и передаётся адрес целевого сайта. После этого сокет используется, как если бы это был прямой сокет к целевому сайту. Запрос пользователя считывается в память, редактируется и передаётся серверу. Ответ сервера считывается, редактируется (замена ссылок) и передается пользователю. Все операции неблокирующие. Эту часть я оформил как отдельный модуль onion2web.
При первом подключении к сайту пользователь видит заглушку с формой подтверждения захода на сайт. Это нужно, чтобы нельзя было включать картинки со скрытых сервисов в страницы обычных сайтов.
Модуль socks5 содержит функции, с помощью которых сокет пробрасывается через SOCK5-сервер. Функции описаны на страничке модуля. Модуль onion2web содержит одну функцию handle_onion2web, которая обслуживает tor2web-шлюз. Пример использования см. ниже. Есть возможность задать адрес и порт тора и отключить форму подтверждения захода на сайт.
Как поднять свой tor2web-шлюз
Нужны домен, сервер и wildcard SSL-сертификат на этот домен.
В домене нужно прописать всем поддоменам IP-адрес нашего сервера:
На сервере потребуется Tor, Nginx со свежим ngx_lua и мой модуль onion2web для подключения к SOCKS5-серверу из Nginx. В Debian Wheezy есть пакет nginx-extras, который содержит слишком старый ngx_lua. (Этой старый ngx_lua не поддерживает некоторых используемых методов, например, ngx.req.raw_header.) Версия nginx-extras из wheezy-backports содержит достаточно свежий ngx_lua. Модуль onion2web можно установить через luarocks (это автоматически установит модуль socks5 как зависимость).
Установка для Debian Wheezy:
В Nginx создаем такой сайт:
Домен фигурирует в конфиге в двух местах: server_name и внутри Lua-кода.
Что такое VPN, Proxy, Tor? Разбор
Анонимность и конфиденциальность — это прекрасные понятия. Но в последнее время создается ощущение, что в сети оба понятия стили недостижимыми. Поэтому даже я, совсем не параноик периодически задумываюсь об инструментах, таких как VPN, Proxy и Tor. Вы наверняка слышали эти слова, а может быть даже регулярно пользуйтесь пользуетесь этими технологиями для сохранения анонимности, обхода блокировок, просмотра американского Netflix или банально для доступа к корпоративной сети.
Proxy
Среди троицы — VPN, Proxy, Tor — самая простая технология — это именно Proxy. С неё и начнём.
Proxy переводится с английского, как представитель, уполномоченный, посредник. Иными словами, прокси-сервер — это сервер-посредник.
Технология работает также просто как и звучит. Представьте, что ваш трафик в сети — это чемодан. Вы хотите доставить этот чемодан по определенному адресу, но не хотели бы делать это сами, раскрывая свое местоположение и имя. Поэтому вы нанимаете посредника, который сам доставит чемодан по нужному адресу не раскрывая вашу личность и настоящий адрес. Просто и удобно. Более того такие посредники достаточно многофункциональны и пригодятся не только для банального обеспечения конфиденциальности в сети:
Типы Proxy
Во-первых, сама по себе технология очень ограниченная. Прокси-серверы узкоспециализированы, поэтому на каждый тип интернет-соединения нужен свой тип прокси-сервера.
Например, для FTP-соединения (File Transfer Protocol) нужен FTP-прокси. Для HTTP и HTTPS также два отдельных HTTP- и HTTPS-прокси сервера.
Это серьёзное ограничение, поэтому еще есть отдельный тип прокси-серверов SOCKS-прокси.
Эта вариация протокола умеет работать с разными типами трафика. Но она работает медленнее, поэтому также подходит не для всех.
Безопасность Proxy
Но это половина беды. Все виды прокси объединяет главная, ключевая проблема — проблемы с безопасностью.
Потому как прокси-сервера дополнительно никак не шифруют трафик. То есть HTTP трафик вообще не будет никак шифроваться. А HTTPS будет зашифрован также как и при обычном интернет соединении: при помощи SSL-шифрования. А это огромная проблема. И чтобы представить масштаб трагедии, давайте вспомним аналогию с чемоданом.
Пользоваться прокси-сервером — это всё равно что передавать данные посреднику в чемодане без пароля. Делать такое можно только в случае если 100% доверяете посреднику. И конечно же стоит остерегаться бесплатных прокси-серверов с сомнительной репутацией. Ведь воспользоваться непроверенным бесплатным прокси, это все равно, что доверить доставить мешок бесплатному курьеру по объявлению на автобусной остановке.
Как же здорово, что во время блокировки Telegram мы все дружно пользовались проверенными надежными прокси. Так ведь?
Но есть технология, которая обладает большинством достоинств прокси и лишена большинства недостатков — это VPN или Virtual Private Network — виртуальная частная сеть.
Изначально эта технология задумывалась не как средство анонимизации трафика. Ее задачей было удаленно объединять компьютеры в единую сеть. Например, для доступа к локальной сети головного офиса из регионального филиала или из дома.
Принцип работы VPN похож на прокси. Трафик точно также, прежде чем попасть в интернет, сначала попадает на промежуточный сервер. Это с одной стороны позволяет вам, например, получить доступ к заблокированным ресурсам. Потому как для интернет провайдера, вы направляете запрос на VPN сервер, а не на запрещенный сайт.
С другой стороны, это позволяет вам сохранить анонимность, так как сайт, на который вы попали думает, что запрос пришел с IP-адреса VPN-сервера, а не вашего. Но прокси-серверы, делают по сути тоже самое, так в чем же тогда разница?
Ключевое отличие VPN от Proxy — это сквозное шифрование. Весь трафик проходящий через VPN-сервер защищен на всём пути от точки входа до точки выхода. А всё потому, что при включенном VPN между вашим устройством и VPN-сервером создается зашифрованный канал связи, который защищает все данные от хакерских атак.
Опять же если сравнивать с прокси, в первом случае мы передаем открытый чемодан с информацией посреднику, которого либо могут в любой момент обокрасть, либо он сам украдет данные. В случае VPN мы передаем данные по закрытому туннелю проникнуть в который крайне сложно. Более того VPN работает со всеми типами данных и шифрует вообще весь трафик со всех приложений, а не только трафик вашего браузера.
При этом в отличии от прокси, для работы VPN на вашем устройстве обязательно должен быть установлен VPN-клиент в виде отдельного приложения или расширения браузера.
Впрочем, поставить приложение для рядового пользователя куда проще, чем копаться в настройках прокси где-то в настройках браузера.
Бесплатные VPN-сервисы
Получается, что VPN во всем лучше прокси? Не всегда.
Дело в том, что не все VPN-сервисы одинаково полезны. Как и в случае с прокси, бесплатные VPN-сервисы не раз были пойманы в слежке за пользователями и продаже их данных.
Например, VPN-сервис Betternet, который насчитывал 38 миллионов пользователей использовал целых 14 библиотек для слежки за пользователями.
А сервис Hola продавал IP-адреса бесплатных пользователей злоумышленникам. То есть преступники могли использовать ваш IP-адрес для своих делишек.
SHADOWSOCKS
С другой стороны, не все прокси-сервисы плохие. Например, существует особый тип прокси, который называется Shadowsocks. По сути, это SOCKS-прокси на стероидах.
Тут есть и мощное шифрование, и скрытие трафика, и возможность обходить различные блокировки. Есть клиенты как для компьютера, так и для смартфона, позволяющие оставаться под защитой постоянно. А создана эта штука была нашим дружественным братским китайским народом с целью обхода великого китайского файерволла.
Отсюда и несколько приятных особенностей Shadowsocks. Например, для элегантного обхода блокировок, он умеет выборочно маскировать трафик. Вы сами выбираете что прятать, а что нет.
Например, находитесь вы в Китае и хотите проверь почту на Gmail, или свят-свят — посмотреть YouTube. Благодаря Shadowsocks, вы сможете сделать и это, и одновременно посещать сайты, доступные только из Китая.
В свою очередь, VPN-сервисы зашифровывают весь трафик, поэтому открыть сайты, доступные только в Китае, вы уже не сможете.
Но это не значит, что Shadowsocks лучше VPN. В отличие от VPN-сервисов, Shadowsocks не создан для защиты конфиденциальности и анонимности пользователя. При использовании Shadowsocks пакеты данных остаются без шифрования. Это сделано специально, чтобы ваши данные были больше похожи на обычный HTTPS-трафик и не вызывали подозрений. Поэтому Shadowsocks подходит только для обхода блокировок? но никак не для безопасности или подключения к корпоративной сети. В этом плане VPN — вне конкуренции. С поправкой на то, что пользоваться нужно только проверенными сервисами с хорошей репутацией.
И, наконец, самый хардкорный способ анонимизации в сети — Tor. Что это и правда ли, что Tor такой безопасный?
Tor расшифровывается как The Onion Router и он использует так называемую луковую маршрутизацию. Твои данные — это сердцевина луковицы, а их защита — слои вокруг. Что это значит?
Для анонимизации Tor, также как прокси и VPN, пропускает трафик через промежуточные серверы. Но Только в случае с Tor их не один, а три, и называется они узлами.
А вот теперь смотрите, ваш трафик проходит через три узла:
Во-первых, чтобы скрыть ваш IP-адрес. Каждый узел знает IP-адрес только узла, который стоит в цепочке перед. Поэтому пока ваш трафик дойдет до третьего узла, исходный IP потеяется.
Во-вторых, ваш трафик обернут в три слоя защиты. Поэтому первый и второй узел не видят вашего трафика, они только снимают слои защиты как, как кожуру с луковицы, а вот достает сердцевину и отправляет запрос в интернет только третий выходной узел.
Эти узлы разворачивают сами пользователи сети на своих компах. Чем больше пользователей, тем безопасней и тем быстрее работает сеть.
А доступ к сети осуществляется через специальный браузер Tor Browser, основанный на Firefox. Его улучшили дополнениями, запрещающими сайтам следить за тобой. Например браузер умеет отличать все скрипты на сайтах, фактически запрещая собирать любые данные пользователя, или заставляет сайты принудительно использовать шифрование. Звучит очень безопасно, но на практике, это не так.
Во-первых, Tor очень не любят правоохранительные органы, а сам факт использования Tor легко отследить. Поэтому, просто используя Tor Browser, вы уже можете привлечь лишнее внимание. Иными словами лучше использовать Tor в связке с VPN.
Во-вторых, владельцы выходных узлов очень рискуют. Ведь именно они несут ответственность за все действия, которые совершают пользователи сети.
В-третьих, те же владельцы выходных узлов видят весь ваш трафик, а значит они могут отследить вас по косвенным признакам. Именно поэтому выходные узлы больше всего любят создавать сотрудники правоохранительных органов.
Более того, из-за многослойного шифрования сеть Tor работает очень медленно, половина сайтов прост отказывается корректно работать через Tor Browser.
Итоги
Что в сухом остатке? Если вы беспокоитесь за свою безопасность в сети, то самым оптимальным способом защиты будет VPN. Но не забывайте, что использовать надо только надежные VPN-сервисы с хорошей репутацией. Часто информацию о надёжности того или иного сервиса можно найти в интернете, в специальных статьях. Также помните, что хороший VPN может стоить денег, вернее его создатели могут брать за его использования какую-либо сумму. Ведь бесплатный сыр бывает только в мышеловке.
Единая точка выхода в web, I2P, TOR и обход блокировок
Преамбула… Даная статья была написана ещё летом но, по независящим от автора причинам, немножко подзадержалась.
Муки выбора
Базовая настройка tinyproxy
Итак, настроим базовые перенаправления, чтобы в обычный web ходило напрямую, а в *.i2p и *.onion через соответствующие вышестоящие (parent) proxy.
Для начала практически все параметры в конфиге остаются по умолчанию.
Список «zapret.info»
Ну что ж, связка прокси базово работает, теперь начинается самое интересное — обход блокировок роскомнадзора. К сожалению, tinyproxy не поддерживает внешние файлы со списком parent proxy, но это не должно быть препятствием. Ведь мы можем сгенерировать монолитный конфиг «on the fly».
Копируем имеющийся конфиг tinyproxy под новым именем:
Слегка правим новый /etc/tinyproxy/tinyproxy.conf.static : LogLevel Info → LogLevel Error
… и собственно скрипт /usr/local/bin/tinyproxy-cfg-gen.sh к нему:
Наконец вишенка на торте, редактируем tinyproxy.service под наши нужды — sudo systemctl edit tinyproxy.service :
А теперь, со всем этим безобразием мы попытаемся взлететь ©
How it works?
Вдумчивый читатель безусловно поинтересуется, Для чего такие танцы с бубном? Что ж, в заключении не мешает прояснить некоторые моменты. Пойдём прямо по пунктам предыдущего раздела.
Данная связка работает уже неделю 2,5 месяца. Глюкобагов, пока, вроде бы не замечено. готовые конфиги и скрипты живут на гитхабе, PR приветствуются!
Межсетевой прокси: Доступ в Интернет, Tor, I2P и другие сети через Yggdrasil
Для выхода в скрытые сети вроде I2P, Tor, Zeronet и прочие, необходимо предварительно установить соответствующую программу. Подобная программа является окном в сеть, скрытую для постороннего наблюдателя, обеспечивая всю внутреннюю логику: криптографию, взаимодействие с другими узлами, обращение к стартовому узлу и тому подобное, что не надо знать обычному пользователю, дабы сберечь крепкий сон.
Когда клиент сети установлен, необходимо настроить браузер или другое программное обеспечение. Чаще всего программные клиенты скрытых сетей предоставляют для конечного пользователя HTTP- или SOCKS-прокси. Это стандартные протоколы, которые поддерживаются всеми веб-браузерами, многими мессенджерами и даже некоторыми играми. Благодаря прокси программного клиента скрытой сети, можно направить трафик практически любого приложения в скрытую сеть.
Путешествуя по обычному интернету мы не задумываемся над доменными зонами: ru, com, org и так далее, потому что все они открываются одинаково. Однако, настроив браузер для открытия сайта в сети I2P, вы не откроете onion-домен из сети Tor. Для этого нужно будет сменить настройки прокси-сервера. Поковырявшись с конфигами, вы сможете упростить эту задачу, но, если добавить сюда еще сеть Yggdrasil, тема сильно усложнится. Таким образом настройки вашего браузера будут неизменно усложняться, тем самым создавая поле для потенциальных утечек запросов с вашего настоящего IP-адреса на сомнительные ресурсы. И это при условии, что программы для доступа во все названные сети должны быть установлены на каждое из ваших устройств, где вы хотите ими пользоваться.
Ликбез по безопасности
Установка и настройка
Не будем тратить время на демонстрацию установки Tor, I2P и Yggdrasil. Более того, список скрытых сетей может быть дополнен на ваше усмотрение. Недостающую справочную информацию на тему установки вы без труда найдете в интернете. Итак, имеем свежий слабенький сервер с установленными клиентами сетей Yggdrasil, I2P и Tor.
Переходим в гит-репозиторий tinyproxy. Копируем ссылку для клонирования. Чтобы клонировать репозиторий на сервер, необходимо предварительно установить git командой apt install git (если работаете не от суперпользователя, добавляйте в начало команд слово sudo ).
Релизы tinyproxy на GitHub распространяются также в виде исходного кода и собираются аналогичным образом, поэтому большой разницы между сборкой релиза и актуального состояния гит-репозитория нет.
Уже сейчас можно запустить прокси-сервер, однако все файлы установились в текущую директорию, а файл сервиса для systemd вовсе отсутствует. Это значительная помеха для неопытного пользователя.
Опускаемся ниже по файлу и комментируем строку «Allow» с локальным адресом, так как подключаться мы будем не с локальной машины. Если в конфигурационном файле нет ни одного значения «Allow», tinyproxy принимает подключения с любых адресов.
Для комфортного использования необходимо закомментировать все параметры «ConnectPort», так как нет нужды ограничивать себя и наших пользователей при подключении к нестандартным портам.
Сохраняем изменения и перезапускаем tinyproxy:
В настройках браузера назначаю HTTP-прокси. Естественно, на хостовой машине должен быть установлен Yggdrasil. Порт по умолчанию 8888. Кажется, всё работает корректно: проверка IP-адреса показала адрес сервера, на котором только что был установлен tinyproxy.
По состоянию на 2021 год такая конфигурация при установке старой версии работать не будет: выход в интернет по-прежнему происходит с IP-адреса сервера. Если убрать подсеть Yggdrasil и попробовать снова, tinyproxy наконец начнет работать корректно.
Заменим устаревший бинарный файл tinyproxy на новый, который мы скомпилировали несколько минут назад:
Казалось бы, что все хорошо, но теперь служба постоянно зависает при запуске. Попробуем разобраться в причине. Если явным образом передать исполняемому файлу конфигурационный файл, увидим номера строк, на которые ругается tinyproxy.
Если попробовать запустить tinyproxy, опять увидим зависание. Открываю файл сервиса systemd nano /lib/systemd/system/tinyproxy.service и немного упрощаю алгоритм запуска. Возможно, это не самое православное решение, но лишь бы работало: комментирую параметр «EnvironmentFile» и меняю строку «ExecStart», явно указывая путь до конфигурационного файла.
Проверка адреса Yggdrasil также показывает, что мы сидим не со своего адреса, а с адреса сервера, где установлен tinyproxy. Смена адреса Yggdrasil через наш прокси теперь также работает. Более того, можно открыть любой домен из сетей I2P или Tor.

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















