SimpleX – первый мессенджер без идентификаторов пользователей, настройка сервера на Debian 12

Материал из Шпаргалка знаний
Перейти к навигации Перейти к поиску

Что такое SimpleX

​​SimpleX – не только один из немногих мессенджеров, который не собирает данные пользователей, но и единственный на сегодняшний день мессенджер, который не использует идентификаторы для профилей пользователей, даже случайные числа.

Для доставки сообщений вместо идентификаторов пользователей SimpleX имеет идентификаторы очередей сообщений, отдельные для каждого из контактов. В текущей версии приложения каждая очередь используется до тех пор, пока контакт не будет удален или пока адрес получения сообщений не будет изменен пользователем вручную. Позже команда проекта планирует автоматизировать этот процесс, а также добавить ротацию очередей в клиентский протокол, чтобы даже разговоры не имели долгосрочных идентификаторов, видимых в сети. Такая конструкция предотвращает утечку метаданных пользователей на уровне приложения.

Вы, как пользователь мессенджера, можете самостоятельно определить, какой сервер(ы) использовать для получения сообщений, а ваши контакты – серверы, которые вы используете для отправки им сообщений. Это означает, что в каждом разговоре, будут использоваться два разных сервера – по одному для каждого направления сообщений.

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

Итак, разработчики SimpleX создали свой протокол для передачи сообщений:

  • SimpleX Messaging Protocol (SMP) – это протокол для отправки сообщений в одном направлении получателю, используя промежуточный сервер. Сообщения доставляются через однонаправленные очереди, создаваемые получателями.
  • SMP работает через транспортный протокол, который обеспечивает целостность, аутентификацию сервера, конфиденциальность и привязку транспортного канала.
  • Сервер SimpleX – это один из таких серверов.
  • Сеть SimpleX – это термин, используемый для обозначения группы серверов SimpleX, которые способствуют работе SMP.
  • Библиотеки SimpleX Client говорят на языке SMP с SimpleX Servers и предоставляют низкоуровневый API, не предназначенный для использования приложениями.

С помощью функции Netzwerk & Server SimpleX можно настроить мессенджер таким образом, чтобы все коммуникации направлялись через сеть Tor. В сочетании с отсутствующим (уникальным) идентификатором и протоколом Simplex Messaging Protocol (SMP) возможно анонимное использование, что затрудняет или делает невозможным определить, кто с кем контактирует по метаданным. И еще: в отличие от Briar, например, контакт или устройство не обязательно должны быть постоянно онлайн, чтобы иметь возможность получить сообщение. Они временно хранятся на серверах ретрансляции SimpleX до тех пор, пока не будут получены.


Как работает сеть SimpleX

Сеть SimpleX по своей структуре напоминает P2P–сети, но в отличие от большинства P2P–сетей она состоит из клиентов и серверов, не зависящих от какого–либо централизованного компонента. По сравнению с более традиционными приложениями для обмена сообщениями (например, WhatsApp, Signal, Telegram) ключевыми отличиями сети SimpleX являются:

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

Запросы на соединение передаются вне сети, не обязательно защищая обмен ключами от атаки MITM (человек посередине).

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

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

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


Особенности SimpleX

  • Сквозное шифрование в каждой очереди сообщений с использованием NaCl cryptobox. Это добавлено для обеспечения избыточности в будущем (прохождение каждого сообщения через несколько серверов), чтобы избежать наличия одного и того же шифротекста в разных очередях (который будет виден злоумышленнику только в случае компрометации TLS). Ключи шифрования, используемые для этого шифрования, не вращаются, вместо этого мы планируем вращать очереди. Для согласования ключей используются ключи Curve25519.
  • Начиная с версии 2 протокола SMP (текущая версия – v4) все метаданные сообщения, включая время получения сообщения сервером (с округлением до секунды), отправляются получателям в зашифрованном виде
  • Для соединений клиент–сервер разрешены только TLS 1.2/1.3, ограниченные криптографические алгоритмы: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448.
  • Для защиты от атак повторного воспроизведения серверы SimpleX требуют привязки канала tlsunique в качестве идентификатора сессии в каждой клиентской команде, подписанной эфемерным ключом per–queue.
  • Для защиты вашего IP–адреса все клиенты SimpleX Chat поддерживают доступ к серверам обмена сообщениями через Tor.
  • Шифрование локальной базы данных с помощью парольной фразы – ваши контакты, группы и все отправленные и полученные сообщения хранятся в зашифрованном виде. Если вы использовали SimpleX Chat до версии 4.0, вам необходимо включить шифрование в настройках приложения.

Развертываем сервер SimpleX-Chat на Debian 12

После установки на сервер Debian 12 (Minimal) (x86_64) 2Gb RAM, 2 CPU, 20Gb SSD, приступаем к подготовке сервера.

Установка

Официальный репозиторий SimpleX-chat: https://github.com/simplex-chat/simplexmq

Официальный сайт: https://simplex.chat/docs/server.html

Задаем права пользователю Debian:

su
apt install sudo
su - root
adduser username sudo
reboot

* где username имя пользователя под которым зашли в систему.

sudo apt-get update
sudo apt-get upgrade

Устанавливаем Docker. на Debian 12

# Add Docker's official GPG key:

sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install docker from repo (~450MB,2Min)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt install docker.io docker-compose
# Install SimpleX from Docker Hub (~300MB,30Min)
mkdir -p $HOME/simplex/{xftp,smp}/{config,logs} && mkdir -p $HOME/simplex/xftp/files
git clone https://github.com/simplex-chat/simplexmq
cd simplexmq
git checkout stable
DOCKER_BUILDKIT=1 docker build -t local/smp-server --build-arg APP="smp-server" --build-arg APP_PORT="5223" . # For xmp-server
DOCKER_BUILDKIT=1 docker build -t local/xftp-server --build-arg APP="xftp-server" --build-arg APP_PORT="443" . # For xftp-server

На этом этапе я ждал примерно 30 минут пока выполнятся 2-е команды выше.

Далее запускаем докер с нужными нам настройками

docker run -d \
    --name smp-server \
    --restart always \
    -e "ADDR=smp.putyato.pro" \
    -p 5223:5223 \
    -v $HOME/simplex/smp/config:/etc/opt/simplex:z \
    -v $HOME/simplex/smp/logs:/var/opt/simplex:z \
    simplexchat/smp-server:latest

* где smp.putyato.pro домен нашего SMP, задаем свой.

docker run -d \
    --name xftp-server \
    --restart always \
    -e "ADDR=xftp.putyato.pro" \
    -e "QUOTA=50gb" \
    -p 443:443 \
    -v $HOME/simplex/xftp/config:/etc/opt/simplex-xftp:z \
    -v $HOME/simplex/xftp/logs:/var/opt/simplex-xftp:z \
    -v $HOME/simplex/xftp/files:/srv/xftp:z \
    simplexchat/xftp-server:latest

* где xftp.putyato.pro домен нашего XFTP, задаем свой, 50gb - допустимое место для файлов.

Проверяем как запустились Докеры.

docker ps

Смотрим ID докера и вставляем его в команду ниже:

 
#docker exec -it ------ContainerID------ sh -c "smp-server start"
docker exec -it 8077fbd502b4 sh -c "smp-server start"

Получаем нужную ссылку SMP-servera для установки в телефон:

# smp://YnnfZurIMWt0CmEFY8kiZbldDteRA9JWlCHyVYKfo-U=@smp.putyato.pro

Повторяем данную операцию для XFTP-servera:

Смотрим ID докера и вставляем его в команду ниже:

 
#docker exec -it ------ContainerID------ sh -c "smp-server start"
docker exec -it 3598af7c4d35 sh -c "xftp-server start"

Получаем нужную ссылку XFTP-servera для установки в телефон:

# xftp://DZfGTKj-dfJTPLF7MJUvO-EFFE4Vncz9v2eXjbIxKGE=@xftp.putyato.pro

Делаем чтобы докеры после перезапуска сервера автоматически поднимались.

systemctl enable docker

WebRTC ICE в SimpleX Chat Развертывание сервера STUN/TURN

Установите coturn пакет из основного репозитория.

apt update && apt install coturn

Раскомментировать TURNSERVER_ENABLED=1 из /etc/default/coturn:

sed -i '/TURN/s/^#//g' /etc/default/coturn

Настроить coturnв /etc/turnserver.conf:

# Also listen to 443 port for tls
alt-tls-listening-port=443

listening-port=3478
tls-listening-port=5349

# Use fingerprints in the TURN messages
fingerprint
# Use long-term credentials mechanism
lt-cred-mech
# Your credentials
user=$YOUR_LOGIN:$YOUR_PASSWORD
# Your server domain
server-name=turn.putyato.pro
# The default realm to be used for the users when no explicit origin/realm relationship was found
realm=turn.putyato.pro
# Path to your certificates. Make sure they're readable by cotun process user/group
cert=/etc/letsencrypt/live/turn.putyato.pro/cert.pem
pkey=/etc/letsencrypt/live/turn.putyato.pro/privkey.pem
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
# Use 2066 bits predefined DH TLS key
dh2066
# Log to journalctl
syslog
# User/group which will be running coturn service
proc-user=turnserver
proc-group=turnserver

no-loopback-peers
no-multicast-peers

# Disable weak encryption
no-tlsv1
no-tlsv1_1
no-tlsv1_2

* user=$YOUR_LOGIN:$YOUR_PASSWORD - вписываем логин и пароль без кавычек и без $. turn.putyato.pro -это наш сервер.

Запустите и включите coturnслужбу:

systemctl enable coturn && systemctl start coturn

Зарегистрируйте сертификаты Let’s Encrypt.

Мы будем использовать certbot от EFF для сертификатов Let's Encrypt.

apt-get install snapd
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot

Установив certbot, вы можете создать свой сертификат.

certbot certonly --standalone --rsa-key-size 4096 -m admin@putyato.pro -d turn.putyato.pro

За 30 (и 7) дней до истечения срока действия сертификатов вы получите электронное письмо на адрес admin@putyato.pro .

При необходимости откройте соответствующие порты:

sudo apt-get install ufw
sudo ufw allow 3478 && \
sudo ufw allow 443 && \
sudo ufw allow 5349 && \
sudo ufw allow 49152:65535/tcp && \
sudo ufw allow 49152:65535/udp

Настройка мобильных приложений

Чтобы настроить мобильное приложение для использования вашего сервера:

Откройте Settings / Network & Servers / WebRTC ICE serversи переключите переключатель Configure ICE servers.

Введите в поле все адреса серверов, по одному в строке, например, если ваши серверы находятся на порту 5349:

stun:stun.putyato.pro:3478
turn:username:password@turn.putyato.pro:3478

или

stun:stun.putyato.pro:5349
turn:username:password@turn.putyato.pro:5349

Вот и все: теперь вы можете совершать аудио- и видеозвонки через свой собственный сервер, не передавая какие-либо данные нашим серверам (кроме обмена ключами с вашим контактом в зашифрованных сообщениях E2E).


Проверка подключения STUN/TURN :

Зайдите в IceTest . https://icetest.info/

В разделе «Создание списка серверов ICE» добавьте:

STUN: stun:<your_ip_or_domain>:<port>и ударилAdd STUN TURN: turn:<your_ip_or_domain>:<port>, Username: <your_login>, Credential: <your_pass>и ударилAdd TURN

Настройка записей DNS

Настойку делаем у доменного провайдера. NIC.RU

turn.example.com. 14400 IN A    37.226.5.44
turn.example.com. 14400 IN AAAA 2001:db8:1234::1
stun.example.com. 14400 IN A    37.226.5.44
stun.example.com. 14400 IN AAAA 2001:db8:1234::1

@ IN NAPTR 10 0 "s" "RELAY:turn.udp" "" _turn._udp.example.com

_stun._udp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
_stun._tcp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
_stuns._tcp.example.com. 14400 IN SRV  5 0 5349 turn.example.com

_turn._udp.example.com.   14400 IN SRV  5 0 3478 turn.example.com
_turn._tcp.example.com.   14400 IN SRV  5 0 3478 turn.example.com
_turns._tcp.example.com.  14400 IN SRV  5 0 5349 turn.example.com


Установка Тора

smp-сервер также можно развернуть для обслуживания из сети Tor . Выполните следующие команды от имени rootпользователя.

Установить Тор:

Мы предполагаем, что вы используете дистрибутивы на основе Ubuntu/Debian. Если нет, обратитесь к официальной документации Tor или к руководству по распространению.

Настройте официальный репозиторий Tor PPA:

CODENAME="$(lsb_release -c | awk '{print $2}')"
echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main" > /etc/apt/sources.list.d/tor.list

Импортировать ключ репозитория:

curl --proto '=https' --tlsv1.2 -sSf https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

Обновить индекс репозитория:

apt update

Установить torпакет:

apt install -y tor deb.torproject.org-keyring

Настройте тор:

Конфигурация файла:

Откройте конфигурацию Tor в выбранном вами редакторе ( nano, vim, emacsи т. д.):

nano /etc/tor/torrc

И вставьте следующие строки в конец конфигурации. Обратите внимание на строки, начинающиеся с #: это комментарии к каждой отдельной опции.

# Enable log (otherwise, tor doesn't seemd to deploy onion address)
Log notice file /var/log/tor/notices.log
# Enable single hop routing (2 options below are dependencies of third). Will reduce latency in exchange of anonimity (since tor runs alongside smp-server and onion address will be displayed in clients, this is totally fine)
SOCKSPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
# smp-server hidden service host directory and port mappings
HiddenServiceDir /var/lib/tor/simplex-smp/
HiddenServicePort 5223 localhost:5223

Создайте каталоги:

mkdir /var/lib/tor/simplex-smp/ && chown debian-tor:debian-tor /var/lib/tor/simplex-smp/ && chmod 700 /var/lib/tor/simplex-smp/

Запустить тор:

Включите systemdсервис и запустите Tor. Offical torнемного ненадежен при первом запуске и может не создать луковый адрес хоста, поэтому на всякий случай перезапускаем его.

systemctl enable tor && systemctl start tor && systemctl restart tor

Отображение лукового хоста:

Выполните следующую команду, чтобы отобразить адрес вашего лукового хоста:

cat /var/lib/tor/simplex-smp/hostname