OnionJuggler

Многофункциональный менеджер луковых сервисов для UNIX-подобных операционных систем, написанный на POSIX-совместимом скриптовом языке shell
OnionJuggler — это минимально требовательный, переносимый набор скриптов и документации, помогающий оператору сервиса жонглировать (управлять) своими луковыми сервисами.
ВНИМАНИЕ: пока не доверяйте этому репозиторию, сохраняйте резервные копии ключей hs в другом месте. Этот проект ещё не выпущен и должен рассматриваться только как разработочный.
Быстрая ссылка на этот репозиторий: git.io/onionjuggler
Содержание
Введение
Изображения

История
Этот проект был начат после того, как я увидел потрясающие скрипты OnionShare CLI на Python, которые позволяют создавать эфемерные луковые сервисы, никогда не касающиеся диска, и которые можно легко запускать на Tails или Whonix. Затем, после знакомства с bash-скриптом для луковых сервисов RaspiBlitz на Raspberry Pi, появилась идея портировать его на любой дистрибутив Debian. По мере развития идеи стало ясно, что использование GNU Bash и Linux является единой точкой отказа 1 2, поэтому окончательной целью стало сделать скрипт POSIX-совместимым, чтобы он работал в любой Unix-подобной системе.
Цель
Цель этого проекта:
- облегчить управление луковыми сервисами: от активации сервиса до добавления авторизации клиентов, предоставляя все возможности редактирования файлов вручную, но с меньшим количеством набора текста.
- показать, что управление луковым сервисом — это гораздо больше, чем просто использование веб-сервера со страницами.
- распространение: от уровня исходного кода (FOSS) до его эффекта, позволяющего любому запускать код на любой операционной системе, в любой оболочке или менеджере сервисов. Устранение единой точки отказа.
Устранение единой точки отказа:
- Ядро — от преобладающего
Linux до BSD и любых других Unix-подобных систем.
- Оболочка — от преобладающей
Bash до любой POSIX-оболочки, такой как ksh, (y,d)ash и Zsh (в режиме эмуляции sh).
- Менеджер сервисов — от преобладающего
Systemd до RC, OpenRC, SysVinit, Runit.
Редактирование файла конфигурации Tor (torrc) несложно, но автоматизация решает проблемы неправильной конфигурации и даёт:
- меньше времени, затрачиваемого на выполнение одной команды;
- отсутствие простоев за счёт отклонения недопустимых конфигураций перед их применением;
- полную единообразность;
- графический интерфейс, помогающий новичкам.
Возможности
- Включить сервис — создать каталог, если он не существует (HiddenServiceDir), выбрать версию лукового сервиса (HiddenServiceVersion), тип сокета (unix или tcp), любое количество виртуальных портов, а также целевые адреса (HiddenServicePort).
- Отключить сервис — удалить конфигурацию сервиса из torrc; сервис перестанет быть доступным, но вы можете снова включить его в любое время. При необходимости можно полностью удалить сервис, стерев его конфигурацию и каталог, что навсегда удалит его ключи.
- Обновить адрес сервиса — предназначено для приватных луковых сервисов: если вы случайно раскрыли его адрес, можно сменить hostname. Учтите, что все авторизованные клиенты будут отключены, а ключи сервиса будут безвозвратно удалены.
- Учётные данные — показать hostname, клиентов, блок torrc, QR-код hostname.
- Аутентификация луковых сервисов — только для луковых сервисов v3. Зависит от конфигурации клиента и сервера и работает на основе пары ключей: клиент хранит секретную часть (либо сгенерированную им (более безопасно), либо полученную от оператора сервиса), а оператор лукового сервиса — публичную часть. Если что-то:
- Сервер — сгенерировать пару ключей или добавить публичную часть; вывести список имён клиентов и их публичных ключей из
<HiddenServiceDir>/authorized_clients/<client>.auth. Если настроен хотя бы один клиент, сервис будет недоступен без аутентификации.
- Клиент — сгенерировать пару ключей или добавить публичную часть; вывести список ваших
<ClientOnionAuthDir>/<SOME_ONION>.auth_private.
- Onion-Location — для публичных луковых сервисов. Вы можете перенаправить пользователей из обычной сети на ваш луковый сервис с помощью этого руководства для nginx, apache2 и HTML-атрибутов header.
- OpSec — операционная безопасность.
- Unix-сокет — поддержка включения лукового сервиса через unix-сокет для предотвращения обхода через localhost.
- Веб-сервер — обслуживание файлов вашего скрытого сервиса с помощью Nginx или Apache2.
- Удобство использования — в проекте поддерживаются два диалоговых окна:
dialog и whiptail.
- Массовые операции — некоторые команды могут выполняться массово с аргументом
@all, чтобы включить все сервисы или клиентов (в зависимости от опции --service или --client); можно также перечислить сервисы [SERV1,SERV2,...] и клиентов [CLIENT1,CLIENT2,...]. Команда будет перебирать переменные и применять комбинации.
- Защита от ошибок — скрипт делает всё возможное, чтобы отфильтровать неверные команды и неправильный синтаксис. Команды несложные, но на первый взгляд могут напугать. Не волнуйтесь: если команда неверна, она не выполнится, чтобы избежать сбоя перезагрузки демона tor из-за некорректной конфигурации. Если же неверная команда всё же выполнится, пожалуйста, откройте issue.
Требования
- Общие:
- Unix-подобная система.
- привилегии суперпользователя для вызова команд от root и пользователя tor.