• XSS.stack #1 – первый литературный журнал от юзеров форума

Мануал/Книга Поднимаем свою XMPP жабу в Tor

Пользуетесь ли вы жабой?

ordinaria1

(L1) cache
Забанен
Регистрация
14.04.2019
Сообщения
832
Решения
2
Реакции
870
Гарант сделки
4
Депозит
5 Ł
Пожалуйста, обратите внимание, что пользователь заблокирован
start

В этом мини-гайде настроим собственный XMPP-сервер Prosody, доступный только через сеть Tor. Сервер будет работать в Docker-контейнере.

Требования & Подготовка

Для этого потребуется VPS (список анонимных хостеров принимающих крипту) или хоумсервер с Debian (подойдут и другие дистрибутивы). Минимальные требования: 1 ГБ RAM, 10 ГБ диска. Необходимо установить Docker Compose.

Код:
apt update && apt upgrade -y
apt install docker-compose-plugin -y

Создаем директорию для проекта:

Код:
mkdir prosody-tor && cd prosody-tor

Обзор конфигурационных файлов


Dockerfile - образ контейнера на базе Alpine Linux с установленными Tor, Prosody и необходимыми утилитами:

Код:
FROM alpine:3.19.1

RUN set -eux; \
    apk add --no-cache tor prosody proxychains-ng openssl;

RUN set -eux; \
    mkdir /var/lib/tor/prosody; \
    mkdir /entrypoint.d/;

COPY torrc /etc/tor
COPY entrypoint.sh /entrypoint.sh
COPY cert.cnf /entrypoint.d/
COPY prosody.cfg.lua /etc/prosody/prosody.cfg.lua.orig

STOPSIGNAL SIGQUIT

ENTRYPOINT [ "/bin/sh", "/entrypoint.sh" ]

docker-compose.yml - конфигурация контейнера с проброшенными портами и томами:

YAML:
name: prosody-tor

services:
  prosody:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./tor_data:/var/lib/tor
      - ./prosody_tor_service/:/var/lib/tor/prosody
      - ./prosody_data:/var/lib/prosody
      - ./prosody_certs:/etc/prosody/certs/host
    ports:
      - "127.0.0.1:5582:5582"
      - "127.0.0.1:5222:5222"
      - "127.0.0.1:5281:5281"

entrypoint.sh - скрипт инициализации контейнера. Запускает Tor, ждёт получения .onion адреса, генерирует SSL-сертификаты и запускает Prosody через proxychains:

Bash:
#!/bin/sh

set -eu

TOR_DIR=/var/lib/tor
PROSODY_TOR_DIR=/var/lib/tor/prosody
TOR_SERVICE_DIR=$TOR_DIR/prosody
CERT_DIR=/etc/prosody/certs
CERT_HOST_DIR=$CERT_DIR/host
PROSODY_DATA_DIR=/var/lib/prosody

chmod 700 "$TOR_DIR" "$PROSODY_TOR_DIR"
chown -R tor:root "$TOR_DIR" "$PROSODY_TOR_DIR"

mkdir -p "$CERT_HOST_DIR"
mkdir -p "$PROSODY_DATA_DIR"

chown -R prosody:prosody "$PROSODY_DATA_DIR"
chmod 755 "$PROSODY_DATA_DIR"

tor -f /etc/tor/torrc &
tor_pid=$!

hostname_file="$TOR_SERVICE_DIR/hostname"

until [ -f "$hostname_file" ] && [ -s "$hostname_file" ]; do
    sleep 1
done

hostname=$(cat "$hostname_file")

echo "Tor service hostname: $hostname"

if [ ! -f "$CERT_HOST_DIR/$hostname.crt" ]; then
    awk -v hostname="$hostname" '{gsub(/<HOSTNAME>/, hostname); print}' /entrypoint.d/cert.cnf |
    openssl req -x509 -nodes -keyout "$CERT_HOST_DIR/$hostname.key" \
        -out "$CERT_HOST_DIR/$hostname.crt" \
        -config - \
        -extensions req_ext
fi

chown -R prosody:prosody "$CERT_HOST_DIR"

awk -v hostname="$hostname" '{gsub(/<HOSTNAME>/, hostname); print}' /etc/prosody/prosody.cfg.lua.orig > /etc/prosody/prosody.cfg.lua

su - prosody -s /bin/sh -c 'proxychains prosody -F' &
prosody_pid=$!

trap 'echo Stopping...' SIGQUIT

wait "$prosody_pid" "$tor_pid"

torrc - конфигурация Tor (настройки +- дефолтные):

Код:
Log notice file /var/log/tor/notices.log
User tor
DataDirectory /var/lib/tor

HiddenServiceDir /var/lib/tor/prosody/
HiddenServicePort 5222 127.0.0.1:5222
HiddenServicePort 5269 127.0.0.1:5269
HiddenServicePort 5281 127.0.0.1:5281

cert.cnf - шаблон для генерации самоподписанного сертификата:

Код:
[req]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no

[req_distinguished_name]
commonName             = <HOSTNAME>
countryName            = US
localityName           = The XMPP
organizationName       = The XMPP
organizationalUnitName = The XMPP
emailAddress           = xmpp@<HOSTNAME>

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = <HOSTNAME>
DNS.2 = u.<HOSTNAME>

prosody.cfg.lua - основная конфигурация Prosody. Файл большой, поэтому приведу ключевые настройки (остальные дефолтные):

Код:
authentication = "internal_hashed"
allow_registration = true
registration_invite_only = false

interfaces = { "0.0.0.0" }
local_interfaces = { "0.0.0.0" }

http_ports = {}
http_interfaces = {}

VirtualHost "<HOSTNAME>"

disco_items = {
    { "u.<HOSTNAME>", "file sharing service" }
}

Component "u.<HOSTNAME>" "http_file_share"
http_file_share_size_limit = 128*1024*1024

proxychains.conf - конфигурация для проксирования трафика через Tor:

Код:
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.1/255.255.255.255

[ProxyList]
socks5 127.0.0.1 9050

Запуск сервера

После создания всех файлов запускаем контейнер:

Код:
docker compose up

В логах появится строка с .onion адресом сервера. Сохраните его.

Подключение

Для подключения к серверу мы должны использовать XMPP-клиент с поддержкой Tor. Например, Gajim* или Conversations / Orbot на Android. Список клиентов смотрим здесь.

* В Gajim при самоподписанном сертификате нельзя слать файлы, но это можно вылечить.

Для подключения всё по дефолту:
  • Сервер: адрес.onion
  • Порт: 5222
  • Шифрование: обязательно

Заходим в клиент с тором, нажимаем на регистрацию, вводим наш .onion, желаемый ник, пароль. Готово.

Управление сервером
Перезапуск:
Код:
docker compose restart

Остановка:
Код:
docker compose down

Для изменения настроек редактируйте prosody.cfg.lua и перезапустите контейнер с помощью docker compose up --build. Чтобы отключить открытую регу, измените:
Код:
allow_registration = false

Важные данные хранятся в директориях prosody_data (учетные записи, сообщения) и prosody_tor_service (приватный ключ .onion адреса).

Заключение

Теперь у вас есть полноценный анонимный XMPP-сервер, который принципиально отличается от централизованных решений. В отличие от Telegram, Matrix или Session, где вы зависите (Matrix - зачастую) от чужой инфры, здесь вы полностью контролируете свой "узел связи".

Ключевое преимущество - сервер можно запускать по необходимости даже на домашней машине / ВМ. Включили, пообщались, выключили. Никаких постоянных метаданных на чужих серверах, можно обойтись без VPS. Не забываем пользоваться OMEMO, PGP. Хотя-бы OTR.

Такое решение превосходит популярные "анонимные" мессенджеры по множеству (если не всем) параметрам. А, нет, стикеров нету :)

Скачать

Снизу, либо с DaMaGeLiB: http://**************************************************************/d/3Kkz4PVAVcAbXC5G7376m5
SHA-256: beae83d4fa43d9ade91d44a2c8f902525ade9baf97d35e5d9a6e3d6213b04392
 

Вложения

  • prosody-tor.zip
    12.9 КБ · Просмотры: 26
Пожалуйста, обратите внимание, что пользователь заблокирован
Подниму тему. Используем для личного общения. Не используем вдолгую, меняйте адреса.

Не забываем пользоваться OMEMO, PGP. Хотя-бы OTR.

Пример подобной жабы, но в сети i2p - https://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/141493/
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх