titre informatique

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 et apt-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 valeur 0.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'utilisateur postgres.
  • 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 et database 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 instruction static-auth-secret (un mot de passe au choix), realm (nom de domaine de votre serveur Coturn) et listening-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 (remplacez turn.domaine.tld par le nom de domaine de votre serveur Coturn) et turn_shared_secret (le même mot de passe que vous avez mis dans l'instruction static-auth-secret du fichier /etc/turnserver.conf de votre serveur Coturn) :
turn_uris: [ "turn:turn.domaine.tld:3478?transport=udp" ]
turn_shared_secret: motdepasse
turn_user_lifetime: 86400000
turn_allow_guests: True
  •  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 et trusted_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

 

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;
  }
}