Matrix-Tor Bridge с Caddy и Privoxy Step-By-Step

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
В этой статье я расскажу вам о пошаговом процессе создания безопасного и анонимного сервера Matrix с помощью Tor, Caddy, Privoxy и Synapse. Эта настройка не только обеспечивает зашифрованные коммуникации, но и использует сеть Tor, чтобы сделать ваш сервер полностью анонимным и неотслеживаемым. Моя цель - создать руководство, которому смогут следовать даже пользователи с ограниченным опытом работы с Linux, что позволит им создать свой собственный частный и безопасный сервер обмена сообщениями.
Если вы хотите узнать, как создать систему, устойчивую к вторжениям, слежке и цензуре, эта статья - именно то, что вам нужно. В следующих разделах я дам подробные инструкции по установке необходимых инструментов, настройке параметров и подготовке сервера к работе. Давайте начнем!

Прежде всего, что такое Matrix?

Matrix - это открытый децентрализованный коммуникационный протокол, созданный на основе федеративной архитектуры для безопасного, масштабируемого и прозрачного удовлетворения современных коммуникационных потребностей. Он специально создан для обмена текстовыми сообщениями, голосовых и видеозвонков, обмена файлами и даже взаимодействия между устройствами и IoT. Однако его отличительные особенности заключаются в децентрализованной архитектуре и сквозном шифровании Матрица использует событийную модель, то есть каждое сообщение, изменение состояния или файл хранится как событие в истории комнаты. Эти события организуются в структуру DAG (Directed Acyclic Graph), что позволяет отслеживать состояние комнаты на всех подключенных серверах. Каждый сервер Matrix может управляться независимо, при этом синхронизируя информацию о комнате с другими серверами в сети. Такая конструкция не только повышает устойчивость к цензуре, но и устраняет зависимость от центральной точки управления.

- Функции безопасности matrix :

1 .End-to-End Encryption:
Для шифрования сообщений в Matrix используются протоколы Olm и Megolm. Olm используется для чатов один на один, а Megolm - для групповых чатов. Эти протоколы гарантируют, что расшифровать сообщения смогут только отправитель и адресаты.
2. Аутентификация и управление ключами:
В Matrix используются передовые механизмы управления ключами шифрования, в том числе Cross-Signing, который позволяет проверить устройство и предотвратить атаки типа «человек посередине» (MITM).
3. Безопасность на уровне федерации:
Благодаря распределенной архитектуре, даже если конкретный сервер скомпрометирован или вышел из строя, остальные серверы и коммуникации остаются в безопасности.

Матрица дополнительных возможностей :

- Федерация:
Серверы взаимодействуют с помощью протоколов RESTful HTTP и стандартов JSON. Это позволяет пользователям взаимодействовать с другими пользователями независимо от того, на каком сервере они зарегистрированы.
- Поддержка мостов:
Matrix может взаимодействовать с другими протоколами и сервисами, такими как Slack, Telegram, IRC и даже WhatsApp, с помощью программных мостов.
- Постоянная история:
В отличие от других протоколов, Matrix сохраняет постоянную историю сообщений, которая синхронизируется между серверами. Это обеспечивает доступ к истории сообщений даже для пользователей, присоединившихся к комнате после ее создания.

Преимущества для специалистов по безопасности:
- Полный контроль над данными:
Размещение персонального сервера позволяет локально хранить все коммуникационные данные.
- Устойчивость к цензуре:
Децентрализованная природа сети гарантирует, что ни один субъект не сможет заблокировать доступ к матрице.
- Гибкость внедрения:
Matrix можно настроить для работы в анонимных сетях типа Tor, что добавляет дополнительный уровень конфиденциальности и безопасности.

Caddy Web Server современный и мощный веб-сервер, выбранный для этого проекта благодаря своим уникальным возможностям Ключевые особенности и причины выбора:

1. Простая и гибкая конфигурация:
- Caddy использует простой конфигурационный файл `Caddyfile`, который удобен для определения маршрутов, прокси и настроек SSL.
- По сравнению с другими веб-серверами, такими как Nginx или Apache, Caddy предлагает лучшую читаемость и более простую настройку.
2. Автоматическое управление HTTPS:
- Одной из отличительных особенностей Caddy является возможность автоматического выпуска и управления SSL-сертификатами. Хотя стандартные сертификаты не нужны для доменов .onion в сети Tor, Caddy все равно может управлять HTTPS-соединениями для внешнего доступа.
3. Встроенная поддержка обратного прокси:
- Caddy эффективно перенаправляет входящие запросы на сервер Matrix, разделяя веб-уровень и уровень приложений и обеспечивая лучшее управление сервером.
4. Поддержка HTTP/3 и высокая производительность:
- Caddy поддерживает HTTP/3 и QUIC, повышая производительность и снижая задержки при общении с пользователями.
5. Расширенные модули:
- Caddy поддерживает плагины и модули для создания пользовательских функций, таких как подробное протоколирование или управление пользователями.


