Запускаем Tor Hidden Service

 Публичный пост
16 июня 2023  1198

Сейчас пятница, скоро выходные, есть время для экспериментов.

Если вы когда-нибудь слышали про Tor, то и про onion сайты должны были слышать. Я покажу, как превратить ваш сайт в такой "скрытый" сервис.

Скрытый сервис запускают для двух целей:

  1. чтобы прикрыть свой зад,
  2. чтобы дать возможность посетителям прикрыть свой зад.

Первое важно нелегальным маркетплейсам. Это нам неинтересно. Второе полезнее: если мы заботимся об анонимности посетителей, мы можем поднять onion-версию своего сайта. HTTPS это безопасно: буква S именно это и означает. Но не анонимно. Tor позволяет сделать безопасно и анонимно.

Веб-разработчик или сисадмин справится за полчаса: 5 минут вы будете читать этот текст, 15 минут — нажимать клавиши, а последние 10 — раздумывать, нужно ли оно вам.

  • Сложность: проще установки OpenVPN или Wireguard,
  • Ожидания: у вас под рукой Linux, macOS, FreeBSD или другая Unix-подобная система,
  • Результат: адрес .onion с вашим сервисом в сети tor.

Запустим сервис

Давайте договоримся, что сервис у нас уже написан. Сервис торчит каким-то портом. Я буду делать onion адрес для своих блогов. Это HTML-странички, их раздает веб-сервер Caddy. У вас это может быть сайт с рецептами блюд из манго, публичное API с котятами или даже SSH.

Если же сервиса у вас нет, а провести опыт хочется, предлагаю запустить встроенный в Python веб-сервер.

python3 -m http.server 8765

Теперь нас слушают по порту 8765. Откроем браузер по http://127.0.0.1:8765 и увидим содержание директории на диске.

Скрываемся

"Тором" называется не то, о чем большинство думает. Это акроним и означает он "The Onion Router". А всем известный браузер правильно называть "Tor Browser".

Давайте же установим себе именно tor-не-бразуер. Для macOS и Debian-подобных Linux-дистрибутивов используйте менеджер пакетов. Обладатели других систем сами разберутся.

apt install tor  # for Debian and Ubuntu
brew install tor  # for macOS

Теперь надо написать конфиг. Он обычно хранится в /etc/tor/torrc. Впишем три строчки:

  • указание не поднимать SOCKS-прокси,
  • путь с парой публичного и приватного ключа,
  • правило, как сопоставить виртуальный порт к порту на 127.0.0.1.
SocksPort 0
HiddenServiceDir /var/lib/tor/change_me_website/
HiddenServicePort 80 127.0.0.1:8765

Если директории HiddenServiceDir не существует, tor при запуске сам ее создаст и заполнит сгенерированными ключами и файлом hostname.

Нужно поднять несколько сервисов? Тогда продублируйте последние строчки с новым путем и другими портами.

Пора использовать нашу конфигурацию. Многие системы позволяют запустить tor сервисным менеджером. Не путайте с предыдущим использованием слова "сервис" — здесь подразумевается init процесс на уровне ОС: systemd, launchd или что-то другое.

service tor restart  # for Debian and Ubuntu
brew services restart tor  # for macOS

Теперь tor будет работать демоном даже после перезагрузки. Для одноразового запуска сервисным менеджером пользоваться не обязательно:

tor

Открываем только что сгенерированный файл /var/lib/tor/change_me_website/hostname и видим onion адрес до нашего сервиса. Вводим его в Tor Browser и делимся со всеми. Остальными файлами в директории не делимся.

Бонус: получаем красивый адрес

  • Сложность: нужны знания криптографии и навык компилировать код на C.

Как же DuckDuckGo получил duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion?

В спецификации адрес описывается так: base32(PUBKEY | CHECKSUM | VERSION) + ".onion". Что это значит?

Мы уже знаем, что у каждого скрытого сервиса есть своя пара из публичного и приватного ключа. Публичный ключ — это 256 бита или 32 байта. Чек-сумма — это 2 байта из хэша. А версия описывается байтом: сейчас актуальна третья, это \x03. Если все записать подряд и закодировать в base32, получим 57 символов. Припишем туда ".onion" и получим адрес.

(Примечение: Человечество научилось делать безопасные алгоритмы, используя публичные ключи из 256 бит. Удивлены? Рекомендую познакомиться с кривой Curve25519.)

(Примечание: Чек-сумма считается таким образом: H(".onion checksum" | PUBKEY | VERSION)[:2].)

(Примечание: Заинтересованный читатель может даже догадаться, какой символ в адресе всегда будет последним.)

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

Для красивого "duckduckgo..." ужинать придется несколько месяцев. А то и годы.

Читаем больше

8 комментариев 👇

И небольшой ликбез про то, как это всё устроено внутри и почему луковая маршрутизация должна работать вместе с HTTPS :)

  Развернуть 1 комментарий

@shultais, спасибо за комментарий!

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

Почему нужно продолжать посещать HTTPS сайты обычного интернета из Tor Browser: https://support.torproject.org/https/

Почему вам бесполезно выписывать HTTPS сертификаты для скрытого сервиса: https://community.torproject.org/onion-services/advanced/https/

Последняя ссылка подходит по теме поста.

  Развернуть 1 комментарий

@oskar, всё ок, по статистике его досматривают только 18% пользователей :) Но так и должно быть для не попсовых тем.

  Развернуть 1 комментарий

@shultais, А! Там твоя фамилия в названии канала! А! А!

  Развернуть 1 комментарий

А что по onionbalance и сопутствующим инструментам?)

  Развернуть 1 комментарий

@Arthur, спасибо, что упомянул. Я сейчас подробно о них написать не успею, но здорово увеличил список "Читаем больше".

  Развернуть 1 комментарий
Evgeni Pochechuev Предприниматель, Разработчик 17 июня 2023

Для меня всегда было вопросом, где арендовать сервер чтобы не было вопросов к использованию Тора, многие даже прямо прописывают что нельзя.

А из того возраста когда был готов использовать свой домашний комп в качестве сервера я уже вышел😀😀
Эх, времена мелких районных сетей, DC++ и энтузиазма))))

  Развернуть 1 комментарий

@pchchv, думаю, провайдеры запрещают использовать их сервера как Exit ноды. Это то, как обычному пользователю сети tor можно достучаться до "обычного" интернета. Через них всегда всякая грязь проходит.

Вот тут есть ветка комментариев бывшего владельца выходной ноды.

https://habr.com/ru/articles/357316/comments/#comment_11226542

Я в течении многих лет оператор выходной Tor-ноды. Был на допросах по многим вещам совершённым через мой IP в: местном отделе полиции, ОБЭП, ЦАО ГУ МВД, «отделе К». Изымали абсолютно всё железо (серверы, ноутбуки, жёсткие диски, флешки). Но после объяснения всего про Tor и как и почему это работает — «отпускали». Сейчас уже как год не беспокоят.

Только глубоко в профиль товарища предлагаю не лезть. Из-за последних постов в его блоге можно начать скрипеть зубами.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб