Сейчас пятница, скоро выходные, есть время для экспериментов.
Если вы когда-нибудь слышали про Tor, то и про onion сайты должны были слышать. Я покажу, что запустить такой скрытый сервис веб-разработчик или сисадмин может за полчаса: 5 минут вы будете читать этот текст, 15 минут — нажимать клавиши, а последние 10 — раздумывать, нужно ли оно вам.
- Сложность: проще установки OpenVPN или Wireguard,
- Ожидания: у вас под рукой Linux, macOS, FreeBSD или другая Unix-подобная система,
- Результат: адрес .onion с вашим сервисом в сети tor.
Поговорим о мотивация
Скрытый сервис запускают для двух целей:
- авторы прикрывают им свой зад,
- авторы дают посетителям возможность прикрыть свой зад.
Первое важно нелегальным маркетплейсам. Это нам неинтересно. Второе полезнее: если мы заботимся об анонимности посетителей, мы можем поднять onion-версию своего сайта. HTTPS это безопасно: буква S именно это и означает. Но не анонимно. Tor позволяет сделать безопасно и анонимно.
Я буду рад, если друзья запустят свои onion сервисы. Поэтому вы это читаете.
Запустим сервис
Давайте договоримся, что сервис у нас уже написан. Сервис торчит каким-то портом. Я буду делать onion адрес для своих блогов. Это HTML-странички, их раздает веб-сервер Caddy. У вас это может быть сайт с рецептами блюд из манго, публичное API с котятами или даже SSH.
Если же сервиса у вас нет, а провести опыт хочется, предлагаю запустить встроенный в Python веб-сервер.
|
|
Теперь нас слушают по порту 8765. Откроем браузер по http://127.0.0.1:8765 и увидим содержание директории на диске.
Скрываемся
“Тором” называется не то, о чем большинство думает. Это акроним и означает он “The Onion Router”. А всем известный браузер правильно называть “Tor Browser”.
Давайте же установим себе именно tor-не-бразуер. Для macOS и Debian-подобных Linux-дистрибутивов используйте менеджер пакетов. Обладатели других систем сами разберутся.
|
|
Теперь надо написать конфиг. Он обычно хранится в /etc/tor/torrc
. Впишем три строчки:
- указание не поднимать SOCKS-прокси,
- путь с парой публичного и приватного ключа,
- правило, как сопоставить виртуальный порт к порту на 127.0.0.1.
|
|
Если директории HiddenServiceDir
не существует, tor
при запуске сам ее создаст и
заполнит сгенерированными ключами и файлом hostname.
Нужно поднять несколько сервисов? Тогда продублируйте последние строчки с новым путем и другими портами.
Пора использовать нашу конфигурацию. Многие системы позволяют запустить tor сервисным менеджером. Не путайте с предыдущим использованием слова “сервис” — здесь подразумевается init процесс на уровне ОС: systemd, launchd или что-то другое.
|
|
Теперь tor
будет работать демоном даже после перезагрузки. Для одноразового запуска
сервисным менеджером пользоваться не обязательно:
|
|
Открываем только что сгенерированный файл /var/lib/tor/change_me_website/hostname
и
видим onion адрес до нашего сервиса. Вводим его в Tor Browser и делимся со всеми.
Остальными файлами в директории не делимся.
Бонус: получаем красивый адрес
- Сложность: нужны знания криптографии и навык компилировать код на C.
Как же DuckDuckGo получил duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion?
В спецификации адрес описывается так: base32(PUBKEY | CHECKSUM | VERSION) + ".onion"
.
Что это значит?
Мы уже знаем, что у каждого скрытого сервиса есть своя пара из публичного и приватного
ключа. Публичный ключ — это 256 бита1 или 32 байта. Чек-сумма — это 2 байта
из хэша2. А версия описывается байтом: сейчас актуальна третья, это \x03
. Если все
записать подряд и закодировать в base32, получим 57 символов3. Припишем туда
“.onion” и получим адрес.
Если генерировать много ключей, можно “намайнить” любые символы в начале. Есть готовые реализации таких переборщиков. Можно собрать mkp224o, оставить компьютер перебирать какие-нибудь смешные префиксы и уйти ужинать. Чем длиннее префикс пожелаете, тем дольше придется ужинать.
Для красивого “duckduckgo…” ужинать придется несколько месяцев. А то и годы.
Читаем больше
- Set up Your Onion Service от The Tor Project,
- Best Practices for Hosting Onion Services от Riseup Collective,
- Tor Rendezvous Specification от The Tor Project.
-
Человечество научилось делать безопасные алгоритмы, используя публичные ключи из 256 бит. Удивлены? Рекомендую познакомиться с кривой Curve25519. ↩︎
-
Чек-сумма считается таким образом:
H(".onion checksum" | PUBKEY | VERSION)[:2]
. ↩︎ -
Заинтересованный читатель может даже догадаться, какой символ будет последним. ↩︎