- Сообщения
- 2.471
- Реакции
- 16.763
Привествую уважаемый читатель. Данный гайд будет больше направлен на владельцев шопов или кому надо придерживать анонимную и безопасную связь с работниками или коллегами, чем на обычного юзера даркнет сети.
Здесь расскажу как поднять "свой мессенджер" в сети ТОР.
Много где находил вопросы по поводу поднятия Element в сети Тор, и подумал а почему бы и не создать статейку.
Последнее время, я куча своих проектов держу на Docker контейнерах, и подумал, а что если, всё объеденить. Матрикс сеть + Элемент + Тор и всё на изолированных контейнерах.
Вы можете подумать вначале - звучит как то уже сложно и нужны определенные навыки программирования. На самом деле - всё очень легко, нужны несколько конфигураций и установленных пакетов для работы нашего сервиса. Да собирать это всё и изучать - ушло много сил и времени, поэтому я вам придподнесу всё готовенькое, где вы без труда по моим уже готовым шагам поднимите на своём сервере данный сервис.
Так же постарался чтобы весь проект был компактным и с четкой иерархией, нигде чтобы не были разбросаны файлы по системе и всё было в одном месте. Так же для большей безопасности я добавил самописные сертификаты https в Тор сеть, считайте двойной защитой, Тор сеть шифрует трафик + сертификаты.
СОДЕРЖАНИЕ:
- Что из себя представляет проект
- VPS/VDS
- Установка необходимых компнентов
- Структура проекта
- Создание проекта
Tor-контейнер (docker-compose.tor.yml)
Matrix-контейнер (docker-compose.matrix.yml)
Element-контейнер (docker-compose.element.yml)
Nginx-контейнер (docker-compose.nginx.yml) - Установка прав доступа внутри хост машины
- Запуск проекта
Начнём сначала с краткой информации что вообще из себя что представляет
Matrix Synapse - Это сервер для общения через сеть Matrix. Представьте это как свой приватный хостинг для чатов и файлов. Вы ставите его у себя чтобы общаться с коллегами или кем надо, а он всё шифрует.Element - Это веб оболочка/клиент для нашего Matrix сервера. Напоминает discord + telegram.
TOR - Это прокси сеть, которая скрывает ваш сервер и делает его доступным только через специальный .onion адрес.
Docker - Это инструмент изоляции и развёртывания разных проектов, который упрощает установку и запуск всего этого (Matrix Synapse, Element, Tor). Представьте коробки, куда всё упаковано отдельно от вашей системы(дома) и кто залезет в вашу коробку (к примеру мышь) она не сможет вылезти за пределы этой коробки.
VPS/VDS
VPS/VDS - выделенный сервер, стоит не так дорого. Выбираем сервер с хорошей сетью (должен принимать оплату криптой и не должен верифицировать личность или принуждать давать данные о пользователе) и устанавливаем Linux (Debian).Что учитывать при выборе VPS:
- Методы оплаты
Убедитесь, что провайдер принимает криптовалюту (Bitcoin, Ethereum, Monero и другие). - Не требовать верификации личности
Идеально, если провайдер не требует верификации и не запрашивает документы, подтверждающие вашу личность. Такой сервис будет соблюдать вашу приватность и не создаст лишних препятствий при регистрации. - Приватность и анонимность
Проверьте, насколько провайдер защищает вашу конфиденциальность. Он должен избегать хранения логов или других данных, которые могут раскрыть вашу активность. Смотрите на политику конфиденциальности провайдера, чтобы убедиться, что он не делится вашими данными с третьими лицами. - Географическое расположение серверов
Выбирайте серверы в странах с лояльными законами по защите данных и без строгой интернет-цензуры.
Я лично основном выбираю сервера Германия/Нидерланды. А в качестве провайлера/сервиса использую VDSina, вы можете выбрать любой подходящий под эти критерии.
Установка необходимых компонентов
Bash:
ssh root@<IP-адрес вашего сервера>
Bash:
apt install sudo
Bash:
sudo apt update && sudo apt upgrade -y
Bash:
sudo apt install -y ca-certificates curl gnupg certbot
Bash:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Bash:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose
Bash:
sudo usermod -aG docker $USER
newgrp docker
Bash:
docker network create --driver bridge matrix-net
Bash:
mkdir matrix-data
Название и куда засунуть можете сами решать, я просто дал пример как я настраивал у себя и все настройки под данный путь и папку
Структура проекта
И вот вся структура необходимая вам, да это текстовые конфигурации которые создадут контейнеры со всем необходимым для работы.matrix-data/
├── element/
│ └── config.json
├── matrix/
│ └── homeserver.yaml
├── nginx/
│ ├── nginx.conf
│ └── certs/
├── tor/
│ ├── torrc (автоматически создастся при первом запуске контейнера tor)
│ └── hostname (автоматически создастся при первом запуске контейнера tor)
├── docker-compose.matrix.yml
├── docker-compose.element.yml
├── docker-compose.tor.yml
└── docker-compose.nginx.yml
Создание проекта
Для начала перейдём в нашу рабочую папку
Bash:
cd /home/user/matrix-data
docker-compose.tor.yml
Создадим наш конфиг:
Bash:
nano docker-compose.tor.yml
Bash:
services:
tor:
image: osminogin/tor-simple:latest
container_name: tor-matrix
restart: always
networks:
- matrix-net
volumes:
- /home/user/matrix-data/tor:/etc/tor
- /home/user/matrix-data/tor/torrc:/etc/tor/torrc
cap_add:
- NET_ADMIN
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
networks:
matrix-net:
external: true
И так что вообще делает данный конфиг он запускает в нашей изолированной сети matrix-net проксирование в ТОР сеть, даёт нам сам доменное имя адреса , подключает папки с изоляции докера в папку проекта
Запускаем 1 раз и сразу выключаем для получения hostname и torrc
Bash:
docker compose -f docker-compose.tor.yml up -d
Bash:
docker compose -f docker-compose.tor.yml down
Bash:
cat /home/user/matrix-data/tor/hostname
Где я буду помечать ваш-hostname.onion - вставляйте туда этот адресс
Создадим конфиг torrc
Bash:
nano tor/torrc
Bash:
HiddenServiceDir /etc/tor/hidden_service
HiddenServicePort 80 nginx-matrix:443
HiddenServicePort 443 nginx-matrix:443
HiddenServicePort 8008 matrix:8008
HiddenServicePort 8448 matrix:8008
SocksPort 127.0.0.1:9050
Log notice stdout
Данный конфиг выбирает что конкретно будет проксироваться из контнтейнеров в Tor сеть на наш .onion
docker-compose.matrix.yml
Создадим наш конфиг:
Bash:
nano docker-compose.matrix.yml
Bash:
services:
matrix:
image: matrixdotorg/synapse:latest
container_name: matrix
restart: always
networks:
- matrix-net
volumes:
- /home/user/matrix-data/matrix:/data
user: 999:999
environment:
- SYNAPSE_SERVER_NAME=dookshccjyxexfekm67we7dcprs7opi3wj7ow5zatpi4wdodyj4nwsad.onion
- SYNAPSE_REPORT_STATS=false
- SYNAPSE_ENABLE_REGISTRATION=true
networks:
matrix-net:
external: true
Данный конфиг запускает Matrix Synapse
Запускаем matrix и выключаем его
Bash:
docker compose -f docker-compose.matrix.yml up -d
Bash:
docker compose -f docker-compose.matrix.yml down
Редактируем конфиг :
Bash:
nano matrix/homeserver.yaml
Bash:
server_name: "ваш_hostname.onion"
public_baseurl: "ваш_hostname.onion:8008"
pid_file: /data/homeserver.pid
listeners:
- port: 8008
tls: false
type: http
bind_addresses: ['0.0.0.0']
resources:
- names: [client, federation]
compress: false
database:
name: sqlite3
args:
database: /data/homeserver.db
log_config: "/data/log.config"
media_store_path: /data/media_store
enable_authenticated_media: false
enable_media_repo: true
enable_thumbnail_generation: true
max_upload_size: "50M"
registration_shared_secret: "оставляем_как_в_оригинальном_файле"
macaroon_secret_key: "оставляем_как_в_оригинальном_файле"
form_secret: "=оставляем_как_в_оригинальном_файле"
signing_key_path: "/data/ваш_hostname.onion.signing.key"
enable_registration: true
enable_registration_without_verification: true
federation: {}
report_stats: false
trusted_key_servers: []
# vim:ft=yaml
Обратите внимание на пункты:
ваш_hostname.onion
оставляем_как_в_оригинальном_файле
docker-compose.element.yml
Создадим наш конфиг:
Bash:
nano docker-compose.element.yml
Bash:
services:
element:
image: vectorim/element-web:latest
container_name: element
restart: always
networks:
- matrix-net
volumes:
- /home/user/matrix-data/element/config.json:/app/config.json:ro
- /home/user/matrix-data/img/lake.jpg:/app/themes/element/img/backgrounds/lake.jpg:ro
networks:
matrix-net:
external: true
Bash:
mkdir element
Bash:
nano element/config.json
Bash:
{
"default_server_config": {
"m.homeserver": {
"base_url": "http://ваш_hostname.onion:8008",
"server_name": "ваш_hostname.onion"
}
},
"default_device_display_name": "Tor Element session",
"disable_custom_urls": true,
"disable_guests": false,
"disable_3pid_login": true,
"disable_login_language_selector": false,
"disable_service_worker": true,
"mobile_redirect": false,
"brand": "DarknetBunker",
"default_theme": "dark",
"features": {
"feature_secure_backup": true,
"feature_e2ee": true,
"feature_service_worker": false
}
}
Обратите внимание на пункты:
ваш_hostname.onion
БОНУС:
/home/user/matrix-data/img/lake.jpg
в этот путь вы можете загрузить любое изображение с именем и форматом lake.jpg и у вас это будует на приветвенном экране сайта
docker-compose.nginx.yml
Создадим наш конфиг:
Bash:
nano docker-compose.nginx.yml
Bash:
services:
nginx:
image: nginx:latest
container_name: nginx-matrix
restart: always
networks:
- matrix-net
ports:
- "443:443"
volumes:
- /home/user/matrix-data/nginx/nginx.conf:/etc/nginx/nginx.conf
- /home/user/matrix-data/nginx/certs:/etc/nginx/certs
networks:
matrix-net:
external: true
Далее создаём папку nginx
Bash:
mkdir nginx
Bash:
nano nginx/nginx.conf
Bash:
events {}
http {
server {
listen 443 ssl;
server_name ваш_hostname.onion;
ssl_certificate /etc/nginx/certs/nginx.crt;
ssl_certificate_key /etc/nginx/certs/nginx.key;
location / {
proxy_pass http://element:80;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /_matrix {
proxy_pass http://matrix:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /.well-known/matrix/server {
default_type application/json;
return 200 '{"m.server": "ваш_hostname:443"}';
}
location /.well-known/matrix/client {
default_type application/json;
return 200 '{"m.homeserver": {"base_url": "https://ваш_hostmame.onion"}}';
}
}
}
ваш_hostname.onion
Далее создадим сертификаты для nginx и можно запускать наш проект:
Bash:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /home/user/matrix-data/nginx/certs/nginx.key \
-out /home/user/matrix-data/nginx/certs/nginx.crt \
-subj "/CN=ваш_адрес_hostaname.onion"
ПРАВА ДОСТУПА
Bash:
chown -R 999:999 /home/user/matrix-data
Bash:
chmod 644 /home/user/matrix-data/docker-compose.element.yml
chmod 644 /home/user/matrix-data/docker-compose.matrix.yml
chmod 644 /home/user/matrix-data/docker-compose.nginx.yml
chmod 644 /home/user/matrix-data/docker-compose.tor.yml
chown root:root /home/user/matrix-data/docker-compose.*
Bash:
chmod 600 /home/user/matrix-data/element/config.json
chmod 600 /home/user/matrix-data/matrix/homeserver.yaml
chmod 600 /home/user/matrix-data/tor/torrc
chmod 644 /home/user/matrix-data/nginx/nginx.conf
chown 999:999 /home/user/matrix-data/element/config.json /home/user/matrix-data/matrix/homeserver.yaml
chown root:root /home/user/matrix-data/nginx/nginx.conf
Bash:
chmod 600 /home/user/matrix-data/nginx/certs/nginx.key
chmod 600 /home/user/matrix-data/nginx/certs/nginx.crt
chmod 600 /home/user/matrix-data/tor/hidden_service/hostname
Bash:
chmod 700 /home/user/matrix-data/element
chmod 700 /home/user/matrix-data/matrix
chmod 755 /home/user/matrix-data/matrix/media_store
chmod 700 /home/user/matrix-data/nginx
chmod 700 /home/user/matrix-data/nginx/certs
chmod 700 /home/user/matrix-data/tor
chmod 700 /home/user/matrix-data/tor/hidden_service
chmod 700 /home/user/matrix-data/tor/hidden_service/authorized_clients
chown root:root /home/user/matrix-data/element /home/user/matrix-data/nginx /home/user/matrix-data/nginx/certs /home/user/matrix-data/tor
chown 999:999 /home/user/matrix-data/matrix /home/user/matrix-data/matrix/certs /home/user/matrix-data/matrix/media_store
Запуск проекта
Bash:
docker compose -f docker-compose.tor.yml up -d
docker compose -f docker-compose.matrix.yml up -d
docker compose -f docker-compose.element.yml up -d
docker compose -f docker-compose.nginx.yml up -d
Переходим в торе на наш адрес только не забудьте добавить https вначале заместо http
У вас выскочит такое окно, не переживайте, всё нормально, просто у агрегатора сертификатов нет возможности проверять .onion сайты, т.е. https сертификаты не особо расчитаны для Тор сети, но будет всё равно шифроваться Tor сетью и https
Просто принимаем их
У вас выскочит такое окно, не переживайте, всё нормально, просто у агрегатора сертификатов нет возможности проверять .onion сайты, т.е. https сертификаты не особо расчитаны для Тор сети, но будет всё равно шифроваться Tor сетью и https
Просто принимаем их
Всё, вы готовы приватно общаться с вашей командой/сотрудниками и прочими людьми, просто поделитесь ссылкой и не забываем включить шифрование в настройках аккаунта!
Так как я работал с проектом 2 недели и мог что то упустить в этом гайде, если у вас возникли какие то ошибки или сложности, пишите тут в теме, с радостью расскажу как исправить и перейти к следущему этапу!
Пожалуйста Войдите или Зарегистрируйтесь чтобы видеть скрытые ссылки.

(Итить твою, погоняло-то какое!), а поднять свой сервер джаббера, что уже есть дело вкуса.