Matrix — это открытый, свободный, децентрализованный (федеративный) протокол для общения. Он поддерживает все функции современных мессенджеров. В этом HOWTO мы рассмотрим как можно поднять свой собственный Matrix сервер и настроить его общение с другими.
Основные преимущества Matrix
- свободный и открытый: как клиент, так и сервер;
- имеет множество реализаций;
- федеративный, что означает, что каждый желающий может поднять свой собственный сервер и общаться с пользователями других серверов без каких-либо ограничений;
- поддерживает надёжное шифрование как личных, так и групповых чатов на основе системы шифрования Double Ratchet, впервые представленной в Signal;
- синхронизация сообщений с возможностью её хранения на сервере в зашифрованном виде;
- верификация устройств собеседника;
- поддержка ботов и транспортов в другие сети, например IRC, Slack, Gitter и т.д.;
- удобный поиск сообщений на сервере;
- push уведомления со стороны сервера;
- голосовая связь посредством протокола WebRTC, в т.ч. групповые звонки (пока в статусе бета-тестирования);
- редактирование, удаление сообщений, гибкая настройка прав доступа, быстрое создание закрытых чатов для неограниченного количества пользователей, стикеры и т.п.
Выбор сервера для Matrix
В настоящее время существует несколько поддерживаемых серверов для данного протокола:
В нашей статье мы рассмотрим установку и настройку Synapse, поскольку он имеет наибольшую популярность, хорошо документирован и присутствует в основных репозиториях Fedora.
Установка сервера Synapse
Поскольку пакет уже присутствует в главном репозитории, откроем терминал и выполним следующую команду:
sudo dnf install matrix-synapse
На этом установка завершена. Можем приступать к настройке.
Создание конфигурации Synapse
Для начала сгенерируем базовый конфиг, который будем править для своих нужд. Сделать это достаточно просто:
cd /etc/synapse sudo python -m synapse.app.homeserver --server-name example.org --config-path homeserver.yaml --generate-config --report-stats=no
После выполнения в каталоге /etc/synapse будет создан примерный файл конфигурации сервера homeserver.yaml для домена example.org (необходимо изменить на необходимый), а также сгенерированы самоподписанные сертификаты для TLS шифрования.
Установим правильного владельца и группу для файлов внутри каталога /etc/synapse:
sudo chown -R synapse:synapse /etc/synapse/*
Изменим права доступа: 0640 для различных конфигов и 0600 для ключей и сертификатов:
sudo chmod 0600 /etc/synapse/*.{dh,crt,key}
sudo chmod 0640 /etc/synapse/*.{config,yaml}
Сбросим для данного каталога контекст безопасности SELinux:
sudo restorecon -Rv /etc/synapse
Настройка сервера Synapse
Теперь можем приступить к настройке. Базовый файл конфигурации /etc/synapse/homeserver.yaml очень хорошо документирован, поэтому мы рассмотрим лишь самые необходимые его директивы, без которых нормальная работа сервера будет невозможна.
Настройка TLS:
# Сертификат TLS с цепочкой tls_certificate_path: "/etc/synapse/example.org.tls.crt" # Приватный ключ TLS сертификата в формате PEM tls_private_key_path: "/etc/synapse/example.org.tls.key" # Файл параметров механизма обмена ключами Диффи-Хеллмана tls_dh_params_path: "/etc/synapse/example.org.tls.dh"
Настоятельно рекомендуется вместо сгенерированных автоматически самоподписанных сертификатов использовать полноценные от Let’s Encrypt. В сети уже существует огромное количество хороших статей по настройке Let’s Encrypt, поэтому мы опустим данную тему в данной статье. После получения сертификатов будет достаточно лишь исправить значение указанных выше директив и перезапустить сервер Synapse.
Основные настройки Synapse:
# Доменное имя Matrix сервера. Будет частью пользовательского ID.
server_name: "example.org"
# Разрешить или запретить хостинг веб-клиента.
web_client: False
# Публичный URL сервера.
public_baseurl: https://example.org:8448/
# Настройки СУБД.
database:
# Тип движка СУБД. По умолчанию используется sqlite3.
name: "sqlite3"
# Параметры движка, например имя-пароль.
args:
# В случае sqlite3 это путь к файлу с БД.
database: "/var/lib/synapse/homeserver.db"
# Каталог, в котором будут храниться все загруженные
# на сервер медиа-файлы и изображения.
media_store_path: "/var/lib/synapse/media_store"
# Каталог для загружаемых пользовательских файлов.
uploads_path: "/var/lib/synapse/uploads"
# Максимальный размер загружаемого на сервер файла.
max_upload_size: "10M"
# Максимальный размер изображения или прочего медиа-файла,
# для которого разрешено сгенерировать preview.
max_image_pixels: "32M"
# Разрешает или запрещает создавать preview для любых
# гиперссылок на стороне сервера.
url_preview_enabled: False
# Разрешает или запрещает анонимную регистрацию пользователей
# на текущем сервере из клиентов.
enable_registration: False
# Разрешает или запрещает анонимным пользователям без регистрации
# получать доступ к серверу и в том числе созданным на нём каналам.
allow_guest_access: False
Настроим виртуальные хосты, заменив весь блок listeners целиком:
# Настройка блока обработчиков протоколов.
listeners:
# Главный обработчик HTTPS.
-
# Задаёт порт, который будет слушать наш сервер.
port: 8448
# Задаёт сетевые адреса интерфейсов, которые будет слушать сервер.
# По умолчанию это все доступны на хосте IPv4 и IPv6 интерфейсы.
bind_addresses:
- '::'
- '0.0.0.0'
# Задаёт тип обработчика.
type: http
# Включает или отключает TLS шифрование. Должно быть включено всегда.
tls: true
# Включает или отключает X-Forwarded-For HTTP заголовок. Включать
# необходимо только если нужно спрятать сервер за другой кэширующий
# прокси, например nginx.
x_forwarded: false
# Задаёт список разрешённых ресурсов внутри обработчика.
resources:
-
# List of resources to host on this listener.
names:
- client
# Разрешает или запрещает сжатие данных для клиентов с поддержкой.
compress: true
- names: [federation]
compress: false
Настройка журналов
Настроим ведение журналов. Для этого сначала создадим файл журнала:
sudo touch /var/log/homeserver.log
Установим для него корректные права доступа:
sudo chown synapse:synapse /var/log/homeserver.log sudo chmod 0640 /var/log/homeserver.log
Откроем файл /etc/synapse/example.org.log.config в текстовом редакторе и укажем расположение файла журнала (здесь example.org — используемое доменное имя):
filename: /var/log/homeserver.log
Запуск сервера
Попробуем запустить наш сервер:
sudo systemctl start synapse.service
Его статус можно узнать при помощи следующей команды:
sudo systemctl status synapse.service
Если всё прошло успешно, добавим наш сервер в автозагрузку:
sudo systemctl enable synapse.service
Если возникли ошибки, то больше полезной информации можно будет найти в созданном файле журнала ошибок.
Регистрация первого пользователя
Сразу после установки на сервере не создано ни одного пользователя, поэтому воспользуемся штатной утилитой для их создания:
sudo register_new_matrix_user -c /etc/synapse/homeserver.yaml https://example.org:8448
Утилита предложит ввести имя пользователя без указания домена, пароль и его подтверждение, а также спросит нужно ли наделить его правами администратора сервера.
Настройка SRV записей
Чтобы наш сервер без проблем видели клиенты, а также другие серверы по федеративному протоколу, необходимо добавить новую SRV запись в DNS нашего домена example.org:
_matrix._tcp.example.org. 3600 IN SRV 10 0 8448 example.org.
Подключение к серверу
Для подключения к созданному серверу можно использовать любой из доступных Matrix клиентов:
В качестве homeserver (имя сервера для подключения) нужно указать наш домен, а в качестве полного username строку вида:
@username:example.org
Здесь username — логин зарегистрированного на сервере пользователя.
Литература
При написании данной статьи использовалась литература из следующих источников: