Вы, вероятно, знаете главные особенности скрытых сервисов:
- оконечное шифрование;
- сокрытие местоположения;
- защита от подмены данных;
- обход файрвола.
Возможно, вы когда-нибудь слышали о том, как ведут себя узлы с флагом HSDir. Они могут узнать о существовании сайта, даже если его владелец нигде не размещал информацию о нем. Эта атака и подобные ей будут невозможны в будущих поколениях скрытых сервисов, но противостоять им можно прямо сейчас.
Благодаря протоколу Tor, вы можете предотвратить любое подключение к вашему сайту, без вашего разрешения. Мы не говорим о странице входа на example.onion, мы говорим о невозможности для случайных людей, узнать, что example.onion запущен или что он даже существует.
Мы говорим о HiddenServiceAuthorizeClient (на стороне сервера) и HidServAuth (на стороне клиента), параметрах файла torrc, которые вы можете найти в руководстве Tor.
Есть два способа использовать их: основной и частный. Их суть:
- сервер говорит процессу Tor сгенерировать несколько токенов;
- оператор сервера выдет токены каждому пользователю, который хочет получить доступ к его сайту;
- пользователи сообщают процессу Tor о своих токенах и затем подключаются.
После этого дальнейшая аутентификация происходит без участия пользователя.
Основной:
- может быть определено до 50 различных токенов (пользователей);
- все пользователи подключаются к одному адресу;
- HSDir знают что скрытый сервис существует (но не могут к нему подключиться без токена).
Частный:
- может быть определено до 16 различных токенов (пользователей);
- каждый пользователь подключается к разным адресам;
- HSDir не знают что скрытый сервис существует (а даже если бы и знали, все равно не могут к нему подключиться без токена).
Мы знаем, для того чтобы создать скрытый сервис надо добавить две строчки в файл torrc. Создадим два сайта:
HiddenServiceDir /usr/local/var/lib/tor/foo_service/
HiddenServicePort 12623
HiddenServiceDir /usr/local/var/lib/tor/bar_service/
HiddenServicePort 54829
foo_service будет использовать основную авторизацию, а bar_service — частную. Добавим по три пользователя каждому сайту:
HiddenServiceDir /usr/local/var/lib/tor/foo_service/
HiddenServiceAuthorizeClient basic Alice,Bob,Charlie
HiddenServicePort 12623
HiddenServiceDir /usr/local/var/lib/tor/bar_service/
HiddenServiceAuthorizeClient stealth David,Earl,Fred
HiddenServicePort 54829
Перезапустим Tor, теперь каталог каждого сервиса будет содержать три файла: client_keys
, hostname
, и private_key
. Но нас интересует только hostname. Обычно он содержит только одну строчку с адресом сайта. Вот содержимое наших:
foo_service/hostname
bcxmhwc2iqcrcknh.onion n62CiiB2LC9vjlwNm2iwEw # client: Alice
bcxmhwc2iqcrcknh.onion QyfrjJhHuVj0uR+X6BK61w # client: Bob
bcxmhwc2iqcrcknh.onion Z/ghYM8WG0eXYp9MvYntcw # client: Charlie
bar_service/hostname
ovxfhd37q7ntkobe.onion 2owiKJaf2RSIFpCxMIcZMh # client: David
m324vced6pkv5tdx.onion VUXx3piRLBPGUnBbVt93zR # client: Earl
34dxzb72fbewytse.onion 5FLhOZdz3elEMbqjdnAIQB # client: Fred
Теперь владелец сайта должен передать строчку Алисы Алисе, строчку Боба Бобу и так далее.
А Алиса должна найти и отредактировать файл torrc, добавив в него:
HidServAuth bcxmhwc2iqcrcknh.onion n62CiiB2LC9vjlwNm2iwEw auth-for-foo
Где auth-for-foo не является обязательным параметром. Просто чтобы не забыть для чего эта строка.
Если вы заинтересованы в том, как работает основная/частная авторизации клиента, посмотрите раздел 2 спецификации.
Например, надавно вышедший мажорный релиз Onionshare поддерживает частные скрытые сервисы.