Перелопатив много различных гайдов в сети не нашёл ни одного полноценно и полностью рабочего. В результате попробую дебютировать на хабре со своим личным гайдом для тех, кто столкнулся с такой-же задачей: установка на своём сервере безопасного и зашифрованного мессенджера.
Что же такое Matrix Synapse и Element WEB. Давайте немного разберёмся.
Matrix Synapse - это серверная реализация протокола Matrix. Он представляет собой программный сервер, который обеспечивает коммуникацию и синхронизацию данных в сети Matrix.
Matrix Synapse используется для следующих задач:
Обмен сообщениями: Он обеспечивает передачу текстовых сообщений между пользователями в реальном времени. Пользователи могут отправлять и получать сообщения один на один или участвовать в групповых чатах.
Голосовые и видеозвонки: Matrix Synapse поддерживает голосовые и видеозвонки, что позволяет пользователям общаться в режиме реального времени, используя аудио и видео связь.
Синхронизация данных: Сервер Matrix Synapse синхронизирует данные между пользователями и их устройствами. Это позволяет пользователям получать свои сообщения и данные на всех устройствах, которые они используют для доступа к Matrix.
Децентрализация: Matrix Synapse поддерживает децентрализованную архитектуру, что означает, что каждый пользователь может иметь свой собственный сервер Matrix Synapse. Это дает пользователям контроль над своими данными и коммуникациями, так как они не зависят от централизованного сервера.
Защита и приватность: Matrix Synapse обеспечивает шифрование end-to-end для обмена сообщениями, что гарантирует безопасность и приватность коммуникаций. Это означает, что только отправитель и получатель могут прочитать содержимое сообщения.
В целом, Matrix Synapse предоставляет инфраструктуру для создания собственной сети обмена сообщениями и синхронизации данных, которая может быть использована для различных коммуникационных задач и обеспечения защиты данных.
Matrix Synapse - это программный сервер, который позволяет людям общаться друг с другом через сеть Matrix. Он отправляет и получает сообщения, позволяет проводить голосовые и видеозвонки, а также синхронизирует данные между устройствами пользователей. Matrix Synapse дает возможность людям контролировать свои данные и общение, а также обеспечивает защиту и приватность сообщений.
По сути Matrix Synapse является вашим собственным WhatsAPP / Telegramm / и т.д. мессенджером, где все данные передаются исключительно через Ваш собственный сервер и абсолютно всё шифруется.
Element Web (ранее известный как Riot.im) - это веб-интерфейс или клиент для сети Matrix. Он предоставляет пользователю возможность взаимодействовать с сетью Matrix через веб-браузер без необходимости установки дополнительного программного обеспечения.
Element Web предлагает следующие возможности:
Чаты: Пользователи могут создавать личные чаты с другими пользователями или присоединяться к групповым чатам. Они могут отправлять текстовые сообщения, обмениваться файлами и ссылками, использовать эмодзи и другие элементы форматирования.
Голосовые и видеозвонки: Element Web поддерживает голосовые и видеозвонки между пользователями в сети Matrix. Это позволяет пользователям общаться в режиме реального времени с помощью аудио и видео связи.
Интеграция с другими сервисами: Element Web позволяет интегрировать другие сервисы, такие как уведомления, календари и файловые хранилища, чтобы пользователи могли удобно управлять своими коммуникациями и задачами в одном месте.
-
Защита и приватность: Element Web поддерживает шифрование end-to-end для обмена сообщениями. Это означает, что только отправитель и получатель могут прочитать содержимое сообщения, обеспечивая высокий уровень приватности.
Element Web предлагает удобный и интуитивно понятный интерфейс, который позволяет пользователям получать доступ к сети Matrix и взаимодействовать с другими пользователями независимо от устройства и операционной системы.
Немного разобравшись что же это такое давайте приступим к установке.
Установка
Прежде всего обновим нашу систему:
apt update
apt upgrade
Установим дополнительные зависимости
apt install net-tools python3-dev python3-pip libpq-dev mc aptitude htop apache2-utils lsb-release wget apt-transport-https
pip install psycopg2
Подключим matrix.org репозитории для Ubuntu/Debian x64 архитектуры доступные по адресу https://packages.matrix.org/debian/.
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
apt update
Установим Matrix Synapse
apt install matrix-synapse-py3
В процессе установки не забываем установить имя нашего сервера.
Файлы конфигурации Matrix находятся в /etc/matrix-synapse
Предлагаю его сразу отредактировать под наши нужды.
vim /etc/matrix-synapse/homeserver.yaml
Оригинальный файл
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
#
# This is set in /etc/matrix-synapse/conf.d/server_name.yaml for Debian installations.
# server_name: "SERVERNAME"
pid_file: "/var/run/matrix-synapse.pid"
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['::1', '127.0.0.1']
resources:
- names: [client, federation]
compress: false
database:
name: sqlite3
args:
database: /var/lib/matrix-synapse/homeserver.db
log_config: "/etc/matrix-synapse/log.yaml"
media_store_path: /var/lib/matrix-synapse/media
signing_key_path: "/etc/matrix-synapse/homeserver.signing.key"
trusted_key_servers:
- server_name: "matrix.org"
Отредактированный файл
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
#
# This is set in /etc/matrix-synapse/conf.d/server_name.yaml for Debian installations.
# server_name: "SERVERNAME"
pid_file: "/var/run/matrix-synapse.pid"
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['127.0.0.1']
resources:
- names: [client]
compress: false
database:
name: psycopg2
txn_limit: 10000
args:
user: matrix
password: YOUR-MATRIX-DB-USER-PASSWORD
database: matrix
host: localhost
port: 5432
cp_min: 5
cp_max: 10
log_config: "/etc/matrix-synapse/log.yaml"
media_store_path: /var/lib/matrix-synapse/media
signing_key_path: "/etc/matrix-synapse/homeserver.signing.key"
trusted_key_servers:
- server_name: "matrix.YOUR-DOMAIN.COM"
suppress_key_server_warning: true
max_upload_size: 100M
enable_registration: false
matrix_synapse_federation_enabled: false
matrix_synapse_federation_port_enabled: false
registration_shared_secret: "Registration-Shared-Secret"
search_all_users: true
prefer_local_users: true
turn_uris: ["turn:matrix.YOUR-DOMAIN.COM?transport=udp","turn:matrix.YOUR-DOMAIN.COM?transport=tcp"]
turn_shared_secret: "Turn-Shared-Secret"
turn_user_lifetime: 86400000
admin_users:
- "@admin:matrix.YOUR-DOMAIN.COM"
Давайте немного разберёмся во внесённых изменениях
bind_addresses: ['127.0.0.1'] — оставляем возможность подключиться к Matrix Synapse только по localhost.
names: [client] — используем только локальную аутентификацию для пользователей.
database: — полностью меняем секцию и настраиваем для работы с PostgreSQL.
server_name: «matrix.YOUR‑DOMAIN.COM» — домен вашего Matrix Synapse сервера.
max_upload_size: 100M — ограничиваем максимальный размер загружаемых файлов.
enable_registration: false — отключаем регистрацию из соображений безопасности.
matrix_synapse_federation_enabled: false - отключаем Matrix Federation
matrix_synapse_federation_port_enabled: false - отключаем Matrix Federationregistration_shared_secret: «Registration‑Shared‑Secret» — прописываем длинное случайное значение, лучше воспользоваться генератором и сгенерировать ключ 32–64 символа.
search_all_users: true — разрешаем поиск пользователей в клиентах.
turn_uris: [«turn:matrix.YOUR‑DOMAIN.COM?transport=udp»,»turn:matrix.YOUR‑DOMAIN.COM?transport=tcp»] — сразу добавляем настройки для turn сервера, сам сервер установим позже.
turn_shared_secret: «Turn‑Shared‑Secret» — прописываем длинное случайное значение, лучше воспользоваться генератором и сгенерировать ключ 32–64 символа.
Установим и настроим PostgreSQL
apt install postgresql
Ограничим PostgreSQL только интерфейсом localhost всё из тех-же соображений безопасности.
В файле /etc/postgresql/’YOU-POSTGRE-VERSION-NUMBER’/main/postgresql.conf устанавливаем параметр listen_addresses = ‘localhost’
vim /etc/postgresql/12/main/postgresql.conf
Переключимся на пользователя postgres и настроим пользователя и базу данных для Matrix Synapse.
su - postgres
createuser matrix
createdb --encoding=UTF8 --locale=C --template=template0 --owner=matrix matrix
psql
postgres=# ALTER USER matrix with PASSWORD 'YOUR-MATRIX-DB-USER-PASSWORD';
postgres=# \q
exit
Теперь можно включить и запустить сам сервис Matrix Synapse
systemctl enable matrix-synapse
systemctl start matrix-synapse
NGINX proxy и настройка сертификатов
NGINX нам нужен для того, чтобы безопасно спрятать все компоненты нашей установки.
Также нам понадобится certbot для получения сертификата Lets Encrypt.
apt install nginx python3-certbot-nginx
Теперь сгенерируем 3 сертификата которые нам понадобятся в дальнейшем:
certbot --nginx -d element.YOUR-DOMAIN.COM
certbot --nginx -d matrix.YOUR-DOMAIN.COM
certbot --nginx -d matrix-admin.YOUR-DOMAIN.COM
Теперь настроим nginx proxy для того, чтобы все наши сервисы стали доступны из сети.
Закоментируем include /etc/nginx/sites-enabled/*; в фаиле конфигурации nginx
vim /etc/nginx/nginx.conf
Теперь настроим nginx proxy для matrix, matrix-admin и element
vim /etc/nginx/conf.d/matrix.conf
matrix.conf
server {
listen 80;
listen [::]:80;
server_name matrix.YOUR-DOMAIN.COM;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name matrix.YOUR-DOMAIN.COM;
ssl_certificate /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/privkey.pem;
location ~ ^(/|/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 100M;
proxy_http_version 1.1;
}
}
server {
listen 8448 ssl http2 default_server;
listen [::]:8448 ssl http2 default_server;
server_name matrix.YOUR-DOMAIN.COM;
ssl_certificate /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/privkey.pem;
location / {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
vim /etc/nginx/conf.d/matrix-admin.conf
matrix-admin.conf
server {
listen 80;
listen [::]:80;
server_name matrix-admin.YOUR-DOMAIN.COM;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name matrix-admin.YOUR-DOMAIN.COM;
ssl_certificate /etc/letsencrypt/live/matrix-admin.YOUR-DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix-admin.YOUR-DOMAIN.COM/privkey.pem;
location / {
allow 1.1.1.1; #Allowed IP
allow 8.8.8.8/24; #Allowed Subnet
deny all;
proxy_pass http://localhost:8088/;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
vim /etc/nginx/conf.d/element.conf
element.conf
server {
listen 80;
listen [::]:80;
server_name element.YOUR-DOMAIN.COM;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name element.YOUR-DOMAIN.COM;
ssl_certificate /etc/letsencrypt/live/element.YOUR-DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/element.YOUR-DOMAIN.COM/privkey.pem;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "frame-ancestors 'self'";
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Проверим конфигурацию nginx на наличие ошибок
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl enable nginx
systemctl restart nginx
Теперь наш Matrix Synapse запущен и работоспособен для обмена текстовыми сообщениями и файлами. Создадим первого пользователя из командной строки и сделаем его админом.
systemctl restart matrix-synapse
register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
Теперь установим и настроим coturn для видео и аудио звонков
apt install coturn
Настроим coturn. Раскоментируем и утановим следующие настройки:
vim /etc/turnserver.conf
turnserver.conf
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=Turn-Shared-Secret #Мы еге генерировали ранее во время настройки Matrix Synapse
realm=matrix.YOUR-DOMAIN.COM
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
user-quota=100 # 4 streams per video call, so 100 streams = 25 simultaneous relayed calls per user.
total-quota=1200
no-tcp-relay # VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
syslog
no-multicast-peers
В файле /etc/default/coturn раскомментируем строку #TURNSERVER_ENABLED=1, если строка закомментирована — TURN-сервер не стартует.
vim /etc/default/coturn
systemctl enable coturn
systemctl start coturn
Установим Element web на базе докер контейнера
Для этого нам потребуется докер.
apt install docker.io docker-compose
Теперь подготовим config.json для нашего Element WEB для минимальной кастомизации: сразу пропишем адрес нашего Matrix Synapse сервера и отключим ненужное. Будем использовать только локальную аутентификацию.
mkdir /opt/element-web
cd /opt/element-web
vim /opt/element-web/config.json
config.json
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.YOUR-DOMAIN.COM",
"server_name": "matrix.YOUR-DOMAIN.COM"
},
"m.identity_server": {
"base_url": "https://vector.im"
}
},
"disable_custom_urls": true,
"disable_guests": true,
"disable_login_language_selector": false,
"disable_3pid_login": true,
"brand": "Element",
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_widgets_urls": [
"https://scalar.vector.im/_matrix/integrations/v1",
"https://scalar.vector.im/api",
"https://scalar-staging.vector.im/_matrix/integrations/v1",
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api"
],
"bug_report_endpoint_url": "https://element.io/bugreports/submit",
"uisi_autorageshake_app": "element-auto-uisi",
"default_country_code": "GB",
"show_labs_settings": false,
"features": {},
"default_federate": false,
"default_theme": "light",
"room_directory": {
"servers": ["YOUR-DOMAIN.COM"]
},
"enable_presence_by_hs_url": {
"https://matrix.YOUR-DOMAIN.COM": true
},
"terms_and_conditions_links": [
{
"url": "https://element.io/privacy",
"text": "Privacy Policy"
},
{
"url": "https://element.io/cookie-policy",
"text": "Cookie Policy"
}
],
"privacy_policy_url": "https://element.io/cookie-policy"
}
Пришло время создать и запустить Element WEB docker контейнер.
docker run -d --name element-web --restart always -p 127.0.0.1:8080:80 -v /opt/element-web/config.json:/app/config.json vectorim/element-web:latest
Установка админки synapse-admin
Для начала нам надо зайти в папку /opt и с клонировать git репозиторий. Будем собирать контейнер самостоятельно для всё той-же минимальной кастомизации.
cd /opt
git clone https://github.com/Awesome-Technologies/synapse-admin.git
Теперь внесём необходимые настройки в docker-compose.yml
vim /opt/synapse-admin/docker-compose.yml
docker-compose
version: "3"
services:
synapse-admin:
container_name: synapse-admin
hostname: synapse-admin
#image: awesometechnologies/synapse-admin:latest
build:
context: .
# to use the docker-compose as standalone without a local repo clone,
# replace the context definition with this:
# context: https://github.com/Awesome-Technologies/synapse-admin.git
args:
# if you're building on an architecture other than amd64, make sure
# to define a maximum ram for node. otherwise the build will fail.
# - NODE_OPTIONS="--max_old_space_size=1024"
# default is .
# - PUBLIC_URL=/synapse-admin
# You can use a fixed homeserver, so that the user can no longer
# define it himself
- REACT_APP_SERVER=https://matrix.YOUR-DOMAIN.COM
ports:
- "127.0.0.1:8088:80"
restart: unless-stopped
Теперь соберём наш контейнер.
cd /opt/synapse-admin/
docker-compose up -d
Если вас будут пугать warning сообщение не обращайте внимание, в моём случае это никоим образом не повлияло на работоспособность админки.
Проверим что у нас получилось
https://matrix.YOUR-DOMAIN.COM
https://matrix-admin.YOUR-DOMAIN.COM
https://element.YOUR-DOMAIN.COM
Заключение
Данный гайд тестировался на работоспособность на Ubuntu 20 LTS и Ubuntu 22 LTS.
Это мой дебют на хабре по этому прошу не судить строго.
Надеюсь данный гайд кому-то поможет с экономить время и окажется полезным.
Комментарии (33)
mracoid
03.06.2023 13:33Спасибо за статью. Скажите, вот вы сделали кучу A записей:
element..., matrix..., matrix-admin.YOUR-DOMAIN.COM. а не безопаснее ли YOUR-DOMAIN.COM/blabla1 т.д.? Что бы всякие боты непрерывно не ломали сервер.
Chiudik Автор
03.06.2023 13:33Добрый.
У меня так и не получилось запустить админку под общим YOUR-DOMAIN.COM. Она наотрез отказывалась работать.
Поэтому для меня оказалось проще зарегистрировать отдельный субдомен matrix-admin.YOUR-DOMAIN.COM исключительно для админки. Для обеспечения безопасности в конфигурацию nginx proxy был добавлен src IP фильтр. Ботам админка не доступна.Вообще Ваш вопрос больше уже про настройку самого nginx proxy.
Если вы обладаете необходимыми знаниями как можно спрятать все компоненты под одним YOUR-DOMAIN.COM можете поделиться вашей конфигурацией, я её проверю и дополню статью.mracoid
03.06.2023 13:33+1Если вкратце, то nginx proxy manager или вручную, тут ключевой момент - nginx proxy_pass. В моих намерениях применить Ваши знания, только на Debian. По срокам ничего не скажу, но постараюсь дать фидбек)
MrWulf
03.06.2023 13:33+1Добрый день.
Пытаюсь развернуть Matrix на Ubuntu из коробки в ВМ. Всё нормально идёт аккурат до получения сертификатов. При вводе certbot --nginx -d *** выдаёт ошибку DNS Problem: NXDOMAIN looking A for *** - check that a DNS record exists for this domain. Необходимо ли было как то дополнительно регистрировать днс, либо же это проблема настроек nginx\чего то ещё?
Chiudik Автор
03.06.2023 13:33Добрый.
Да, вам необходимо иметь уже зарегистрированные DNS записи и ваша машина должна быть доступна из сети по 80/443 порту для автоматической выдачи Let's Encrypt сертификата.
Если у вас машина за NAT, то вам необходимо на роутере настроить проброс портов и убедиться, что на самой машине firewall не блокирует входящие ссоединения.
redmanmale
03.06.2023 13:33+2по-хорошему надо все компоненты ставить в докер
и на выходе будет один композ, который ставится одной командойChiudik Автор
03.06.2023 13:33Ничего не имею против!
Мне для моих задач так было реализовать проще и быстрее.
Нет никаких проблем загнать PostgreSQL и Matrix Synapse в докер.
Благодарю за коментарий.
erley
03.06.2023 13:33+2Полезная статья, я у себя поднимал матрикс какое-то время назад (скорее из любопытства) и практически сразу понял что нужно его перецеплять на Postgres, но так руки и не дошли всё привести в порядок.
А тут всё расписано, да ещё и с админкой и TURN сервером.
Некоторые вещи я бы сделал по-другому, но это не принципиально, скорее дело вкуса.
Похоже большинство людей разворачивают матрикс просто в виде докера, но это наверное не совсем правильно, ведь если сам матрикс про privacy etc, то желательно знать что там внутри докер образа и как оно настроено/работает. Поэтому я в данном случае врукопашную предпочитаю всё сделать.Chiudik Автор
03.06.2023 13:33Благодарю за фидбэк.
Да, правда, я не претендую на истину в первой инстанции. OpenSource на то и OpenSource где каждый в праве делать всё так, как ему ближе / понятнее / правильнее / проще.
В моём случае мне было необходимо минимальными усилиями поднять систему с нуля. Ну а что доробатывать и донастраивать - непаханое поле. Можно SSO прикрутить, можно дополнительные сервера поднять, можно все компоненты развести по разным инстансам. Можно всё!
И именно отсутствие в сети (не только рунете) годного гайда подтолкнуло меня к написанию такового.
Всем добра!
AlexanderS
03.06.2023 13:33+1Поэтому я в данном случае врукопашную предпочитаю всё сделать.
Было бы полезно полный мануал увидеть — может я бы наконец-то и сам стал членом сообщества пользователей. Я сам-то поклонник виртуалок, а не контейнеров, поэтому врукопашную только приветствуется.
Chiudik Автор
03.06.2023 13:33Пока не планирую.
Если Вы изложите конструктивные мысли, то с удовольствием проверю и дополню статью.
С другой стороны нет желания перегружать публикацию информацией и переписывать официальный гайд.
Изначально писал как шпаргалку для себя любимого. Так и родилась идея опубликовать и поделиться наработками. Не более.
AlexanderS
03.06.2023 13:33+1Это я понимаю. Я точно так же лет пять назад расписывал как Nextcloud ставить с нуля. Получился цикл из аж пяти статей. Капитальная такая шпаргалка получилась. На матрикс я уже какой раз смотрю, но руки как-то всё не доходят.
ZSides
03.06.2023 13:33+3Статья хорошая, спасибо.
Однако, перед прочтением мне пришлось погуглить все слова из заголовка кроме ubuntu и PostgreSQL, так вышло, что с остальными технологиями мне работать не приходилось.Думаю, было бы полезно добавить в начало статьи краткий абзац буквально по паре строк про каждую из технологий и так же кратко рассказать, какую проблему решает данная связака.
Chiudik Автор
03.06.2023 13:33Благодарю за фидбэк.
Соберусь с мыслями и добавлю информацию. Основная идея была в том, что если вы ищите ответы на данные вопросы, то вы уже в теме про Matrix.
Раз у Вас возник данный вопрос, то вероятнее всего он возник не только у вас.
Не обещаю, что это будет быстро, но обязательно доработаю данный вопрос.
zjmaster
03.06.2023 13:33+1Спасибо, обязательно жду экскурс по технологиям. Если все распишите,также доходчиво как в статье, сэкономите уйму времени для вхождения в тему
icCE
03.06.2023 13:33+1Дополню, что synapse лучше ставить не из пакета который сделал мантейнер, а через pip. Для этого лучше использовать питоновский venv что бы не засорять систему.
Если надо на попробовать, то можно и не ставить psql базу данных, а использовать sqlite. После тестов и если все устраивает можно сделать миграцию в psql.
Когда вы в конфедерации, вы будите делится своим сервером со всеми. Хотите вы этого или нет. Лимиты по месту на сервере вы поставить не можете, но скажу, что особо критично место и не съедается. Другой момент, что вы можете хранить чье то порно.
Еще один момент, что все в matrix представлено как пространство. Сообщение от пользователя к пользователю, новые сервера, комнаты в комнатах итд. Любой пользователь который попал к вам на сервер, может создать сервер и выкладывать там, что угодно и вы знать об этом не будите. Пока у вас не начнется заканчиваться место. Контролировать этот процесс почти не возможно. Предложение со стороны разработчиков, это блокировать определенные post запросы на создание. Посмотреть какие у вас сервера и комнаты, которые создали не вы, вы так же можете только через определенные запросы. В итоге это все поставили лично для меня жирный крест. Надеюсь кому то будет полезно.
pureacetone
03.06.2023 13:33+1Спасибо за хороший гайд.
По поводу NGINX: в оф.документации есть вариант с Caddy. Лично проверял - сделает этот гайд еще проще (но дело вкуса конечно): https://matrix-org.github.io/synapse/latest/reverse_proxy.html?highlight=caddy#caddy-v2
В статье дважды упоминается "только локальная авторизация". Значит ли это, что в гайде рассмотрен не федерируемый (изолированный) сервер и если да, почему?
Chiudik Автор
03.06.2023 13:33Благодарю за Ваш вопрос.
Задача поднять сервер возникла из вопроса безопасности в компании. Следовательно, поднимая свой сервер, нам на сервере никто, кроме авторизированных пользователей не нужен.
Следовательно было запрещено аутентифицироваться пользователям, которые зарегистрированы на вышестоящих Matrix серверах:
names: [client]
Благодаря вашему вопросу я обратил внимание на одно упущение, у меня была включена Matrix Federation. Статью уже дополнил и добавил:
matrix_synapse_federation_enabled: false
matrix_synapse_federation_port_enabled: false
Мне не нужно, чтобы мой сервер каким-либо образом взаимодействовал с сетью Matrix и отлично устраивает полностью изолированный сервер для личных нужд и общения внутри компании.
Немного теории из сети по Matrix Synapse Federation.
Matrix Synapse Federation (федерация Matrix Synapse) относится к способу взаимодействия различных серверов Matrix Synapse в сети Matrix. Федерация позволяет пользователям, зарегистрированным на одном сервере Matrix Synapse, общаться и отправлять сообщения пользователям, зарегистрированным на других серверах Matrix Synapse.
Принцип работы федерации Matrix Synapse следующий:Регистрация на сервере: Пользователи выбирают сервер Matrix Synapse и регистрируются на нем. Каждый сервер имеет свой собственный домен (например, example.com), и пользователи получают идентификаторы вида @username:example.com.
Распространение информации: Когда пользователь отправляет сообщение другому пользователю на другом сервере, его сервер Matrix Synapse устанавливает соединение с сервером получателя и передает сообщение через эту связь. Это позволяет серверам сети Matrix обмениваться информацией о пользователях, комнатах чата и сообщениях.
Синхронизация данных: Когда пользователь получает новые сообщения или изменения в комнате чата, его сервер Matrix Synapse синхронизирует эти данные с его устройствами, чтобы он мог видеть все обновления на всех своих устройствах.
Ключи шифрования: Федерация Matrix Synapse также поддерживает шифрование end-to-end, где сообщения зашифрованы на устройстве отправителя и расшифровываются на устройстве получателя. Ключи шифрования обмениваются между серверами, чтобы обеспечить безопасность и приватность сообщений.
Федерация Matrix Synapse позволяет пользователям общаться и взаимодействовать с пользователями на разных серверах Matrix Synapse, расширяя сеть и возможности коммуникации. Это позволяет пользователям выбирать сервер по своему выбору, сохраняя при этом возможность общаться с пользователями на других серверах, распределенных по всей сети Matrix.
Отключение федерации в Matrix Synapse может быть достигнуто путем настройки вашего сервера. Вот общие шаги, которые можно предпринять для отключения федерации:
Откройте файл конфигурации Matrix Synapse: Обычно файл называется "homeserver.yaml" и находится в каталоге, где установлен сервер Matrix Synapse.
Найдите раздел "Federation" или "Федерация" в файле конфигурации.
В этом разделе установите параметр "enabled" или "включено" в значение "false" или "ложь". Это отключит возможность федерации на вашем сервере.
Сохраните изменения в файле конфигурации и перезапустите сервер Matrix Synapse, чтобы изменения вступили в силу.
После выполнения этих шагов ваш сервер Matrix Synapse будет отключен от федерации, и пользователи на других серверах не смогут обмениваться сообщениями или взаимодействовать с вашим сервером.
Обратите внимание, что отключение федерации ограничивает возможность общения с пользователями на других серверах и может ограничить функциональность и связность сети Matrix в целом.
icCE
03.06.2023 13:33+1у вас еще в конфигах nginx нет переключение на протокол 1.1 Это рекомендуется делать, если не хотим проблем с бекендом и это указанно в примерах https://matrix-org.github.io/synapse/latest/reverse_proxy.html Так же рекомендуется для клиентов в днс сделать записи, для быстрого обнаружения клиентами. Но в итоге все равно рано или поздно придете к тому, что нет возможности управлять и удалять что то старое, если кончается место на диски. Только пересоздовать комнату, а старое удалять. Кстати, можно еще упомянуть о разных версиях комнат (с тз API) так как они дают разный функционал.
еще не очень понятен смысл
allow 1.1.1.1; #Allowed IP allow 8.8.8.8/24; #Allowed Subnet deny all;
Так же не очень понятно, почему бы серты nginx не объединить в один конфиг и в целом не использовать location, а не создавать новый domain name. Но тут наверно дело уже вкуса.
Chiudik Автор
03.06.2023 13:33Добрый Вам день.
По поводу подсказки касательно недостающих настроек в конфигурации nginx - изучу документацию более подробно и дополню.По поводу вашего вопроса на счёт Allowed IP и Allowed Subnet это пример того, как можно Admin UI хоть немного прикрыть от сети фильтруя src IP на уровне nginx proxy.
icCE
03.06.2023 13:33+1Если вы хотите прикрыть админку, лучше сделать дополнительную бейсик авторизацию
Chiudik Автор
03.06.2023 13:33+1Это понятно, но не хотел совсем уж усложнять. IP фильтр тоже вполне себе нормально.
Как вариант можно было вынести на нестандартный порт и закрыть самим firewall машины или облака, где эта машина запущена.
Мне достаточно такого способа.
icCE
03.06.2023 13:33Бейсик авторизация 4 строчки вроде как, не очень понятно, что там может быть сложного ?
Chiudik Автор
03.06.2023 13:33+1Позвольте мне прикрывать свою админку так, как мне это больше нравится! ;-)
icCE
03.06.2023 13:33-1Да это как угодно, только те кто будет повторять, будут обычно повторять копи пастом не читая документацию и будут беды.
Chiudik Автор
03.06.2023 13:33+1Не совсем понимаю какие именно могут быть беды если прикрыто по src IP.
Тупо копи-пастом тут не получится поставить да и человек, который будет поднимать данный сервис подразумевается, что имеет определённую, пускай и минимальную, ИТ базу. Иначе не получится.
DNS, Firewall, port forward на рутере (если машина за натом) - в туториале я это не упоминал.
EvgeniyTi
03.06.2023 13:33+1В организации у меня 350 чел, возможно сделать так, чтоб народ регистрировался, я подтверждал, и после этого все попадали в общий список контактов, ведь они не знают логинов друг друга
Chiudik Автор
03.06.2023 13:33+1Отличный вопрос.
На счёт регистрация с одобрением не изучал. Нам было не нужно, т.к. проще и безопаснее создавать пользователей вручную. Поэтому не отвечу.
Если вы решите данную задачу и поделитесь Вашим способом с удовольствием дополню статью.Касательно списка всех сотрудников я так и не решил, как можно обойти ручное добавление каждого сотрудника у каждого в список.
Нашёл для себя workaround в виде создания общей комнаты, в которую добавлены абсолютно все сотрудники. Таким образом зайдя в комнату видно абсолютно всех её участников.
Более годного решения пока не было найдено, я сам в процессе изучения матрицы...!!!
icCE
03.06.2023 13:33Уже не помню точно, но вроде как нет. Можно полностью отключить внешнею регистрацию и сделать свою через API с вашим подтверждением. Больше параметров можно глянуть тут - https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html Про общий список, можно настроить общую комнату в которую человек будет попадать после регистрации. Но замечу, что люди смогут сами создавать комнаты и творить любую дичь без вашего ведома.
erley
Полезная статья, я у себя поднимал матрикс какое-то время назад (скорее из любопытства) и практически сразу понял что нужно его перецеплять на Postgres, но так руки и не дошли всё привести в порядок.
А тут всё расписано, да ещё и с админкой и TURN сервером.
Некоторые вещи я бы сделал по-другому, но это не принципиально, скорее дело вкуса.
Похоже большинство людей разворачивают матрикс просто в виде докера, но это наверное не совсем правильно, ведь если сам матрикс про privacy etc, то желательно знать что там внутри докер образа и как оно настроено/работает. Поэтому я в данном случае врукопашную предпочитаю всё сделать.