Synapse est un serveur permettant de mettre en place facilement et rapidement un service de discussion en temps réel sécurisé, via le protocole Matrix.
Il s'agit d'un service de communication décentralisé, chaque élément étant identifié par un caractère particulier, un nom et le nom du serveur sur lequel il a été déclaré :
- Le caractère
@
représente un utilisateur (exemple :@cyril:matrix.domaine.tld)
; - Le caractère
#
représente un salon de discussion (exemple :#informatique:matrix.domaine.tld
) - Le caractère
+
représente une communauté, un regroupement d'utilisateurs et de salons (exemple :+amis:matrix.domaine.tld
).
Puisqu'il s'agit d'un service décentralisé, il est également possible de créer des fédérations de serveurs, permettant aux utilisateurs déclarés sur un serveur de participer à des salons déclarés sur un autre serveur.
Pré-requis
Afin d'installer un serveur Synapse, il est nécessaire d'avoir un nom de domaine pointant sur ce serveur.
Pour sécuriser le transfert des données, vous devez disposer d'un certificat. Durant cette notice, nous partons de l'hypothèse que vous possédez déjà un certificat pour votre serveur (tel un certificat Wildcard fourni par certains prestataires). Si vous n'avez pas de certificats, vous pouvez trouver dans les sources à la fin de cet article la démarche pour en créer un durant l'installation du serveur.
Si vous installez Synapse dans un conteneur LXD avec un Nginx comme reverso proxy sur le système hote, le fichier de configuration pour Nginx est en annexe de cette notice.
Installation du serveur
- Mettez à jour les dépots et les paquets sur votre serveur.
- Installez les paquets
lsb-release
,wget
etapt-transport-https
. - Récupérez la clé des dépots de Synpase et installez la avec la commande
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
- Ajoutez les dépots de Synapse avec la commande :
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list
- Mettez à jour les dépots de votre serveur.
- Installez le paquet
matrix-synapse-py3
, qui vous demandera le nom de domaine permettant de joindre votre serveur. - Démarrez le service
matrix-synapse
:service matrix-synpase start
- Activez le service à chaque redémarrage :
systemctl enable matrix-synapse.service
- Vérifiez que les ports 8008 et/ou 8448 soient bien écoutés :
ss -plntu
Configuration du serveur
Avant la configuration
Avant d'attaquer la configuration du seveur proprement dite, deux manipulations sont nécessaires afin d'éviter quelques soucis. La configuration du serveur Synapse se fait avec le fichier /etc/matrix-synapse/homeserver.yaml
. Ouvez ce fichier puis :
- Décommentez la ligne
enable_registration: false
pour éviter que des utilisateurs s'inscrivent sur votre serveur durant la configuration. Vous pourrez commenter cette ligne une fois le serveur configuré si vous souhaitez que des utilisateurs puissent s'inscrire eux-mêmes sur votre serveur. -
Si votre serveur n'est pas connecté directement à Internet (ou à votre réseau), comme cela peut être le cas si vous faites tourner votre serveur dans un conteneur LXD, valorisez la ligne
bind_address
avec la valeur0.0.0.0
afin que votre serveur accepte les requêtes venant d'autres adresses que la sienne.
Installation de Postgresql
Par défaut, Synapse utilise SQLite comme moteur de base de données. Mais SQLite possède quelques limites, il est préférable d'utiliser Postgresql.
- Installez le paquet
postgresql
. - Une fois la paquet installé, connectez vous avec l'utilisateur
postgres
:sudo -i -u postgres
- Accédez à l'invite de commandes de Postgresql avec la commande
psql
- Créez un nouvel utilisateur (que vous pouvez nommé
synapse
) avec le mot de passe de votre choix :CREATE USER "synapse" WITH PASSWORD 'motdepasse';
- Créez une base de données pour Synapse (ici nommée simplement
synapse
) que vous attribuez à l'utilisateur créé précédemment :CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER "synapse";
- Quitter l'interface de Postresgl (commande
\q
) et déconnectez vous de l'utilisateurpostgres
. - Installez le paquet
python3-psycopg2
. - Modifiez le fichier
/etc/matrix-synapse/homeserver.yaml
:- Commentez la section concernant SQLite ;
- Décommentez ou recopiez la section concernant Postgresql puis valorisez les instructions
user
,password
etdatabase
en fonction de votre configuration.
- Redémarrez le service
matrix-synpase
pour prendre en compte les modifications. - Vérifiez que votre serveur Synapse fonctionne correctement en tapant son nom de domaine dans un navigateur web (une page indiquant "It works! Synapse is running" devrait s'afficher).
Le fichier homeserver.yaml
Comme vu au dessus, la configuration du serveur se fait essentiellement avec le fichier /etc/matrix-synapse/homeserver.yaml
. Il n'y a pas de configuration type pour ce fichier, les possibilités sont multiples et les instructions sont documentées dans le fichier. Chacun peut donc l'adapter en fonction de ses besoins.
Néanmoins, l'instruction registration_shared_secret
doit être valorisée avec une chaine aléatoire pour permettre la création d'utilisateurs.
Voici quelques instructions qui peuvent être intéressantes à décommenter et valoriser :
require_auth_for_profile_requests
: authentification requise pour obtenir les données des profils.session_lifetime
: détermination de la durée d'une session.allow_guest_access
: désactivation de l'accès aux invités.media_store_path
: définition du répertoire de stockage des fichiers et images transférés.max_upload_size
: limitation de la taille des fichiers transmis.
Installation et configuration de Coturn pour les conversations audio et vidéo pair à pair
Synapse permet d'établir des conversations audio et vidéo. Si les visioconférences (conversations à plus de 2 utilisateurs) doivent passer par un autre service comme Jitsi (activable avec les widgets), une conversation entre deux utilisateurs doit passer par le service Coturn.
Pour mettre en place Coturn, vous devez déjà avoir un nom de domaine (turn.domaine.tld par exemple) pointant sur le serveur sur lequel vous installez le service Coturn. Cela peut être le même serveur que votre serveur Synapse (attention : si vous faites tourner Synapse dans un conteneur LXD, il faut installer sur Coturn sur votre serveur hote, pas dans le conteneur).
- Sur votre serveur, installez le paquet
coturn
. - Ouvrez le fichier
/etc/turnserver.conf
permettant de configurer Coturn et ajoutez à la fin du fichier, en modifiant les valeurs des instructionstatic-auth-secret
(un mot de passe au choix),realm
(nom de domaine de votre serveur Coturn) etlistening-ip
(adresse IP de votre serveur Coturn) :
use-auth-secret static-auth-secret=motdepasse realm=turn.domaine.tld listening-ip=X.X.X.X use-auth-secret no-tcp user-quota=12 total-quota=1200 |
- Démarrez le service
coturn
. - Ouvrez le fichier de configuration
/etc/matrix-synapse/homeserver.yaml
de votre serveur Synapse. - Ajoutez à la fin du fichier, en modifiant les instructions
turn_uris
(remplacezturn.domaine.tld
par le nom de domaine de votre serveur Coturn) etturn_shared_secret
(le même mot de passe que vous avez mis dans l'instructionstatic-auth-secret
du fichier/etc/turnserver.conf
de votre serveur Coturn) :
turn_uris: [ "turn:turn.domaine.tld:3478?transport=udp" ] |
- Redémarrez le service
matrix-synpase
.
Fédérations
Mettre en place des fédérations, c'est autoriser des utilisateurs déclarés sur un autre serveur Matrix que le votre d'accéder aux salons de discussion de votre serveur. Si vous souhaitez fédérer votre serveur avec un autre serveur Matrix, vous devez modifier trois instructions dans le fichier /etc/matrix-synapse/homeserver.yaml
:
server_name
: indiquez le nom de votre serveur (généralement, le nom de domaine de votre serveur).federation_domain_whitelist
ettrusted_key_servers
: indiquez le nom du serveur avec lequel vous souhaiter interagir.
Création des utilisateurs
La création des utilisateurs sur le serveur Synapse se fait par la commande register_new matrix_user
, qui vous invite à saisir l'identifiant et le mot de passe de l'utilisateur puis vous demande ensuite s'il faut lui donner les droits d'administration : register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
Vous pouvez également créer un utilisateur en une seule saisie : register_new_matrix_user -u "identifiant" -p "motdepasse" --no-admin -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
(remplacez --no-admin
par --admin
pour lui donner les droits d'administrateur).
Utilisation du serveur Synapse
En tapant le nom de domaine de votre serveur Synapse dans un navigateur web, vous n'arrivez pas sur une interface cliente afin d'utiliser votre service de communication, mais simplement sur une page indiquant (normalement) le bon fonctionnement du service. Pour utiliser votre serveur Synapse et commencer à communiquer, vous devez passer par un client Matrix.
Un des clients les plus utilisés est Element (anciennement Riot), qui se décline en version Web, Android, iOS, Windows et Linux. Vous pourrez à partir de ce client, en plus de communiquer avec les autres utilisateurs, créer et administrer des salons et des communautés sur votre serveur.
Sources
- https://www.mytinydc.com/blog/matrix-synapse-installationserveur-clientriot/
- https://www.mytinydc.com/blog/matrix-synapse-voip/
- https://matrix.org/docs/guides/installing-synapse
- https://matrix.org/docs/guides/moderation
Annexe : fichier de configuration de Nginx comme reverse proxy dans le cadre de l'installation de Synapse dans un conteneur LXD
- Le certificat utilisé est un certificat intermédiaire fournit par l'hébergeur du serveur où est installé Synapse.
- Remplacez
matrix.domaine.tld
par le nom de domaine permettant de joindre votre serveur Matrix. - Remplacez
X.X.X.X
par l'adresse IP de votre conteneur LXD.
server {
listen 80;
listen [::]:80;
server_name matrix.domaine.tld;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name matrix.domaine.tld;
ssl on;
ssl_certificate /etc/nginx/ssl/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/cle_privee.key;
access_log /var/log/nginx/matrix.access.log;
error_log /var/log/nginx/matrix.error.log;
location / {
proxy_pass http://X.X.X.X:8008;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 10M;
}
}
server {
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
server_name matrix.domaine.tld;
ssl on;
ssl_certificate /etc/nginx/ssl/bundle.crt;
ssl_certificate_key /etc/nginx/ssl/cle_privee.key;
access_log /var/log/nginx/matrix.access.log;
error_log /var/log/nginx/matrix.error.log;
location / {
proxy_pass http://X.X.X.X:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}