Сочетание Caddy с Privoxy для максимальной безопасности и гибкости
Caddy:
Управляет маршрутами HTTP/S, обрабатывает запросы и улучшает работу пользователей.
- Privoxy:
Действует как безопасный слой для фильтрации, управления нагрузкой и защиты основного сервера.

Почему Tor для нашего проекта? Для настройки Matrix в этом проекте:

- Анонимность:
Tor обеспечивает полную анонимность сервера, делая его местоположение и идентификационную информацию неотслеживаемой.
- Конфиденциальность пользователей:
Пользователи могут подключаться к серверу через сеть Tor, не раскрывая своих IP-адресов и личных данных.
- Дополнительное шифрование:
Зашифрованные коммуникации Tor добавляют еще один уровень безопасности в дополнение к сквозному шифрованию Matrix.
- Доступ к домену .onion:
Доступ к сервису Matrix будет осуществляться через домен .onion, что является значительным преимуществом для безопасных и конфиденциальных коммуникаций.
Таким образом, Tor создает многоуровневый щит конфиденциальности и безопасности, обеспечивая анонимность и безопасность как сервера, так и пользователей. Сочетание Matrix и Tor обеспечивает полностью неотслеживаемую связь, устойчивую к перехвату и цензуре. Я планирую подробно рассказать обо всем в этом проекте, чтобы сделать его доступным для всех, даже для тех, кто имеет минимальные знания или опыт работы с Linux. Дайте мне знать, какие еще аспекты вы хотели бы, чтобы я осветил!

Основные области применения Privoxy в этой статье

1. Маршрутизация трафика в сеть Tor

Privoxy выступает в роли посредника между клиентами и сервисом Tor:

- Он получает все входящие HTTP-запросы и направляет их в Tor.
- Используя настройку forward-socks5t, он перенаправляет трафик на порт SOCKS5, предоставленный Tor.
- Этот процесс обеспечивает анонимность и неотслеживаемость всех соединений.


2. Фильтрация запросов

Privoxy может проверять HTTP-трафик перед отправкой в сеть Tor и блокировать нежелательные или рискованные запросы:

- Он фильтрует cookies, изменяет заголовки, блокирует рекламу или специфический контент.
- Эти функции обеспечивают повышенную безопасность и конфиденциальность для пользователей вашего сервера.

Инструменты для установки
1.Python

Почему стоит использовать Python?

- Synapse, основное программное обеспечение сервера Matrix, написано на Python и зависит от него.
- Многие инструменты управления и тестирования (например, скрипты управления пользователями) требуют Python.

Установка Python на Ubuntu:
Код: Скопировать в буфер обмена
Код:
apt update
apt install -y python3 python3-pip
2.caddy

Установка Caddy на Ubuntu:

1. Добавьте официальный репозиторий Caddy:
Код: Скопировать в буфер обмена
Код:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /usr/share/keyrings/caddy-archive-keyring.asc
wget -qO - https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt | sudo tee /etc/apt/sources.list.d/caddy.list
Код: Скопировать в буфер обмена
Код:
apt update
apt install -y caddy
caddy version
3. Установка Privoxy :

Проверка установки Privoxy :
Код: Скопировать в буфер обмена
Код:
apt install prixovy
prixovy --version

4.Установка Tor :

Apache-конфиг: Скопировать в буфер обмена
apt install tor
Отредактируйте файл конфигурации Tor :

nano /etc/tor/torrc

добавить :
Код: Скопировать в буфер обмена
Код:
HiddenServiceDir /var/lib/tor/matrix_hidden_service/
HiddenServicePort 80 127.0.0.1:80
HiddenServicePort 443 127.0.0.1:443
HiddenServicePort 8448 127.0.0.1:8448
SOCKSPort 127.0.0.1:9050
AutomapHostsOnResolve 1
DNSPort 127.0.0.2:53
User debian-tor
Эти инструменты обеспечивают необходимую инфраструктуру для развертывания безопасного и анонимного сервера Matrix в сети Tor:

- Python: Для Synapse и скриптов управления.
- Caddy: В качестве веб-сервера для обработки трафика HTTP/S.
- Privoxy: В качестве прокси-сервера для повышения уровня конфиденциальности.
- Tor: Для обеспечения анонимности и создания скрытого сервиса.

Установив эти компоненты, мы готовы перейти к настройке их совместной работы и развертыванию нашего сервиса. Дайте мне знать, если хотите, чтобы я провёл вас через следующие шаги!

5 .Добавление репозитория Synapse

Synapse доступен в официальных репозиториях Matrix. Сначала добавьте репозиторий:

Код: Скопировать в буфер обмена
Код:
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |sudo tee /etc/apt/sources.list.d/matrix-org.list
apt update
apt install matrix-synapse

Во время установки, когда вам будет предложено ввести имя домена, оставьте его пустым.g
Код: Скопировать в буфер обмена
pip3 install matrix-synapse synapse

