Tutoriel Linux : comment auto-héberger sa messagerie instantanée

Avec des messageries instantanées comme Whatsapp, Telegram ou Signal, il est si facile de communiquer avec ses amis, de s’échanger des photos, des documents, voire de s’appeler au téléphone ou en vidéo, le tout bien sûr chiffré de bout en bout.

Le problème sous-jacent est que, dans ces applications, vos données ne vous appartiennent pas. Elles sont stockées quelque part dans le cloud, chez Meta ou autre, vous ne les maîtrisez pas. Elles peuvent disparaître demain, les récupérer peut devenir payant ou impossible demain, vous subirez.

Si le produit ment et qu’il n’est pas chiffré de bout en bout, vos conversations sont lues par d’autres.

Il est pourtant très simple d’auto-héberger sa messagerie instantanée.

La question que vous vous posez peut-être est : « ok, si j’auto-héberge ma messagerie instantanée, est-ce-que je pourrai communiquer avec mes amis sur Whatsapp ou Telegram ? »

En fait nous allons utiliser le protocole Matrix, qui a été créé justement parce que ses créateurs se demandaient pourquoi un utilisateur d’une messagerie instantanée A (Whatsapp par exemple) ne pouvait pas converser avec les utilisateurs d’une messagerie B (Signal par exemple).

Ils se sont dit que, dans un monde idéal, il y aurait un seul langage universel pour toutes les messageries, tout le monde pouvant ainsi converser avec tout le monde, et chacun pouvant choisir son logiciel favori compatible de ce langage universel.

Du coup ils ont codé ce langage universel et appelé ce protocole Matrix.

L’état français a adopté ce protocole pour son application de messagerie instantanée ministérielle Tchap.

A l’exception de Tchap (qui est du Matrix mais sur un réseau privé dédié), toutes les instances Matrix sont en réseau.

Cela signifie que, si nous installons un serveur Matrix sur notre serveur Linux, non seulement nous pourrons converser à la sauce Whatsapp entre utilisateurs de cette messagerie, mais nous pourrons aussi converser avec les utilisateurs de toutes les autres instances Matrix existant sur Internet.

Dans ce réseau global Matrix, chaque utilisateur est identifié par une adresse du type @utilisateur:serveur

Si nous montons un serveur Matrix sur notre serveur dont le nom de domaine est votre_domaine.duckdns.org par exemple, alors l’utilisateur toto aura comme adresse Matrix @toto:votre_domaine.duckdns.org

Pour fédérer toutes ces instances Matrix, le site https://matrix.org joue un rôle central.

Tout d’abord il permet aux utilisateurs n’ayant pas les compétences de créer une instance d’y créer une adresse Matrix. Ainsi, si elle est disponible, on pourra y créer l’adresse @toto:matrix.org

Ce site va nous permettre aussi de créer des comptes Matrix sur notre instance. En effet, bien que notre service sera auto-hébergé, c’est surtout un moteur Matrix que nous allons auto-héberger. Il ne dispose pas d’une interface graphique.

Pour l’utiliser, nous allons utiliser https://matrix.org pour créer les adresses sur notre instance, et une fois qu’une adresse donnée sera créée, on l’utilisera via un client de messagerie, qui sera l’application Element, que nous utiliserons sur Android et Linux.

L’installation du moteur lui-même est simplissime puisque, devinez quoi, … nous allons utiliser docker.

Installation de Tuwunel (moteur Matrix) sur le serveur

Sur le serveur, créons le répertoire tuwunel-docker et créons-y le fichier docker-compose.yml

cd

mkdir tuwunel-docker

cd tuwunel-docker

Dans docker-compose.yml, nous allons mettre :

Comme on peut le constater, TUWUNEL_REGISTRATION_TOKEN: ‘MonToken’ mentionne une phrase de passe qu’il faut choisir (et donc modifier) pour votre serveur (dont le domaine doit être également modifié dans TUWUNEL_SERVER_NAME), et qui sera à fournir lors de la création d’une adresse Matrix.

Attention la configuration ci-dessus va permettre de créer un conteneur docker tuwunel exposé sur les ports 6167 pour que les clients Matrix (comme element, que nous allons voir juste après) puissent fonctionner, et 8448 pour que la fédération puisse fonctionner. La fédération est ce qui fait qu’un utilisateur enregistré sur un autre serveur Matrix que le vôtre pourra converser avec vous via Matrix.

Cependant la configuration ci-dessus n’utilise pas le https mais uniquement le http. Or la plupart des serveurs Matrix sur Internet refuseront de communiquer avec un serveur en http. Pour disposer du https, nous allons ajouter un proxy https caddy dans le fichier docker-compose.yml, qui contient donc maintenant le contenu suivant :

Et le fichier Caddyfile à mettre dans le même dossier :

Lancez le service par la commande :

docker compose up -d

Création d’une adresse de messagerie instantanée

Comme mentionné précédemment, pour créer une adresse de messagerie instantanée sur notre instance, il faut passer par le site https://matrix.org, et plus exactement par le lien qu’ils fournissent vers la web application : https://app.element.io.

Passons l’interface graphique en français et cliquons sur le bouton « Créer un compte ».

Le site nous propose alors d’héberger notre compte sur matrix.org, ce qui n’est pas ce que nous souhaitons, puisque le but est d’auto-héberger sur notre VPS. Aussi nous allons cliquer sur « Modifier »

Nous rentrons alors l’URL de notre serveur qui est https://votre_domaine.duckdns.org:8448

Dans la capture ci-dessous on crée une adresse sur notre instance personnelle :

