Как создать частный скрытый сервис

Вы, вероятно, знаете главные особенности скрытых сервисов:

  • оконечное шифрование;
  • сокрытие местоположения;
  • защита от подмены данных;
  • обход файрвола.

 

Возможно, вы когда-нибудь слышали о том, как ведут себя узлы с флагом 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 поддерживает частные скрытые сервисы.