Теперь, прежде чем настраивать его вручную, давайте сначала получим доступ к нашему сервису Onion. Чтобы улучшить поток проекта, я хочу создать пользовательский домен с помощью инструмента `mkp224o`. Это позволит нам продемонстрировать настройку пользовательского домена и одновременно достичь цели проекта!

Шаги по установке и загрузке mkp224o:

Сначала установите необходимые условия:

Код: Скопировать в буфер обмена
apt install gcc libc6-dev libsodium-dev make autoconf
Клонируйте репозиторий с GitHub:

git clone https://github.com/cathugger/mkp224o.git

Перейдите в каталог mkp224o:

cd mkp224o

начните компиляцию с помощью:

./autogen.sh

Далее создайте Makefile с помощью:

./configure

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

Код: Скопировать в буфер обмена
./mkp224o -d xss bhxss

Сначала сгенерируйте свой собственный адрес Onion. Затем вам нужно поместить файлы public-key и private-key в каталог, указанный в файле torrc. В файл torr нужно добавить строку User debian-tor, поскольку служба Tor по умолчанию должна работать под пользователем debian-tor. Запустите службу Tor для генерации случайного скрытого сервиса Перед настройкой пользовательских ключей запустите службу Tor, чтобы сгенерировался случайный скрытый сервис. Это позволит нам заменить имя хоста, public-key и private-key на ваши собственные.
Директория скрытого сервиса была задана как /var/lib/tor/matrix_hidden_service/. Каталоги, связанные с сервисом Tor, должны принадлежать пользователю debian-tor. Чтобы установить правильное право собственности, используйте следующие команды :
Код: Скопировать в буфер обмена
Код:
chown -R debian-tor:debian-tor /var/lib/tor/
chmod -R 700 /var/lib/tor/

Теперь приступайте к тор :
Код: Скопировать в буфер обмена
Код:
systemctl start tor
systemctl status tor

Чтобы проверить, была ли создана произвольная скрытая служба:

Код: Скопировать в буфер обмена
ls -la /var/lib/tor/matrix-hidden-service

