D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Предисловие
Привет пользователям xss.is !
Сегодня я хочу рассказать о том, как можно взять и спрятать ваш любимый сервис (веб-приложение, игровой-сервер, сервис для обмена файлами - да что угодно!), чтобы им можно было пользоваться анонимно и основной сервер был недосягаем для многих. Если вы когда-нибудь играли с Tor, то наверняка знаете о hidden services. Благодаря им можно сделать так, что ваш сервис будет доступен по адресу вида abcdefg12345.onion, находящемуся где-то в сети Tor, при этом ни IP, ни физическая локация сервера не светятся. Но что если мы хотим распараллелить трафик через несколько таких onion-доменов, чтобы не забивать один-единственный Tor-туннель и прокинуть их в белый интернет? Или удобно сделать масштабируемый балансер? Тут вам на помощь придёт проект TORTCB - Tor TCP Chain Balancer. Ниже я опишу, что это такое, зачем оно нужно и как запустить.
Зачем мне это нужно?
Tor умеет многое:
Что такое TORTCB?
TORTCB (Tor TCP Chain Balancer) - это, грубо говоря, два Docker-образа, которые вместе решают следующую задачу:
tor_forward:
Схема в общих чертах
Краткая подготовка к запуску
Чтобы всё запустить, нам понадобится:
Шаг 1: Клонируем репозиторий
Сделайте что-то вроде
Bash: Скопировать в буфер обмена
Внутри вы увидите директории tor_forward/ и haproxy_receiver/, а также README.md с документацией.
Шаг 2: Настраиваем tor_forward
tor_forward - это контейнер, который поднимает несколько Tor hidden services. По умолчанию он:
Bash: Скопировать в буфер обмена
2.2. Запуск
Bash: Скопировать в буфер обмена
Основные параметры:
Код: Скопировать в буфер обмена
Это значит, что у нас есть onion-домен abcde12345.onion, слушающий на порту 20000, и т. д.
Шаг 3: Настраиваем haproxy_receiver
haproxy_receiver - это контейнер, который поднимает целый "зоопарк" Tor-клиентов (по одному на каждую строку из domains.list), а затем сводит всё в единый HAProxy (который вы сами можете открыть "наружу").
3.1. Сборка контейнера
Bash: Скопировать в буфер обмена
3.2. Запуск
Bash: Скопировать в буфер обмена
Здесь:
Шаг 4: Проверка и использование
Пример с docker-compose.yml
Если вам лениво гонять всё вручную, можно написать docker-compose:
YAML: Скопировать в буфер обмена
YAML: Скопировать в буфер обмена
После этого на каждом из серверов:
Bash: Скопировать в буфер обмена
Контейнер tor_forward сгенерирует domains.list, затем haproxy_receiver прочтёт его и развернёт для каждого onion-домена отдельный Tor + socat. У вас будут onion-домены, а снаружи единый порт 9080.
Подводные камни и полезные советы
Мы получили "комбайн" из нескольких Tor hidden services и HAProxy. Теперь трафик на сервис распределяется по нескольким Tor-туннелям, что повышает отказоустойчивость при высоких нагрузках и делает скрытый сервис более гибким.
Мой репозиторий с проектом: TORTCB - GitHub.
Если возникнут вопросы, пишите issues.
Анонимных вам сервисов и быстрых Tor-соединений!
п.с. буду раз звёздочкам на гитхабе. Это будет лучшая благодарность мне за такой простой и удобный продукт
Данная статья предоставлена исключительно в ознакомительных целях. Автор не несёт ответственности за возможное незаконное или некорректное использование описанных инструментов и технологий. Если вы планируете применять полученные знания, обязательно убедитесь, что они соответствуют правовым нормам вашей страны и не нарушают чьи-либо права.
Привет пользователям xss.is !
Сегодня я хочу рассказать о том, как можно взять и спрятать ваш любимый сервис (веб-приложение, игровой-сервер, сервис для обмена файлами - да что угодно!), чтобы им можно было пользоваться анонимно и основной сервер был недосягаем для многих. Если вы когда-нибудь играли с Tor, то наверняка знаете о hidden services. Благодаря им можно сделать так, что ваш сервис будет доступен по адресу вида abcdefg12345.onion, находящемуся где-то в сети Tor, при этом ни IP, ни физическая локация сервера не светятся. Но что если мы хотим распараллелить трафик через несколько таких onion-доменов, чтобы не забивать один-единственный Tor-туннель и прокинуть их в белый интернет? Или удобно сделать масштабируемый балансер? Тут вам на помощь придёт проект TORTCB - Tor TCP Chain Balancer. Ниже я опишу, что это такое, зачем оно нужно и как запустить.
Зачем мне это нужно?
Tor умеет многое:
- Предоставлять анонимность. Хост-сервер, спрятанный за onion-адресом, не "светится" во внешнем Интернете напрямую.
- Упрощать доступ к сервису без публичного IP и без проброса портов.
- Защищать приватность: IP вашего сервера известен только вам, а внешне виден лишь onion-адрес.
Что такое TORTCB?
TORTCB (Tor TCP Chain Balancer) - это, грубо говоря, два Docker-образа, которые вместе решают следующую задачу:
tor_forward:
- Поднимает N штук тор-сервисов на вашем хосте.
- Каждый сервис "передаёт" трафик дальше на локальный порт вашего приложения.
- Создаёт domains.list - в нём перечисляются все сгенерированные .onion-домены и их порты.
- Забирает список onion-адресов и поднимает отдельный Tor-клиент для каждого из них (т. е. у каждого onion-домена получается свой Tor-процесс).
- Запускает socat для приёма трафика с каждого onion-адреса отдельно.
- Создаёт HAProxy, который "снаружи" (на одном TCP-порте) балансирует трафик между всеми этими onion-туннелями.
- Множество onion-адресов, на каждый из которых можно приходить снаружи.
- Единый точечный вход (порт HAProxy), объединяющий весь этот поток.
- Разведение нагрузки по нескольким Tor-туннелям вместо одного.
Схема в общих чертах
- Трафик идёт через один или несколько onion-доменов (предназначенных для сервиса).
- tor_forward принимает этот трафик, прокидывает на localhost:5000 (или другой порт, где крутится ваш сервис).
- haproxy_receiver "заворачивает" каждый onion-домен во свой Tor-клиент и потом агрегирует потоки через HAProxy.
- Если вы хотите иметь полноценное балансирование входящих onion-подключений, вам достаточно "ходить" на любой из сгенерированных onion-адресов (или дать пользователям список).
- Порт 9080 в контейнере haproxy_receiver (или какой вы там зададите) будет вашим локальным (или внешним) "единым входом" наружу.
Краткая подготовка к запуску
Чтобы всё запустить, нам понадобится:
- Docker и, желательно, docker compose (упрощает жизнь).
- Сам проект TORTCB (доступен здесь: GitHub - keklick1337/tortcb).
- Готовое приложение, которое мы хотим «засунуть» за Tor (например, локальный http-сервер, работающий на 5000 порту).
Шаг 1: Клонируем репозиторий
Сделайте что-то вроде
Bash: Скопировать в буфер обмена
Код:
git clone https://github.com/keklick1337/tortcb.git
cd tortcb
Шаг 2: Настраиваем tor_forward
tor_forward - это контейнер, который поднимает несколько Tor hidden services. По умолчанию он:
- Слушает трафик на onion-адресах и переадресует его на HOST_IP:HOST_PORT (нужно указать, где запущен ваш сервис).
- Создаёт domains.list (список ваших onion-доменов).
Bash: Скопировать в буфер обмена
Код:
cd tor_forward
docker build -t tor_forward .
2.2. Запуск
Bash: Скопировать в буфер обмена
Код:
docker run -d \
--name tor_forward \
-e HOST_IP=host.docker.internal \
-e HOST_PORT=5000 \
-e TOR_INSTANCES=3 \
-e RANDOM_PORT_START=20000 \
-v $(pwd)/data/tor_forward:/var/lib/tor/hidden_services \
tor_forward
Основные параметры:
- HOST_IP и HOST_PORT - это адрес и порт вашего приложения. На Mac/Windows можно указать host.docker.internal. На Linux иногда придётся прописать что-то вроде 172.17.0.1 или localhost.
- TOR_INSTANCES: сколько onion-доменов вы хотите создать. Например, 3 или 5. (Каждый процесс использует ресурсы процессора, выбирайте количество доменов исходя из ресурсов сервера)
- RANDOM_PORT_START: c какого порта начнёт Tor перенаправлять. По умолчанию 20000, затем 20001, 20002 и т. д.
Код: Скопировать в буфер обмена
Код:
abcde12345.onion:20000
fghij67890.onion:20001
...
Шаг 3: Настраиваем haproxy_receiver
haproxy_receiver - это контейнер, который поднимает целый "зоопарк" Tor-клиентов (по одному на каждую строку из domains.list), а затем сводит всё в единый HAProxy (который вы сами можете открыть "наружу").
3.1. Сборка контейнера
Bash: Скопировать в буфер обмена
Код:
cd ../haproxy_receiver
docker build -t haproxy_receiver .
3.2. Запуск
Bash: Скопировать в буфер обмена
Код:
docker run -d \
--name haproxy_receiver \
-e HAPROXY_LISTEN_PORT=9080 \
-e BASE_LOCAL_PORT=30000 \
-e BASE_SOCKS_PORT=9050 \
-e STATS_PORT=9090 \
-e STATS_USER=admin \
-e STATS_PASS=mypassword \
-v path_to_domains_list/domains.list:/etc/domains.list:ro \
-p 9080:9080 \
-p 9090:9090 \
haproxy_receiver
- -v path_to_domains_list/domains.list:/etc/domains.list:ro - прокидываем файл, созданный первым контейнером.
- HAPROXY_LISTEN_PORT=9080 - это порт внутри контейнера, который, благодаря -p 9080:9080, будет доступен снаружи.
- STATS_PORT=9090, STATS_USER=admin, STATS_PASS=mypassword - можно включить панель статистики HAProxy, чтобы видеть подключения, загрузку и т. п.
Шаг 4: Проверка и использование
- Проверьте, что сервис, который вы хотели спрятать, реально запущен на HOST_IP:HOST_PORT. Скажем, это может быть локальный веб-сервис на localhost:5000.
- Посмотрите файл ./data/tor_forward/domains.list и выберите один из onion-доменов, например abcde12345.onion:20000.
- Подключитесь к вашему onion-домену через Tor Browser или консольный curl с socks5-прокси на 9050 (если вы знаете, как это делать). Если всё в порядке, вы будете доставлены к вашему скрытому сервису.
Одновременно вы можете проверить "внешний порт" 9080, который haproxy_receiver открыл снаружи. В реальной боевой настройке вы можете, например, прокидывать этот 9080 на любой другой сервер, прятать его за VPN, либо использовать как привычный порт на 80 или 443 (делая какие-то доп. настройки). - HAProxy Stats. Перейдите по ссылке http://<ваш_docker_host>:9090/stats и введите admin/mypassword. Увидите живую статистику.
Пример с docker-compose.yml
Если вам лениво гонять всё вручную, можно написать docker-compose:
YAML: Скопировать в буфер обмена
Код:
version: "3.8"
services:
tor_forward:
build: ./tor_forward
container_name: tor_forward
environment:
- HOST_IP=host.docker.internal
- HOST_PORT=5000
- TOR_INSTANCES=5
- RANDOM_PORT_START=20000
volumes:
- ./data/tor_forward:/var/lib/tor/hidden_services
YAML: Скопировать в буфер обмена
Код:
version: "3.8"
services:
haproxy_receiver:
build: ./haproxy_receiver
container_name: haproxy_receiver
environment:
- HAPROXY_LISTEN_PORT=9080
- BASE_LOCAL_PORT=30000
- BASE_SOCKS_PORT=9050
- STATS_PORT=9090
- STATS_USER=admin
- STATS_PASS=mypassword
volumes:
- path_to_domains_list/domains.list:/etc/domains.list:ro
ports:
- "9080:9080"
- "9090:9090"
После этого на каждом из серверов:
Bash: Скопировать в буфер обмена
docker-compose up -d --build
Контейнер tor_forward сгенерирует domains.list, затем haproxy_receiver прочтёт его и развернёт для каждого onion-домена отдельный Tor + socat. У вас будут onion-домены, а снаружи единый порт 9080.
Подводные камни и полезные советы
- host.docker.internal в Linux может не работать (в отличие от Mac/Windows). Тогда используйте реальный IP (например, 172.17.0.1) или запускайте контейнеры в режиме network host.
- Если вы указываете несколько Tor-сервисов (TOR_INSTANCES=10, например), они создадут 10 onion-доменов и 10 соответствующих портов. Проследите, чтобы ваша система тянула такую нагрузку. Tor + socat на каждом домене могут подъедать ресурсы.
- При каждом запуске контейнера tor_forward в одну и ту же директорию data/tor_forward onion-адреса сохраняются. Если вам нужно, чтобы они не менялись, не удаляйте файлы, не сбрасывайте том.
- Безопасность: поскольку HAProxy консолидирует трафик и открывается наружу, убедитесь, что у вас нет утечек IP. Если вы хотите, чтобы внешний мир доступался только через onion-домены, вам не обязательно маппить порт 9080 наружу. Вы можете использовать docker network и т.п.
Мы получили "комбайн" из нескольких Tor hidden services и HAProxy. Теперь трафик на сервис распределяется по нескольким Tor-туннелям, что повышает отказоустойчивость при высоких нагрузках и делает скрытый сервис более гибким.
- Масштабируемость: хотите больше onion-доменов - поднимайте больше экземпляров.
- Простота: весь механизм запускается через пару Docker-контейнеров или docker-compose.
Мой репозиторий с проектом: TORTCB - GitHub.
Если возникнут вопросы, пишите issues.
Анонимных вам сервисов и быстрых Tor-соединений!
п.с. буду раз звёздочкам на гитхабе. Это будет лучшая благодарность мне за такой простой и удобный продукт
Данная статья предоставлена исключительно в ознакомительных целях. Автор не несёт ответственности за возможное незаконное или некорректное использование описанных инструментов и технологий. Если вы планируете применять полученные знания, обязательно убедитесь, что они соответствуют правовым нормам вашей страны и не нарушают чьи-либо права.