Tor — как вынести Hidden Service в отдельный инстанс.

Posted: 2016-04-24 in IT, Networks, Security
Метки:,

Сегодня я ещё немного расскажу об анонимной сети TOR, а точнее, о некоторых аспектах настройки Hidden Service-ов.

Допустим, у вас есть нода в этой сети, которая работает в Relay-режиме, проксирует как ваш траффик, так и сторонний.
И теперь вы хотите на этой же ноде параллельно поиграться со скрытыми сервисами. Я делал это на 23-й федоре, в которой SELinux включен перманентно в Enforcing. В такой конфиге обнаружил пару важных фич.

1). Пакет tor можно взять из двух репозитариев — можно из официального федоровского, а можно из репозитария проекта. Первое явное отличие в них — имя пользователя, от которого стартует нода. Это будет либо toranon, либо _tor. Фишка в том, что имя прописано в конфиге, и если пакет не родной — то SELinux может процессу tor отрезать яйки, и он не запустится. Решается правкой /etc/tor/torrc / скрипта запуска. Но лучше поставить пакет из федоровской репы — он там свежий, и его скрипты запуска и контексты селинукса пропатчены правильным способом.

2). Как мы знаем, скрытый сервис добавляется всего двумя строчками в конфиге:


HiddenServiceDir /path/to/tor-hs/keys/
HiddenServicePort 80 127.0.0.1:44080

Однако если его вписать в конфиг основной ноды, то мы столкнемся сразу с двумя проблемами:
* хидден-сервис упорно не хочет работать от имени toranon, ругаясь в логах при запуске на недоступность ключей в подкаталогах /var/lib/tor/hs_dir…., хотя проксирование при этом пашет. Причина — то ли в SELinux, то ли в параметрах юнита запуска (параметры ReadOnlyDirectories / ReadWriteDirectories в /usr/lib/systemd/system/tor.service).
* сам tor при запуске ругается на нежелательность совмещения в одном процессе прокси-релея и скрытых сервисов, предупреждая о рисках для анонимности и выехавшем отряде пативенов с демократическими газенвагенами.

Если возможности вынести скрытый сервис на другой физический сервер нет, то делаем так.
* из основного конфига убираем всякие строки насчет скрытых сервисов, пусть будет прокси-нодой, как и раньше. Доброе дело должно делаться. Без скрытых сервисов такая нода прекрасно работает без фиксов systemd-юнита и плясок вокруг селинукса.
* для каждого скрытого сервиса создадим отдельного linux-пользователя командой adduser, например так:

adduser hs1

* в /home/hs1 создадим подкаталог для ключей hs_keys и конфиг hs.tor с такими строчками:


ControlPort 11081
HashedControlPassword 16:[HEX-String]

SOCKSPort 0

HiddenServiceDir /home/hs1/hs_keys
HiddenServicePort 80 127.0.0.1:44080

ExitRelay 0
ExitPolicy reject *:*

Первая строка задаёт порт для 127.0.0.1, через который можно мониторить процесс с помощью утилиты arm или telnet на крайняк. Вторая строка — хэш пароля, защищающего порт мониторинга. Генерится этот хэш с помощью команды

tor --hash-password TEST_PASSWORD

Третья строка и последние две выключают режим проксирования (процесс будет только держать скрытый сервис, но не проксировать чей либо сторонний траффик параллельно), ну а оставшиеся строки задают каталог ключей (именно ключи определяют имя ресурса в сети) и номер вытащенного порта.

Затем прописываем запуск нашего хидден сервиса в rc.local таким способом:

su - hs1 -c "screen -dmS HS1 tor -f /home/hs1/hs.tor"

Что у нас в сухом остатке:
* проксирование/транзит и скрытый хостинг разнесены по разным процессам, и ничего не знают друг о друге — они запущены от разных логинов, у них своя память, своя статистика по аптайму и траффику, могут быть свои квоты на ресурсы и прочее.
* Мониторятся на разных портах и под разными паролями.
* можно отдельно смотреть, сколько траффика / проца / памяти кушает транзит, а сколько — хостинг.
* каждый процесс по-прежнему работает в SELinux-типе tor_t, и на него действуют SELinux-ограничения, которые в таком сценарии не мешают нашим задачам.
* SystemD запускает только ноду проксирования, без скрытых сервисов. Сервисы же работают в своих обычных процессах.
* Сами скрытые сервисы работают гораздо предсказуемее и стабильней.
* Новых скрытых сервисов легко сделать целую пачку, не останавливая и никак не мешая уже работающим.
* В логах нет стрёмных сообщений =)

Реклама

Обсуждение закрыто.