Le site va vérifier si l’URL donnée est bien un serveur Matrix. Normalement votre serveur répondra s’il est lancé et cela marchera car le docker engine est configuré pour demander l’ouverture des ports des conteneurs au firewall. Si votre serveur ne répond pas alors qu’il est lancé, c’est potentiellement qu’il y a un problème dû au firewall du serveur qui ne laisse pas passer le flux. Dans ce cas, il faudra ouvrir les flux entrants sur le serveur en y tapant les 3 commandes suivantes, et votre serveur répondra :

sudo ufw allow 8448/tcp

sudo ufw allow 6167/tcp

sudo ufw reload

Le site nous demande ensuite le nom du compte que nous allons créer et son mot de passe d’accès :

Nous sommes en train de créer l’adresse de messagerie @roudoudou:votre_domaine.duckdns.org

C’est dans la fenêtre ci-dessus qu’il faut renseigner le token choisi dans la variable TUWUNEL_REGISTRATION_TOKEN du fichier docker-compose.yml. Sans ce token, on ne peut pas créer de compte. C’est une sécurité pour éviter que n’importe qui puisse venir créer un compte Matrix sur notre instance.

Un clic sur le bouton « Continuer » crée le compte et nous fait accéder à la page d’accueil de l’adresse de messagerie instantanée créée.

Comme on peut le voir, on va maintenant pouvoir utiliser notre adresse de messagerie @roudou:votre_domaine.duckdns.org depuis ce site. Cependant ce n’est pas forcément ce que nous voulons faire. Mais gardons cette page ouverte pour l’instant, elle va nous servir pour l’authentification initiale depuis un smartphone ou un laptop.

Généralement, en effet, les gens veulent utiliser leur messagerie depuis leur smartphone ou depuis un laptop.

Sur Android, nous allons donc télécharger l’application Element, qui est l’application officielle de Matrix et qui marche très bien. Elle existe en 2 versions : Element classic, qui est une version plus ancienne toujours active, et Element X la nouvelle version. Nous allons utiliser Element X.

Au lancement de l’application Android Element, nous allons cliquer sur « Changement de fournisseur de compte », pour pouvoir connecter cette application Android à notre serveur Matrix et non à Matrix.org.

Dans la fenêtre ci-dessous, on clique sur « Autres »

On renseigne l’URL de notre serveur : https://votre_domaine.duckdns.org:8448

Comme le serveur répond bien, on peut renseigner le nom de l’adresse de messagerie et le mot de passe

Matrix offrant des services chiffrés de bout en bout, le problème sur lequel on tombe ensuite c’est que le compte roudoudou a déjà été utilisé sur app.element.io, donc des clés de chiffrement existent déjà et notre smartphone ne les a pas. On entre donc dans une phase où il va falloir utiliser la session web ouverte sur app.element.io pour attester que l’application lancée sur le smartphone est bien légitime et par conséquent elle recevra les clés. Dans la fenêtre suivante on clique donc sur « Utiliser une autre session »

Nous sommes invités à ouvrir une session existante déjà validée. Nous allons utiliser notre page web ouverte sur app.element.io

On clique sur « Commencer la vérification », ce qui va déclencher une vérification via une séquence d’émoji des deux côtés (sur le smartphone et sur le site web)

Au même moment, l’interface web sur app.element.io est prévenue et propose aussi de démarrer cette vérification de son côté

Sur le smartphone on démarre la même vérification, de sorte que les deux applications se parlent.

Les séquences d’émojis qui apparaissent doivent être les mêmes sur l’application Android et sur le site web

Et sur le site web :

La session est ensuite considérée comme vérifiée, et l’application Android reçoit les clés de déchiffrement de la session déjà ouverte sur le site web. Si des messages étaient déjà échangés avec d’autres utilisateurs, ils apparaissent dans l’interface graphique.

Pareil sur l’interface web sur app.element.io

On arrive donc dans le compte roudoudou sur le smartphone

Tout ceci n’est à faire qu’une fois, à la création de l’adresse de messagerie. Dorénavant, vous pouvez donner à vos amis votre adresse Matrix @roudoudou:votre_domaine.duckdns.org, ils pourront vous contacter.

De même, vous pouvez démarrer un chat avec n’importe quel utilisateur du réseau Matrix sur la planète, quelle que soit l’instance serveur qu’il utilise, à partir du moment où vous connaissez son adresse @utilisateur:serveur

Vous pouvez créer un salon, qui est l’équivalent d’un groupe Whatsapp, et y gérer la liste des membres. L’adresse des salons est de la forme #salon:serveur. Votre salon peut être public (n’importe qui pourra se connecter ou le rechercher) ou privé (vous gérez la liste des membres).

Vous pouvez aussi chercher des salons publics déclarés sur d’autres instances et vous connecter.

En conversation avec une autre personne, vous pouvez, en utilisant toujours le chiffrement de bout en bout :

  • Ecrire des messages
  • Partager des fichiers
  • Partager sa position sur la carte
  • Appeler au téléphone
  • Appeler en visio-conférence

Tout cela avec vos données qui vous appartiennent et qui ne quittent jamais votre serveur.

Installation d’Element sous Linux

Element desktop est le client lourd Matrix officiel pour Linux. Il tourne aussi sur Mac.

Pour l’installer sur notre laptop, il suffit de taper :

sudo apt update
sudo apt install element-desktop

Le principe est le même que pour l’application smartphone : au lancement du logiciel il faudra renseigner l’adresse du serveur, puis de renseigner le nom de l’adresse roudoudou et son mot de passe, et de faire le même genre de procédure de confiance que celle faite sur le smartphone (se laisser guider).

Le résultat final ressemble à cela :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *