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 — логин зарегистрированного на сервере пользователя.
Литература
При написании данной статьи использовалась литература из следующих источников: