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