Замените имя хоста, публичный и личный ключи После того как вы убедитесь, что скрытая служба создана, замените файлы на свои собственные:
Код: Скопировать в буфер обмена
Код:
cd /var/lib/tor/matrix-hidden-service
cp /home/xss/mkp224o/xss/bhxssyjgmqdghib3dnhyntot3va6fex3dup3d2bchezlxd62iu75igid.onion/* .

Наконец, перезапустите Tor, чтобы убедиться, что все настроено правильно:
Код: Скопировать в буфер обмена
Код:
systemctl restart tor
systemctl status tor
Теперь у вас должен быть настроен и работать ваш пользовательский Onion-адрес!

Поскольку мы будем вручную генерировать конфигурационный файл homeserver.yaml с помощью инструмента Matrix Synapse, выполните следующую команду в каталоге /etc/matrix-synapse, чтобы сохранить файлы там:

Код: Скопировать в буфер обмена
python3 -m synapse.app.homeserver --server-name xss-matrix.onion --config-path /etc/matrix-synapse/homeserver.yaml --generate-config --report-stats=no

После создания файла убедитесь, что установлены необходимые разрешения. Теперь нам нужно создать пользователя Matrix, который будет иметь необходимые разрешения для этих каталогов:

Код: Скопировать в буфер обмена
adduser --system --no-create-home --group --disabled-login synapse
--system: Создает системного пользователя.
--no-create-home: Не создает домашний каталог для пользователя.
--group: Создает группу с тем же именем, что и у пользователя.
--disabled-login: Запрещает данному пользователю напрямую входить в систему (в целях безопасности).

Все файлы, связанные с Matrix-Synapse, должны быть назначены этому новому пользователю. Пути к файлам по умолчанию: /etc/matrix-synapse для конфигураций и /var/lib/matrix-synapse для данных. Установите права собственности на эти каталоги:
Код: Скопировать в буфер обмена
Код:
chown -R synapse:synapse /etc/matrix-synapse
chown -R synapse:synapse /var/lib/matrix-synapse

Далее необходимо настроить службу systemd для Matrix-Synapse, чтобы ограничить ее выполнение этим пользователем. Отредактируйте файл службы systemd:

Код: Скопировать в буфер обмена
nano /lib/systemd/system/matrix-synapse.service
Убедитесь, что заданы следующие параметры:

User=synapse

Кроме того, в директории conf.d, расположенной по адресу /etc/matrix-synapseedit файл server_name.yaml и добавьте в качестве имени сервера ваш Onion-адрес. После обновления файла службы перезагрузите конфигурацию systemd и перезапустите службу Matrix-Synapse:
Код: Скопировать в буфер обмена
Код:
systemctl daemon-reload
systemctl restart matrix-synapse
systemctl status matrix-synapse
Теперь перейдем к настройке Privoxy. Откройте конфигурационный файл Privoxy /etc/privoxy/config и найдите строку listen-address. Как только вы ее найдете, добавьте следующее:

forward-socks5t / 127.0.0.1:9050 .

Также установите значение listen-address:

listen-address 0.0.0.0

запустите службы Privoxy:

Код: Скопировать в буфер обмена
Код:
systemctl start privoxy
systemctl status privoxy

Теперь на клиентской системе настройте параметры прокси для маршрутизации трафика через сеть Tor. Задайте IP-адрес машины и порт 8118:

1736358074909.png



настройка прокси > 0.0.0.0 8118

1736358099742.png



Наконец, проверьте, проходит ли весь трафик через сеть Tor, посетив сайт Check Tor Project https://check.torproject.org . Это подтвердит, что все работает так, как ожидалось.

1736358129861.png


На этом ваша настройка завершена!

Отлично! Теперь, когда домашний сервер, onion-адрес, Privoxy и Caddy работают должным образом, давайте перейдем к настройке Caddy, homeserver.yaml matrix-synapse и созданию самоподписанного сертификата для вашего Onion-сервиса. Мы также протестируем его функциональность на клиенте

Создание самоподписанного SSL-сертификата

Для повышения безопасности и шифрования коммуникаций на сервере Synapse я решил использовать самоподписанный SSL-сертификат. Это позволит нам устанавливать безопасные и зашифрованные соединения даже для доменов .onion, обеспечивая тем самым повышенную безопасность для пользователей. Может возникнуть вопрос, почему мы не используем бесплатные сертификаты, предоставляемые Let's Encrypt для доменов .onion. Вот почему:

Почему не использовать Let's Encrypt? Let's Encrypt выдает сертификаты только для публичных DNS-доменов, которые могут быть разрешены через стандартную систему DNS. Домены .onion не используют публичные DNS, вместо этого они управляются сетью Tor изнутри. В результате Let's Encrypt не может подтвердить эти домены. Самогенерирующиеся домены .onion автоматически и случайно генерируются сетью Tor и не регистрируются ни в какой системе DNS. Поскольку Let's Encrypt требует процесса проверки (например, DNS-запроса или HTTP-запроса) для выдачи сертификатов, он не может предоставить сертификаты для этих доменов. Чтобы решить эту проблему, я написал скрипт, который полностью автоматизирует процесс создания сертификата. Сценарий разработан так, чтобы быть удобным для пользователя, поэтому даже если вы не знакомы с OpenSSL или конфигурацией сертификатов, вы сможете создать нужный вам сертификат с помощью всего нескольких простых команд.

Принцип работы сценария

1. Проверка уровня доступа

Сначала скрипт проверяет, запущен ли он с правами root. Это гарантирует, что у него есть необходимые разрешения на доступ к файлам и каталогам.

2. Сбор информации о пользователе
Скрипт собирает у вас следующую информацию:

- Доменное имя (например, xss-matrix.onion).
- Путь к файлу для хранения сертификата и закрытого ключа
- Срок действия сертификата (по умолчанию: 365 дней)
- Размер ключа (по умолчанию: 4096 бит)
- Право собственности пользователей и групп на файлы.

3. Генерация закрытого ключа

Используя OpenSSL, сценарий генерирует закрытый ключ, который необходим для подписания сертификата и защиты связи.

4. Создание запроса на подписание сертификата (CSR)

Создается CSR, содержащий информацию о домене и некоторые организационные данные. Это служит основой для сертификата.

5. Настройка атрибутов сертификата

Создается файл с именем .ext, в котором определяются атрибуты сертификата, включая поддержку альтернативного имени субъекта (SAN).

6. Создание окончательного сертификата

Наконец, используя закрытый ключ и CSR, сценарий генерирует самоподписанный сертификат. Этот сертификат подписан закрытым ключом и готов к использованию в различных службах.

7. Перенос файлов и установка разрешений

Файлы сертификата и закрытого ключа перемещаются по указанным путям, а права собственности на них устанавливаются для указанных пользователей и групп.

Необходимость использования HTTPS для Matrix Протокол HTTPS (Hypertext Transfer Protocol Secure) является неизбежным требованием для работы Synapse (сервера протоколов Matrix). Эта необходимость обусловлена безопасностью, функциональностью и даже тем, как серверы общаются с другими серверами и клиентами. Требования к клиентам Matrix Клиенты Matrix (такие как Element) требуют HTTPS для связи с сервером. Если вместо него используется HTTP:

- Большинство клиентов не разрешат взаимодействие по умолчанию.
- Пользователи будут получать предупреждения о безопасности.
- Доступ к серверу будет полностью ограничен.


Чтобы решить эти проблемы, необходимо создать самоподписанный SSL-сертификат.


ssl.sh :
Bash: Скопировать в буфер обмена
Код:
#!/bin/bash

function header() {
    echo "==================================================="
    echo "$1"
    echo "==================================================="
}

if [ "$EUID" -ne 0 ]; then
    echo "This script must be run as root. Please use sudo." >&2
    exit 1
fi

read -p "Enter your domain name (e.g., xss-matrix.onion): " DOMAIN
if [ -z "$DOMAIN" ]; then
    echo "Domain name cannot be empty. Exiting." >&2
    exit 1
fi

read -p "Enter path for the certificate file (default: /etc/matrix-synapse/onion-cert.pem): " CERT_PATH
CERT_PATH=${CERT_PATH:-/etc/matrix-synapse/onion-cert.pem}

read -p "Enter path for the key file (default: /etc/matrix-synapse/onion-key.pem): " KEY_PATH
KEY_PATH=${KEY_PATH:-/etc/matrix-synapse/onion-key.pem}

read -p "Enter the validity period for the certificate in days (default: 365): " DAYS_VALID
DAYS_VALID=${DAYS_VALID:-365}

read -p "Enter the key size (default: 4096): " KEY_SIZE
KEY_SIZE=${KEY_SIZE:-4096}

read -p "Enter the user that should own the certificate files (default: caddy): " TARGET_USER
TARGET_USER=${TARGET_USER:-caddy}

read -p "Enter the group that should own the certificate files (default: caddy): " TARGET_GROUP
TARGET_GROUP=${TARGET_GROUP:-caddy}

if ! id "$TARGET_USER" &>/dev/null; then
    echo "The user '$TARGET_USER' does not exist. Please create the user first or enter a valid username." >&2
    exit 1
fi

if ! getent group "$TARGET_GROUP" &>/dev/null; then
    echo "The group '$TARGET_GROUP' does not exist. Please create the group first or enter a valid group name." >&2
    exit 1
fi

WORK_DIR="/opt/cert_temp"  # Set a safe directory for temporary work files
mkdir -p "$WORK_DIR"

header "Generating Private Key for $DOMAIN"
openssl genrsa -out "$WORK_DIR/$DOMAIN.key" $KEY_SIZE
if [ $? -ne 0 ]; then
    echo "Error generating private key. Exiting." >&2
    exit 1
fi
echo "Private key generated successfully at $WORK_DIR/$DOMAIN.key"

header "Creating Certificate Signing Request (CSR)"
openssl req -new -key "$WORK_DIR/$DOMAIN.key" -out "$WORK_DIR/$DOMAIN.csr" -subj "/C=US/ST=State/L=City/O=Organization/OU=Unit/CN=$DOMAIN"
if [ $? -ne 0 ]; then
    echo "Error creating CSR. Exiting." >&2
    exit 1
fi
echo "CSR created successfully at $WORK_DIR/$DOMAIN.csr"

header "Generating Certificate Configuration File"
cat > "$WORK_DIR/$DOMAIN.ext" <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = $DOMAIN
EOF

header "Creating Self-Signed Certificate"
openssl x509 -req \
    -in "$WORK_DIR/$DOMAIN.csr" \
    -signkey "$WORK_DIR/$DOMAIN.key" \
    -out "$WORK_DIR/$DOMAIN.crt" \
    -days $DAYS_VALID \
    -extfile "$WORK_DIR/$DOMAIN.ext"
if [ $? -ne 0 ]; then
    echo "Error creating self-signed certificate. Exiting." >&2
    exit 1
fi
echo "Self-signed certificate created successfully at $WORK_DIR/$DOMAIN.crt"

# Check if the certificate file was created
if [ ! -f "$WORK_DIR/$DOMAIN.crt" ]; then
    echo "Error: The certificate file does not exist at $WORK_DIR/$DOMAIN.crt." >&2
    exit 1
fi

header "Moving Files to Specified Paths"

# Check if certificate exists before moving
if [ ! -f "$WORK_DIR/$DOMAIN.crt" ]; then
    echo "Error: The certificate file does not exist in the working directory ($WORK_DIR/$DOMAIN.crt)." >&2
    exit 1
fi

# Create directories if not exist
mkdir -p "$(dirname "$CERT_PATH")"
mkdir -p "$(dirname "$KEY_PATH")"

# Move files
mv "$WORK_DIR/$DOMAIN.crt" "$CERT_PATH"
if [ $? -ne 0 ]; then
    echo "Error: Failed to move certificate to $CERT_PATH." >&2
    exit 1
fi

mv "$WORK_DIR/$DOMAIN.key" "$KEY_PATH"
if [ $? -ne 0 ]; then
    echo "Error: Failed to move key to $KEY_PATH." >&2
    exit 1
fi

echo "Files moved successfully:"
echo " - Certificate: $CERT_PATH"
echo " - Private Key: $KEY_PATH"

# Copy certificate for client
header "Copying Certificate for Client"
CLIENT_CERT_PATH="$CLIENT_CERT_DIR/$DOMAIN-client-cert.crt"

if [ ! -f "$CERT_PATH" ]; then
    echo "Error: The certificate file does not exist at $CERT_PATH. Cannot create client certificate." >&2
    exit 1
fi

cp "$CERT_PATH" "$CLIENT_CERT_PATH"
if [ $? -ne 0 ]; then
    echo "Error: Failed to copy certificate to $CLIENT_CERT_PATH." >&2
    exit 1
fi

echo "Client certificate created successfully at $CLIENT_CERT_PATH"
Настройка Caddyfile для вашего сервера Matrix

Теперь, когда мы установили самоподписанный сертификат для нашего сервиса .onion и убедились, что HTTPS готов, следующим шагом будет настройка Caddy, который будет выступать в качестве обратного прокси для вашего сервера Synapse. Caddy - отличный выбор благодаря своей простоте, встроенному управлению HTTPS и высокой производительности. Вот описание конфигурации, которую я написал для настройки Caddy в качестве обратного прокси для сервера Matrix на Tor. Давайте пройдемся по каждому разделу, чтобы понять, что он делает.

Раздел 1: Трафик федерации
Код: Скопировать в буфер обмена
Код:
xss:8448 {
        tls /etc/matrix-synapse/onion-cert.pem /etc/matrix-synapse/onion-key.pem
        reverse_proxy /_matrix/federation/* http://127.0.0.1:8008
}
Здесь мы обрабатываем запросы, поступающие на порт 8448, который специально используется для федерации - когда наш сервер Matrix взаимодействует с другими серверами в сети.

tls: Указывает путь к сертификату и закрытому ключу для включения HTTPS.
reverse_proxy (обратный прокси): Перенаправляет все запросы, связанные с /federation/*, на сервер Matrix, работающий на localhost на порту 8008.

Раздел 2: Перенаправление HTTP на HTTPS
Код: Скопировать в буфер обмена
Код:
xss:80 {
        redir https://xss.onion
}
Этот раздел гарантирует, что любой HTTP-трафик (порт 80) будет немедленно перенаправлен на HTTPS. В этом случае он перенаправляет пользователей на другой домен .onion (`xss.onion`) для дополнительной безопасности.

Раздел 3: HTTPS и клиентские конфигурации
Код: Скопировать в буфер обмена
Код:
xss:443 {
        bind 0.0.0.0
        tls /etc/matrix-synapse/onion-cert.pem /etc/matrix-synapse/onion-key.pem {
                protocols tls1.2 tls1.3

        }
        encode gzip
        reverse_proxy /_matrix/client/* http://127.0.0.1:8008
        handle /.well-known/matrix/client {
                header Content-Type application/json
                respond 200 "{\"m.homeserver\": {\"base_url\": \"https://xss.onion\"}}"

        }

        handle /.well-known/matrix/server {
                header Content-Type application/json
                respond 200 "{\"m.server\": \"xss.onion:443\"}"
        }

        handle /.well-known/matrix/support {
                header Content-Type application/json
                respond 200 "{\"message\": \"Support information not available.\"}"
        }
}
Здесь мы обрабатываем HTTPS-трафик на порту 443. Каждая часть имеет определенную роль:

- bind 0.0.0.0: Слушает все локальные IP-адреса.
- tls: Настраивает SSL-сертификаты и ограничивает протокол до TLS 1.2 и 1.3 для большей безопасности.
- encode gzip: Включает сжатие для повышения скорости загрузки.

Специальные маршруты:

- reverse_proxy /_matrix/client/*: Направляет все запросы, связанные с клиентом (например, Element), на сервер Matrix, работающий на порту `8008`.
- .well-known/matrix/client: Возвращает JSON-файл, информирующий клиента о том, где находится Homeserver.
- .well-known/matrix/server: Возвращает JSON-файл для других серверов, указывающий, куда отправлять сообщения для нашего сервера Matrix.
- .well-known/matrix/support: Предоставляет простой ответ, указывающий на то, что информация о поддержке недоступна.



Эта конфигурация гарантирует, что:

- Федерация работает: Другие серверы Matrix могут обмениваться сообщениями с нашим сервером.
- Безопасное HTTPS-соединение: Все соединения зашифрованы и безопасны.
- Клиенты могут подключаться: Клиенты могут найти и подключиться к нашему серверу без проблем.


Проблема федерации с самоподписанным сертификатом Хотя мы настроили федерацию в настройках Caddy и направили запросы по правильному пути (/_matrix/federation/*), проблема все еще существует. Проблема заключается в том, что наш сервер не может взаимодействовать с другими серверами, такими как matrix.org. Причина кроется в самоподписном сертификате, который мы используем. Почему самоподписной сертификат вызывает проблемы?
Когда серверы Matrix (например, matrix.org) пытаются установить связь с нашим сервером, они проверяют наш сертификат. Поскольку самоподписанный сертификат не выдан доверенным центром сертификации (ЦС), другие серверы не доверяют ему и отклоняют запросы. Хотя наш сервер может отправлять запросы Федерации, сервер назначения (например, matrix.org) при попытке ответить на запрос определяет наш сертификат как недействительный, и соединение отклоняется. В результате сообщения, которые должны обмениваться между нашим сервером и другими серверами, не отправляются и не принимаются.В настоящее время проблема Федерации сохраняется из-за самоподписанного сертификата, и наш сервер не может установить соединение с `matrix.org` или другими серверами, которым требуются действительные сертификаты. Я активно ищу лучшее решение для устранения этой проблемы.

Конфигурация homeserver.yaml synapse

Этот конфигурационный файл предназначен для основных настроек Synapse. Каждая секция служит определенной цели, управляя такими вещами, как связь с клиентами, федерация, база данных и многими другими настройками. Давайте пройдемся по каждой секции шаг за шагом, чтобы объяснить, что она делает.

добавить

Настройки основного сервера :
Код: Скопировать в буфер обмена
Код:
server_name: "xss.onion"
public_baseurl: "https://xss.onion"
pid_file: "/var/run/matrix-synapse.pid"
- server_name: Это имя нашего сервера Matrix, которое мы установили на адрес .onion.
- public_baseurl: Публичный URL-адрес сервера, используемый клиентами и другими серверами.
- pid_file: Путь к файлу PID для управления процессами сервера.

Настройки слушателей :
Код: Скопировать в буфер обмена
Код:
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['127.0.0.1']
    resources:
      - names: [client, federation]
        compress: false
- порт: 8008: Сервер прослушивает порт 8008 для внутреннего HTTP-трафика, поскольку TLS обрабатывается Caddy.
- tls: false: Сам Synapse не обрабатывает TLS. Это делегируется Caddy.
- x_forwarded: true: Поддержка обратных прокси, таких как Caddy, путем переадресации IP-адреса клиента на сервер.
- resources: Указывает, что этот слушатель обрабатывает как клиентские запросы, так и запросы федерации.

Конфигурация базы данных :
Код: Скопировать в буфер обмена
Код:
database:
  name: sqlite3
  args:
    database: /var/lib/matrix-synapse/homeserver.db
- sqlite3: Использует SQLite, который подходит для небольших или тестовых сред. Для производства рекомендуется использовать PostgreSQL.
- база данных: Путь к файлу базы данных SQLite.

Настройки регистрации:
Код: Скопировать в буфер обмена
Код:
enable_registration: true
enable_registration_without_verification: true
registration_shared_secret: ""
- enable_registration: Позволяет пользователям регистрироваться.
- enable_registration_without_verification: Разрешает регистрацию без проверки по электронной почте или CAPTCHA.
- registration_shared_secret: ключ, используемый для создания новых пользователей через API.

Пути к носителям и журналам:
Код: Скопировать в буфер обмена
Код:
media_store_path: /var/lib/matrix-synapse/media
log_config: "/etc/matrix-synapse/log.yaml"
-media_store_path: Указывает место хранения загруженных медиафайлов.
-log_config: Путь к файлу конфигурации журнала.

Федерация и связанные с ней настройки :
Код: Скопировать в буфер обмена
Код:
federation_verify_certificates: true
federation_certificate_verification_whitelist:
  - "*.onion"
federation_domain_whitelist: null
outbound_proxy:
  http_proxy: "http://127.0.0.1:9050"
  https_proxy: "http://127.0.0.1:9050"
- federation_verify_certificates: Включает проверку сертификатов для федерации.
- federation_certificate_verification_whitelist: Разрешает домены .onion, даже если их сертификаты недействительны.
- outbound_proxy: Настраивает исходящий прокси на маршрутизацию через сеть Tor.


singup hCAPTCHA :
перейдите на сайт: https://hcaptcha.com

1. зайдите на сайт и выберите бесплатный тарифный план
2.добавьте ключ сайта

1736358522235.png


1736358533931.png


1736358549515.png


1736358568183.png


101529




hCAPTCHA и ограничение скорости входа :


Код: Скопировать в буфер обмена
Код:
rc_login:
  enabled: true
  siteverify_api: "https://hcaptcha.com/siteverify"
  public_key: ""
  private_key: ""
-rc_login: Настраивает CAPTCHA для входа в систему. В настоящее время используется hCaptcha.
- siteverify_api: Конечная точка API для проверки CAPTCHA.

Почему я включил hCaptcha:
Если hCaptcha не включена на сервере Matrix, а регистрация оставлена открытой, пользователи не смогут зарегистрироваться. Это связано с тем, что сервер Matrix по умолчанию требует наличия механизма проверки (например, CAPTCHA) для завершения регистрации.

Настройки безопасности :
Код: Скопировать в буфер обмена
Код:
use_insecure_ssl_client_just_for_testing_do_not_use: true
federation_custom_ca_list: null
use_insecure_ssl_client_just_for_testing_do_not_use: Разрешает соединения с недействительными сертификатами в целях тестирования. Не рекомендуется для использования в производстве.

Разные пути:
Код: Скопировать в буфер обмена
Код:
room_prejoin_state:
  enabled: true
default_room_version: "10"

- room_prejoin_state: Отображает информацию о комнате для пользователей до того, как они присоединятся.
- default_room_version: Устанавливает версию по умолчанию для новых комнат (в настоящее время версия 10).

Эта конфигурация проста, но функциональна, сфокусирована на внутренних коммуникациях, федерации и регистрации пользователей. Хотя проблема самоподписанных сертификатов остается нерешенной, эта настройка хорошо подходит для тестирования и внутреннего использования.

Настройка клиентов для подключения к серверу Matrix

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

Вот как установить сертификат onion.crt на клиенте:

1. Установите сертификат

- Щелкните правой кнопкой мыши на файле сертификата и выберите Install Certificate (Установить сертификат).
- В процессе установки не забудьте добавить сертификат в список доверенных корневых центров сертификации.

1736358750004.png


1736358759813.png


2. Проверьте конфигурацию прокси-сервера

Убедитесь, что используемый прокси совпадает с тем, который вы настроили (например, prixovy). Перепроверьте настройки следующим образом:

- Шаги по проверке настроек прокси на основе вашей платформы

3. Запуск Element с игнорированием SSL-ошибок

Запустите Element с помощью следующей команды, чтобы обойти ошибки SSL:

--ignore-certificate-errors

1736358785894.png


Редактирование имени хоста

После запуска Element нажмите на Edit Hostname и введите свой адрес .onion без префикса https://

1736358845876.png


1736358851980.png


1736358859475.png


Если все настроено правильно, ваши клиенты должны подключаться к серверу без каких-либо проблем. Надеюсь, эта статья была полезной, и я с нетерпением жду ваших отзывов. Если вы найдете ошибки в руководстве или столкнетесь с проблемами при настройке или установке, не стесняйтесь сообщить мне об этом в комментариях под этой темой. Я буду рад помочь вам. Всем удачного дня!

homeserver.yaml
Код: Скопировать в буфер обмена
Код:
server_name: ""
public_baseurl: "https://"
pid_file: /etc/matrix-synapse/homeserver.pid
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['127.0.0.1']
    resources:
      - names: [client, federation]
        compress: false
database:
  name: sqlite3
  args:
    database: /etc/matrix-synapse/homeserver.db
log_config: "/etc/matrix-synapse/"
media_store_path: /etc/matrix-synapse/media_store
enable_registration: true
enable_registration_without_verification: true
registration_shared_secret: ""
suppress_key_server_warning: true
federation_verify_certificates: true
federation_certificate_verification_whitelist:
  - "*.onion"
federation_domain_whitelist: null
outbound_proxy:
  http_proxy: "http://127.0.0.1:9050"
  https_proxy: "http://127.0.0.1:9050"
report_stats: false
macaroon_secret_key: ""
form_secret: ""
signing_key_path: "/etc/matrix-synapse/"
trusted_key_servers:
  - server_name: "matrix.org"
    accept_keys_insecurely: true
rc_login:
  enabled: true
  siteverify_api: "https://hcaptcha.com/siteverify"
  public_key: ""
  private_key: ""
room_prejoin_state:
  enabled: true
default_room_version: "10"

1736358902575.png



CaddyFile :
Код: Скопировать в буфер обмена
Код:
.onion:8448 {
        tls /etc/matrix-synapse/onion-cert.pem /etc/matrix-synapse/onion-key.pem
        reverse_proxy /_matrix/federation/* http://127.0.0.1:8008
}

.onion:80 {
        redir https://.onion
}

.onion:443 {
        bind 0.0.0.0
        tls /etc/matrix-synapse/onion-cert.pem /etc/matrix-synapse/onion-key.pem {
                protocols tls1.2 tls1.3
        }
        encode gzip
        reverse_proxy /_matrix/client/* http://127.0.0.1:8008
        #reverse_proxy /_matrix/* http://localhost:8008
        #reverse_proxy /_synapse/* http://localhost:8008

        handle /.well-known/matrix/client {
                header Content-Type application/json
                respond 200 "{\"m.homeserver\": {\"base_url\": \"https://.onion\"}}"
        }

        handle /.well-known/matrix/server {
                header Content-Type application/json
                respond 200 "{\"m.server\": \".onion:443\"}"
        }

        handle /.well-known/matrix/support {
                header Content-Type application/json
                respond 200 "{\"message\": \"Support information not available.\"}"
        }
}

1736358940212.png



Дорогие друзья, пожалуйста, обратите внимание, что все связанные файлы должны иметь соответствующие права для своего пользователя. Это означает, что файлы, расположенные в matrix-synapse, должны принадлежать пользователю synapse. Обратитесь к приведенному ниже изображению.

1736358970540.png



С наилучшими пожеланиями
Статья на ENG : https://xss.is/threads/129998/
Специальный перевод для XSS.is от blackhunt
 
Сверху Снизу