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

https://github.com/simplex-chat/simplexmq?tab=readme-ov-file#smp-server

Подготовка сервера

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

su
apt install sudo
su - root
adduser username sudo
reboot

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

sudo apt-get update
sudo apt-get upgrade

Подключаем SSH доступ для пользователя root на Debian

Для начала, необходимо создать пароль пользователю root следующей командой:

passwd root

Теперь открываем настройки SSH-сервера:

sudo nano /etc/ssh/sshd_config

И отредактируйте в нем следующую строку:

PermitRootLogin yes

После этого перезагрузите SSH сервис:

sudo systemctl restart ssh || sudo systemctl restart sshd

Устанавливаем недостающие библиотеки:

apt install curl gnupg2 ufw libssl-dev -y
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1

Устанавливаем SMP и XFTP сервер с Docker на Debian 12 (Вариант №1 с Docker)

# 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 "xftp-server start"
docker exec -it 3598af7c4d35 sh -c "xftp-server start"

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

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

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

systemctl enable docker

Устанавливаем SMP и XFTP сервер без Docker на Debian 12 (Вариант №2 без Docker)

Устанавливаем SMP сервер.

SMP-сервер — это сервер ретрансляции, используемый для передачи сообщений в сети SimpleX.


Установить бинарный файл:

curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/smp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/smp-server && chmod +x /usr/local/bin/smp-server

Создайте пользователя и группу для smp-server:

sudo useradd -m smp

Создайте необходимые каталоги и назначьте разрешения:

sudo mkdir -p /var/opt/simplex /etc/opt/simplex
sudo chown smp:smp /var/opt/simplex /etc/opt/simplex

Разрешить smp-serverпорт в брандмауэре:

sudo ufw allow 5223/tcp
sudo ufw enable

Необязательно — если вы используете дистрибутив с systemd, создайте /etc/systemd/system/smp-server.service файл со следующим содержимым:

nano /etc/systemd/system/smp-server.service

И вставляем следующий текст:

[Unit]
Description=SMP server systemd service

[Service]
User=smp
Group=smp
Type=simple
ExecStart=/usr/local/bin/smp-server start +RTS -N -RTS
ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex/smp-server-store.log" ] && cp "/var/opt/simplex/smp-server-store.log" "/var/opt/simplex/smp-server-store.log.bak"'
LimitNOFILE=65535
KillSignal=SIGINT
TimeoutStopSec=infinity

[Install]
WantedBy=multi-user.target

И выполнить:

sudo systemctl daemon-reload


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

Настройте официальный репозиторий 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 /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

Увидим следующий адрес:

m4whnydkdh2gws5tshqv5pnw5vg6ukhbdowqshbhfnq22e7t2ef6akid.onion

Конфигурация smp-server

Чтобы увидеть, какие параметры доступны, выполните smp-server без флагов:

sudo su smp -c smp-server

Увидим:

...
Available commands:
  init                     Initialize server - creates /etc/opt/simplex and
                           /var/opt/simplex directories and configuration files
  start                    Start server (configuration:
                           /etc/opt/simplex/smp-server.ini)
  delete                   Delete configuration and log files

Вы можете получить дополнительную помощь, выполнив: sudo su smp -c "smp-server <command> -h"

После этого нам необходимо настроить smp-server:


Интерактивно (Вариант №1)


Выполните следующую команду:

sudo su smp -c "smp-server init"

Есть несколько вариантов:

Enable store log to restore queues and messages on server restart (Yn): Y

Введите y, чтобы включить сохранение и восстановление соединений и сообщений при перезапуске сервера.

Обратите внимание : важно использовать SIGINT для перезапуска сервера, иначе недоставленные сообщения не будут восстановлены. Соединения будут восстановлены независимо от того, как будет перезапущен сервер, поскольку в отличие от сообщений они добавляются в журнал только для добавления при каждом изменении.

Enable logging daily statistics (yN): N

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

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

Require a password to create new messaging queues? r

Введите r произвольный пароль для защиты паролем smp-server или n для отключения защиты паролем.

Enter server FQDN or IP address for certificate (127.0.0.1): smp.putyato.pro

Введите свой домен или IP-адрес, на котором работает ваш SMP-сервер — он будет включен в сертификаты сервера, а также напечатан как часть адреса сервера.


Через параметры командной строки (Вариант №2)


Выполните следующую команду:

sudo su smp -c "smp-server init -h"

Мы увидим:

...
Available options:
  -l,--store-log           Enable store log for persistence
  -s,--daily-stats         Enable logging daily server statistics
  -a,--sign-algorithm ALG  Signature algorithm used for TLS certificates:
                           ED25519, ED448 (default: ED448)
  --ip IP                  Server IP address, used as Common Name for TLS online
                           certificate if FQDN is not supplied
                           (default: "127.0.0.1")
  -n,--fqdn FQDN           Server FQDN used as Common Name for TLS online
                           certificate
  --no-password            Allow creating new queues without password
  --password PASSWORD      Set password to create new messaging queues
  -y,--yes                 Non-interactive initialization using command-line
                           options
  -h,--help                Show this help text

Вы должны определить, какие флаги необходимы для вашего варианта использования, а затем выполнить smp-server init с -yфлагом для инициализации:

sudo su smp -c "smp-server init -y -<your flag> <your option>"

Например, запустите:

sudo su smp -c "smp-server init -y -l --ip 192.168.1.5 --password test"

чтобы инициализировать вашу smp-server конфигурацию с помощью:

восстановление соединений и сообщений при перезапуске сервера ( -l флаг),

IP адрес 192.168.1.5,

защитить smp-server паролем test.


После этого ваша установка будет завершена, и вы должны увидеть в выводе терминала что-то вроде этого:

Certificate request self-signature ok
subject=CN = 127.0.0.1
Server initialized, you can modify configuration in /etc/opt/simplex/smp-server.ini.
Run `smp-server start` to start server.
----------
You should store CA private key securely and delete it from the server.
If server TLS credential is compromised this key can be used to sign a new one, keeping the same server identity and established connections.
CA private key location: /etc/opt/simplex/ca.key
----------
SMP server v3.4.0
Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=
Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@smp.putyato.pro

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

Если вы передали IP-адрес или имена хостов во время инициализации, они будут напечатаны как часть адреса сервера, в противном случае они будут заменены <hostnames> фактическими адресами серверов.


Документация

Все необходимые файлы для smp-serverнаходятся в /etc/opt/simplex/ папке.

Сохраненные сообщения, соединения, статистика и журнал сервера находятся в /var/opt/simplex/ папке.

Адрес SMP-сервера

Адрес SMP-сервера имеет следующий формат:

smp://<fingerprint>[:<password>]@<public_hostname>[,<onion_hostname>]
<fingerprint>

Полученный адрес сервера вставляем в свой телефон:

smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@smp.putyato.pro,m4whnydkdh2gws5tshqv5pnw5vg6ukhbdowqshbhfnq22e7t2ef6akid.onion

Ваш smp-server отпечаток пальца сертификата. Вы можете проверить отпечаток своего сертификата в формате /etc/opt/simplex/fingerprint.

необязательный <password>

Ваш настроенный пароль smp-server. Вы можете проверить настроенный пароль в /etc/opt/simplex/smp-server.ini разделе [AUTH] в create_password: поле.

<public_hostname>, необязательный <onion_hostname>

Ваши настроенные имена хостов smp-server. Вы можете проверить настроенные хосты в /etc/opt/simplex/smp-server.ini разделе [TRANSPORT] в host: поле.

Системные команды

Чтобы начать smp-server загрузку хоста, выполните:

sudo systemctl enable smp-server.service

Created symlink /etc/systemd/system/multi-user.target.wants/smp-server.service → /etc/systemd/system/smp-server.service. Для начала smp-server запустите:

sudo systemctl start smp-server.service

Чтобы проверить статус smp-server, запустите:

sudo systemctl status smp-server.service
● smp-server.service - SMP server
     Loaded: loaded (/etc/systemd/system/smp-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-11-23 19:23:21 UTC; 1min 48s ago
   Main PID: 30878 (smp-server)
     CGroup: /docker/5588ab759e80546b4296a7c50ffebbb1fb7b55b8401300e9201313b720989aa8/system.slice/smp-server.service
             └─30878 smp-server start

Nov 23 19:23:21 5588ab759e80 systemd[1]: Started SMP server.
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@<hostnames>
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Store log: /var/opt/simplex/smp-server-store.log
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Listening on port 5223 (TLS)...
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: not expiring inactive clients
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: creating new queues requires password

Чтобы остановить smp-server, запустите:

sudo systemctl stop smp-server.service

Чтобы проверить хвост smp-server журнала, запустите:

sudo journalctl -fu smp-server.service
Nov 23 19:23:21 5588ab759e80 systemd[1]: Started SMP server.
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: SMP server v3.4.0
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Fingerprint: d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Server address: smp://d5fcsc7hhtPpexYUbI2XPxDbyU2d3WsVmROimcL90ss=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@<hostnames>
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Store log: /var/opt/simplex/smp-server-store.log
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: Listening on port 5223 (TLS)...
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: not expiring inactive clients
Nov 23 19:23:21 5588ab759e80 smp-server[30878]: creating new queues requires password

Обновление вашего SMP-сервера

Чтобы обновить SMP-сервер до последней версии, выберите метод установки и выполните следующие действия:

Остановите сервер:

sudo systemctl stop smp-server

Обновите бинарный файл:

curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/smp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/smp-server && chmod +x /usr/local/bin/smp-server

Запустите сервер:

sudo systemctl start smp-server
Устанавливаем XFTP сервер.

XFTP — это новый протокол передачи файлов, ориентированный на защиту метаданных. Он основан на тех же принципах, что и протокол обмена сообщениями SimpleX.


Использование официальных двоичных файлов:

curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/xftp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/xftp-server && chmod +x /usr/local/bin/xftp-server

Компиляция из исходников:

Создайте пользователя и группу для xftp-server:

sudo useradd -m xftp

Создайте необходимые каталоги и назначьте разрешения:

sudo mkdir -p /var/opt/simplex-xftp /etc/opt/simplex-xftp /srv/xftp
sudo chown xftp:xftp /var/opt/simplex-xftp /etc/opt/simplex-xftp /srv/xftp

Разрешить порт xftp-сервера в брандмауэре:

sudo ufw allow 443/tcp
sudo ufw enable

Необязательно — если вы используете дистрибутив с systemd, создайте /etc/systemd/system/xftp-server.service файл со следующим содержимым:

sudo nano /etc/systemd/system/xftp-server.service

Вставляем:

[Unit]
Description=XFTP server systemd service

[Service]
User=xftp
Group=xftp
Type=simple
ExecStart=/usr/local/bin/xftp-server start +RTS -N -RTS
ExecStopPost=/usr/bin/env sh -c '[ -e "/var/opt/simplex-xftp/file-server-store.log" ] && cp "/var/opt/simplex-xftp/file-server-store.log" "/var/opt/simplex-xftp/file-server-store.log.bak"'
LimitNOFILE=65535
KillSignal=SIGINT
TimeoutStopSec=infinity
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

И выполнить

sudo systemctl daemon-reload

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

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

Настройте официальный репозиторий 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 /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 xftp-server and onion address will be displayed in clients, this is totally fine)
SOCKSPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
# xftp-server hidden service host directory and port mappings
HiddenServiceDir /var/lib/tor/simplex-xftp/
HiddenServicePort 443 localhost:443

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

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

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

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

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

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

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

cat /var/lib/tor/simplex-xftp/hostname
e7psjo73tjokafniyhwegsv6up8aa6gpoa7opl3zx3mvi6lfw6eq5kid.onion

ЭТО УЖЕ НОВЫЙ АДРЕС, ЕГО МЕНЯЕМ И В SMP СЕРВЕРЕ, ВЕРНЕЕ В СТРОКЕ ДЛЯ ТЕЛЕФОНА!!!


Конфигурация

Чтобы увидеть, какие параметры доступны, выполните xftp-serverбез флагов:

sudo su xftp -c xftp-server
...
Available commands:
  init                     Initialize server - creates /etc/opt/simplex-xftp and
                           /var/opt/simplex-xftp directories and configuration
                           files
  start                    Start server (configuration:
                           /etc/opt/simplex-xftp/file-server.ini)
  delete                   Delete configuration and log files

Вы можете получить дополнительную помощь, выполнивsu xftp -c "xftp-server <command> -h"

После этого нам необходимо настроить xftp-server:

sudo su xftp -c "xftp-server init -h"
...
Available options:
  -l,--store-log           Enable store log for persistence
  -a,--sign-algorithm ALG  Signature algorithm used for TLS certificates:
                           ED25519, ED448 (default: ED448)
  --ip IP                  Server IP address, used as Common Name for TLS online
                           certificate if FQDN is not supplied
                           (default: "127.0.0.1")
  -n,--fqdn FQDN           Server FQDN used as Common Name for TLS online
                           certificate
  -p,--path PATH           Path to the directory to store files
  -q,--quota QUOTA         File storage quota (e.g. 100gb)
  -h,--help                Show this help text

Вы должны определить, какие флаги необходимы для вашего варианта использования, а затем выполнить xftp-server init:

sudo su xftp -c "xftp-server init -<your flag> <your option>"

Например, запустите:

sudo su xftp -c "xftp-server init -l --ip 192.168.1.5 -q '20gb' -p /srv/xftp/"

или

sudo su xftp -c "xftp-server init -l -n xftp.putyato.pro -q '20gb' -p /srv/xftp/"

чтобы инициализировать вашу xftp-server конфигурацию с помощью:


восстановление соединений при перезапуске сервера ( -l флаг),

IP-адрес 192.168.1.5( --ip флаг),

доменное имя xftp.putyato.pro ( -n флаг),

установите общую квоту хранилища на 10 ГБ ( -q флаг),

хранить файлы в /srv/xftpкаталоге ( -p флаг).


Увидим:

Certificate request self-signature ok
subject=CN = xftp.putyato.pro
Server initialized, you can modify configuration in /etc/opt/simplex-xftp/file-server.ini.
Run `file-server start` to start server.
----------
You should store CA private key securely and delete it from the server.
If server TLS credential is compromised this key can be used to sign a new one, keeping the same server identity and established connections.
CA private key location:
/etc/opt/simplex-xftp/ca.key
----------
SimpleX XFTP server v1.2.3.0
Fingerprint: ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=
Server address: xftp://ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=@xftp.putyato.pro

Чтобы защитить пароль xftp-server, измените его в конфигурации:

Откройте конфигурацию с помощью:

sudo su xftp -c "nano /etc/opt/simplex-xftp/file-server.ini"

В [AUTH] разделе раскомментируйте create_password и измените его:

...
[AUTH]
# Set new_files option to off to completely prohibit uploading new files.
# This can be useful when you want to decommission the server, but still allow downloading the existing files.
new_files: on

# Use create_password option to enable basic auth to upload new files.
# The password should be used as part of server address in client configuration:
# xftp://fingerprint:password@host1,host2
# The password will not be shared with file recipients, you must share it only
# with the users who you want to allow uploading files to your server.
create_password: your_very_secure_password
...

После этого ваша установка будет завершена, и вы должны увидеть в выводе терминала что-то вроде этого:

Certificate request self-signature ok
subject=CN = 192.168.1.5
Server initialized, you can modify configuration in /etc/opt/simplex-xftp/file-server.ini.
Run `file-server start` to start server.
----------
You should store CA private key securely and delete it from the server.
If server TLS credential is compromised this key can be used to sign a new one, keeping the same server identity and established connections.
CA private key location:
/etc/opt/simplex-xftp/ca.key
----------
SimpleX XFTP server v0.1.0
Fingerprint: ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=
Server address: xftp://ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=@<hostnames>

Приведенный выше адрес сервера следует использовать в конфигурации вашего клиента, и если вы добавили пароль сервера, его следует передавать другим людям только в том случае, если вы хотите разрешить им использовать ваш сервер для загрузки файлов. Если вы передали IP-адрес или имена хостов во время инициализации, они будут напечатаны как часть адреса сервера, в противном случае они будут заменены <hostnames>фактическими адресами серверов.

Документация

Все необходимые файлы для xftp-serverнаходятся в /etc/opt/simplex-xftp/ папке.

Сохраненные сообщения, соединения, статистика и журнал сервера находятся в /var/opt/simplex-xftp/ папке.

Расположение загружаемых файлов настраивается пользователем. В нашем руководстве мы используем /srv/xftp/

Адрес XFTP-сервера

Адрес XFTP-сервера имеет следующий формат:

xftp://<fingerprint>[:<password>]@<public_hostname>[,<onion_hostname>]
<fingerprint>
xftp://ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=:V8ONoJ6ICwnrZnTC_QuSHfCEYq53uLaJKQ_oIC6-ve8=@xftp.putyato.pro,e7psjo73tjokafniyhwegsv6up8aa6gpoa7opl3zx3mvi6lfw6eq5kid.onion

Ваш xftp-serverотпечаток пальца сертификата. Вы можете проверить отпечаток своего сертификата в формате /etc/opt/simplex-xftp/fingerprint.

необязательный <password>

Ваш настроенный пароль xftp-server. Вы можете проверить настроенный пароль в /etc/opt/simplex-xftp/file-server.ini разделе [AUTH] в create_password: поле.

<public_hostname>, необязательный <onion_hostname>

Ваши настроенные имена хостов xftp-server. Вы можете проверить настроенные хосты в /etc/opt/simplex-xftp/file-server.ini разделе [TRANSPORT] в host: поле.

Системные команды Чтобы начать xftp-server загрузку хоста, выполните:

sudo systemctl enable xftp-server.service

Увидим:

Created symlink /etc/systemd/system/multi-user.target.wants/xftp-server.service → /etc/systemd/system/xftp-server.service.

Для начала xftp-server запустите:

sudo systemctl start xftp-server.service

Чтобы проверить статус xftp-server, запустите:

sudo systemctl status xftp-server.service

Увидим:

● xftp-server.service - XFTP server systemd service
     Loaded: loaded (/etc/systemd/system/xftp-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-03-11 13:11:55 UTC; 1 months 10 days ago
   Main PID: 110770 (xftp-server)
      Tasks: 14 (limit: 4611)
     Memory: 2.4G
     CGroup: /system.slice/xftp-server.service
             └─110770 /usr/local/bin/xftp-server start +RTS -N -RTS

Feb 27 19:21:11 localhost systemd[1]: Started XFTP server systemd service.
Feb 27 19:21:11 localhost xftp-server[2350]: SimpleX XFTP server v0.1.0
Feb 27 19:21:11 localhost xftp-server[2350]: Fingerprint: ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=
Feb 27 19:21:11 localhost xftp-server[2350]: Server address: xftp://ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=@<hostnames>
Feb 27 19:21:11 localhost xftp-server[2350]: Store log: /var/opt/simplex-xftp/file-server-store.log
Feb 27 19:21:11 localhost xftp-server[2350]: Uploading new files allowed.
Feb 27 19:21:11 localhost xftp-server[2350]: Listening on port 443...
Feb 27 19:21:11 localhost xftp-server[2350]: [INFO 2023-02-27 19:21:11 +0000 src/Simplex/FileTransfer/Server/Env.hs:85] Total / available storage: 64424509440 / 64424509440

Чтобы остановить xftp-server, запустите:

sudo systemctl stop xftp-server.service

Чтобы проверить хвост xftp-serverжурнала, запустите:

sudo journalctl -fu xftp-server.service

Увидим:

Feb 27 19:21:11 localhost systemd[1]: Started XFTP server systemd service.
Feb 27 19:21:11 localhost xftp-server[2350]: SimpleX XFTP server v0.1.0
Feb 27 19:21:11 localhost xftp-server[2350]: Fingerprint: ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=
Feb 27 19:21:11 localhost xftp-server[2350]: Server address: xftp://ioyYeRyy4SqJkNvb_7nM04MuLasOM4c-acVyVnqw248=@<hostnames>
Feb 27 19:21:11 localhost xftp-server[2350]: Store log: /var/opt/simplex-xftp/file-server-store.log
Feb 27 19:21:11 localhost xftp-server[2350]: Uploading new files allowed.
Feb 27 19:21:11 localhost xftp-server[2350]: Listening on port 443...
Feb 27 19:21:11 localhost xftp-server[2350]: [INFO 2023-02-27 19:21:11 +0000 src/Simplex/FileTransfer/Server/Env.hs:85] Total / available storage: 64424509440 / 64424509440

Для импорта csvв Grafanaнего необходимо:

Установите плагин Grafana: Grafana — источник данных CSV.

Разрешите локальный режим, добавив следующее:

[plugin.marcusolsson-csv-datasource] allow_local_mode = true ... к/etc/grafana/grafana.ini

Добавьте источник данных CSV:


В боковом меню перейдите на вкладку «Конфигурация» (значок шестеренки).

Нажмите «Добавить источник данных» в правом верхнем углу вкладки «Источники данных».

Введите «CSV» в поле поиска, чтобы найти источник данных CSV.

Нажмите на результат поиска с надписью «CSV».

В URL-адресе введите файл, указывающий на содержимое CSV.

Все готово! У вас должна быть возможность создать свою собственную панель со статистикой.


Обновление вашего XFTP-сервера

Чтобы обновить XFTP-сервер до последней версии, выберите метод установки и выполните следующие действия:

Остановите сервер:

sudo systemctl stop xftp-server

Обновите бинарный файл:

curl -L https://github.com/simplex-chat/simplexmq/releases/latest/download/xftp-server-ubuntu-20_04-x86-64 -o /usr/local/bin/xftp-server && chmod +x /usr/local/bin/xftp-server

Запустите сервер:

sudo systemctl start xftp-server

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

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

apt update && apt install coturn -y

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

service coturn status

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

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

Сначала мы сделаем резервную копию существующего файла конфигурации

mv /etc/turnserver.conf turnserver.conf.bak

Теперь создайте новый файл с помощью команды ниже.

touch /etc/turnserver.conf

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

nano /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

После ввода команды выше нам предлагается ознакомиться и подтвердить лицензионное соглашение, нажав «Y»:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Снова видим запрос на публикацию введенного e-mail, который отклоняем клавишей «N» и видимо сообщение «Аккаунт зарегистрирован»:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.


За 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


Скрипт устанавливает сервер SimpleX без Docker на Ubuntu 22.04

curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/simplex-chat/simplexmq/stable/install.sh -o simplex-server-install.sh \
&& if echo 'b8cf2be103f21f9461d9a500bcd3db06ab7d01d68871b07f4bd245195cbead1d simplex-server-install.sh' | sha256sum -c; then chmod +x ./simplex-server-install.sh && ./simplex-server-install.sh; rm ./simplex-server-install.sh; else echo "SHA-256 checksum is incorrect!" && rm ./simplex-server-install.sh; fi

Безопасность сервера

Создание SSH ключа для входа на сервер через ssh

В терминале Windows набираем команду:

ssh-keygen

Получаем 2 файла приватного и публичного ключа.


Далее уже на сервере создаем папку и файл с публичным ключом:

mkdir .ssh
nano .ssh/authorized_keys

И вставляем содержимое нашего публичного ключа (id_rsa.pub), который мы сгенерировали в Windows.

Далее в Расширенных настройках программы подключения к серверу установить SSh приватный ключ.

Создаем нового пользователя:

adduser user1

где user1 - имя-нового пользователя

Выдаем новому пользователю права sudo (из-под рута):

usermod -aG sudo user1

Заходим на сервер под новым пользователем user1.

Cоздаем папку и файл с публичным ключом уже для нового пользователя:

sudo mkdir .ssh
sudo nano .ssh/authorized_keys

И вставляем содержимое нашего публичного ключа (id_rsa.pub), который мы сгенерировали в Windows.

Убираем доступ по паролю

Идем в папку ssh:

cd /etc/ssh/

Редактируем файлы конфигурации ssh:

sudo nano /etc/ssh/sshd_config

Меняем Port 22 на Port 5555

Меняем PermitRootLogin=yes на PermitRootLogin=no

Раскомментируем PubkeyAuthentication yes

Меняем PasswordAuthentication yes на PasswordAuthentication no

Доступ на сервер по ROOT закрыт.

sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Меняем PasswordAuthentication yes на PasswordAuthentication no


Перезапускаем ssh:

sudo service ssh restart

Дополнительно

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

su

Обратно вернемся на пользователя user1:

su user1


Защитим сервер от взлома через брутфорс

apt install fail2ban -y && apt install ufw -y
touch /etc/fail2ban/jail.local && nano /etc/fail2ban/jail.local

Откроется редактор, вставим в него код:

[sshd]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 600
maxretry = 3
bantime = 43200

Отключаем двухсторонний пинг

nano /etc/ufw/before.rules

Меняем концовку следующего выражения с ACCEPT на DROP:

-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

Включаем фаервол

Чтобы включить фаервол, нужно заранее выписать все используемые порты на сервере, для этого мы установим netstat и посмотрим какие порты нужно открыть:

apt install net-tools
netstat -ntlp | grep LISTEN

Смотрите порты, которые идут после 0.0.0.0:порт или IP_адрес вашего_сервера:порт, например:

0.0.0.0:993
76.20.7.12:53
:::22

Их необходимо открыть в UFW или через панель управления вашим сервером/хостингом. Смотря как это реализовано у вас. Например:

ufw allow 22/tcp && ufw allow 443 && ufw allow 40000 && ufw enable

Напоследок очистимся и перезагрузимся:

apt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && reboot