Aujourd'hui, nous partons à la découverte de Matrix. Comme beaucoup je ne connaissais pas exactement le fonctionnement, mais finalement c'est un outil assez simple d'utilisation. Promis on ne va pas parler du célèbre film...
Mais avant tout, on va expliquer les différentes notions :
-
Matrix : Protocole pour la communication en temps réel. Il a été lancé en 2014 et se veut simple et léger.
-
Element : Client utilisant le protocole Matrix. Anciennement Riot.im, il est disponible via une application web, sur PC et mobile. Il y a même une intégration avec Nextcloud 😉
-
Bridge : Composant de l'architecture Matrix, qui joue le rôle d'intermédiaire entre le serveur Matrix, et les services externes (exemple : Facebook Messenger, Signal, SMS,) dont la liste est disponible ici :
Pour résumer, Matrix est un énorme réseau de messagerie, composé d'une multitude d'instances, fédérées entre elles. N'importe quel utilisateur inscrit sur une instance Matrix peut discuter à n'importe qui.
Nous allons voir aujourd'hui comment installer sa propre instance exploitant le protocole Matrix, à travers la solution Synapse. Dans notre cas nous utilisons un serveur Debian 11.
Prérequis
Avant d'installer Synapse, voici quelques prérequis :
- Créer une entrée DNS de type A, par exemple
matrix.example.com
- Créer une entrée DNS de type SRV, par exemple :
_matrix._tcp.example.com. 3600 IN SRV 10 0 8448 matrix.example.com.
- Ouvrir le port 8448
Dans le cadre de notre article nous allons désactiver IPv6 sur la machine.
Installation de Synapse
Mettre à jour les sources et les paquets :
apt-get update
apt-get upgrade
Installer les différents paquets nécessaires :
apt-get install lsb-release wget apt-transport-https curl git
Installer la source de Synapse :
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" | sudo tee /etc/apt/sources.list.d/matrix-org.list
Installer les paquets relatifs à Synapse :
apt-get update
apt-get install matrix-synapse-py3 python3-psycopg2
Il vous sera demandé le nom d'hôte de votre serveur. Dans notre cas, il s'agit de matrix.example.com
. Poursuivre la configuration.
La configuration de Synapse se fait avec le fichier /etc/matrix-synapse/homeserver.yaml
. Remplacer cette ligne :
bind_addresses: ['::1', '127.0.0.1']
Par :
bind_addresses: ['127.0.0.1'] ### Mettre 0.0.0.0 si écoute externe
Créer un secret pour la valeur de registration_shared_secret
:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
Puis (re)démarrer le service :
systemctl enable matrix-synapse
systemctl restart matrix-synapse
Vérifions que le service soit bien opérationnel :
Vérifions également l'écoute sur le port 8008 :
root@debian11:~# ss -tpln |grep 8008
LISTEN 0 50 127.0.0.1:8008 0.0.0.0:* users:(("python",pid=9043,fd=13))
Le composant Synapse est installé.
Configuration de Synapse avec PostgreSQL
Par défaut, Synapse est configuré avec une base de données SQLite, mais nous recommandons en production l'utilisation d'une BdD PostgreSQL.
Installer PostgreSQL :
apt-get install postgresql
Créer un utilisateur synapse
:
root@debian11:~# su - postgres
postgres@debian11:~$ createuser --pwprompt synapse
Créer une base de données synapse
:
postgres@debian11:~$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapse
Puis configurer Synapse pour fonctionner avec PostgreSQL, dans /etc/matrix-synapse/homeserver.yaml
, commenter cette partie :
database:
name: sqlite3
args:
database: /var/lib/matrix-synapse/homeserver.db
Et rajouter ceci :
database:
name: psycopg2
txn_limit: 10000
args:
user: synapse
password: PasswordGenere
database: synapse
host: localhost
port: 5432
cp_min: 5
cp_max: 10
Redémarrer le service :
systemctl restart matrix-synapse
Configuration derrière un proxy Apache
Cette étape vous permettra de laisser le port TCP de Matrix (8008) fermé à l'extérieur, et de sécuriser vos requêtes à travers HTTPS.
Activer les modules suivants :
a2enmod proxy proxy_http proxy_balancer ssl headers lbmethod_byrequests
Si besoin d'accéder depuis l'extérieur, alors il faut suivre l'étape suivante : la configuration derrière un reverse-proxy. Ajouter cette ligne dans /etc/apache2/ports.conf
:
Listen 8448
Et le Vhost :
<VirtualHost *:80>
ServerName matrix.example.com
Redirect Permanent / https://matrix.example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName matrix.example.com
ProxyRequests off
ProxyPreserveHost On
ProxyVia full
ProxyPass /_matrix/identity http://127.0.0.1:8090/_matrix/identity
<Location />
ProxyPass http://127.0.0.1:8008/ nocanon
ProxyPassReverse http://127.0.0.1:8008/
</Location>
RequestHeader set X-Forwarded-Proto "https"
# Configuration of the SSL Certificate
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/matrix.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/matrix.example.com/privkey.pem
</VirtualHost>
<VirtualHost *:8448>
ServerName matrix.example.com
# Configuration of the SSL Certificate
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/matrix.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/matrix.example.com/privkey.pem
<Location />
ProxyPass http://127.0.0.1:8008/ nocanon
ProxyPassReverse http://127.0.0.1:8008/
</Location>
</VirtualHost>
Redémarrer Apache afin que les changements soient pris en compte :
systemctl restart apache2
Test du fonctionnement
Tester le bon fonctionnement : http://matrix.example.com
Sinon, aller sur : https://federationtester.matrix.org/ :
Utilisation
Pour créer un utilisateur sur sa propre plateforme, taper la commande suivante :
register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
Vous pouvez utiliser l'application open-source Element (qui est utilisée par 85% des utilisateurs de Matrix).
Cliquez sur "Se connecter". Nous n'avons pas de compte sur la plateforme Element, mais un compte sur notre instance Matrix. Chaque élément a un identifiant unique, de cette forme :
- #news:matrix.org : Channel #news du serveur @matrix.org
- @clement:matrix.org : User "clement" du serveur @matrix.org
Changer le serveur d'accueil, pour ne pas utiliser le service Matrix.org, pour la simple et bonne raison que nous avons créé le nôtre. 😁
Vous êtes à présent connecté, vous pouvez discuter avec n'importe quel utilisateur d'une instance Matrix. Nous verrons dans un prochain article comment configurer un bridge, à travers l'exemple de Facebook Messenger !