From a400eccbd2bf3c358d7b41712c45f860c43ea07f Mon Sep 17 00:00:00 2001 From: Heuzef Date: Sun, 10 Mar 2024 21:43:03 +0100 Subject: [PATCH] Draft : Matrix --- content/articles/2023/matrix.md | 481 +++++++++++++++++++++++++++++++----- content/assets/matrix_exemple_1.png | Bin 0 -> 8481 bytes content/assets/matrix_exemple_2.png | Bin 0 -> 9480 bytes content/assets/matrix_exemple_3.png | Bin 0 -> 20455 bytes content/assets/matrix_exemple_4.png | Bin 0 -> 45513 bytes content/assets/matrix_exemple_5.png | Bin 0 -> 18182 bytes content/assets/matrix_exemple_6.png | Bin 0 -> 24244 bytes 7 files changed, 415 insertions(+), 66 deletions(-) create mode 100644 content/assets/matrix_exemple_1.png create mode 100644 content/assets/matrix_exemple_2.png create mode 100644 content/assets/matrix_exemple_3.png create mode 100644 content/assets/matrix_exemple_4.png create mode 100644 content/assets/matrix_exemple_5.png create mode 100644 content/assets/matrix_exemple_6.png diff --git a/content/articles/2023/matrix.md b/content/articles/2023/matrix.md index c1e6682..5c6d263 100644 --- a/content/articles/2023/matrix.md +++ b/content/articles/2023/matrix.md @@ -1,44 +1,48 @@ Title: Mettre en service sa propre instance de Matrix avec Bridges Category: Informatique Tags: autohébergement, web, social, docker, tchat, communication -Date: 2024-03-01 +Date: 2024-03-10 Status: draft -Pour ceux qui ne connaisse pas encore Matrix, je le présente succinctement ainsi : c'est un outil messagerie moderne, qui est supérieur technologiquement à toutes les autres solution équivalente (Instagram, WhatsApp, Messenger, Signal, WeChat, Telegram, Discord, etc ...). +Pour ceux qui ne connaissent pas Matrix, je le présente succinctement ainsi : c'est un outil messagerie moderne, qui est supérieure techniquement à toutes les autres solutions équivalentes (Instagram, WhatsApp, Messenger, Signal, WeChat, Telegram, Discord, etc ...). -Mais ce n'est pas tout, en plus d'être très sécurisé, c'est aussi une solution libre, éthique et décentralisée et en constante évolution grâce à une large communautée très impliquée dans cette solution de messagerie utlime que n'importe qui peux utiliser ou auto-héberger. +Mais ce n'est pas tout, en plus d'être très sécurisé, c'est aussi une solution libre, éthique et décentralisée et en constante évolution grâce à une large communauté très impliquée dans cette solution de messagerie ultime en auto-hébergement. -Il n'y a donc absolument aucun argument en faveur des autres platformes (même pour Signal oui oui) et dans un monde idéal l'humanitée entière utiliserais Matrix comme solution unique de communiquation. +Il n'y a donc absolument aucun argument en faveur des autres plateformes (même pour Signal et RocketChat oui oui) et dans un monde idéal l'humanité entière utiliserais Matrix comme solution unique de communication. -J'ajoute que tout bon dirigeant d'entreprise qui utilise une solution de tchat en interne doit forcément déployer Matrix pour sa société, tout autre choix sera fondalement moins pertinant, voir dangereux. Le monopôle de Microsoft avec Teams n'est d'ailleur pas un freins, car il est tous à fait possible d'integrer des solutions de Visio comme [Jitsi](https://meet.jit.si) dans l'instance Matrix. Et une fois que nous avons goûté à l'outil, nous sommes rapidement convaincu. +J'ajoute que tout bon dirigeant d'entreprise qui utilise une solution de tchat en interne devrait déployer Matrix pour sa société, tout autre choix sera finalement moins pertinent, voir dangereux. Le monopôle de Microsoft avec Teams n'est d'ailleurs pas un frein, car il est tout à fait possible d'intégrer des solutions de Visio comme [Jitsi](https://meet.jit.si) dans l'instance Matrix. Et une fois que nous avons goûté à l'outil, nous sommes rapidement convaincus. ![Messenger FR](../../assets/messenger_fr.png) -Maintenant que les présentations sont faite, je vais expliquer dans cette note comment déployer simplement une instance avec Docker et surtout avec des Bridges. Je précise que cette note est co-rédigéré avec [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui à également une expérience fraîche avec Matrix de son côté ! +Maintenant que les présentations sont faites, je vais expliquer dans cette note comment déployer simplement une instance avec Docker et surtout avec des Bridges. + +Je précise que cette note est co-rédiger avec [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui à également une expérience fraîche avec Matrix de son côté ! Avant de débuter l'aventure, [commencez par créer un compte Matrix](https://app.element.io/#/register). Réserver votre identifiant et profitez-en pour tester Matrix sur les serveurs d'Element. # Qui utilise Matrix en 2024 ? 🗣 -Je dirais, quasiment personne, comme beaucoup d'outil libre, pas de gros marketing derrière. Même [Signal](https://www.signal.org), qui met pourtant les moyens, peine à concurencer ses concurents qui sont pourtant naze au possible, alors autant dire que Matrix n'est pas prêt de percer, mais patience cela arrivera car contrairement au autre, Matrix est pereine dans le temps et sera là encore bien après eux (l'e-mail, xmpp et irc en témoignent). Finalement, les seuls qui ont, en 2024, un interêt à déployer du Matrix, sont les entreprises, associations et organisations qui souhaitent disposer d'un outil de communication en interne. Pour les autres, on y retrouvera majoritairement des Geek élitiste qui ont la chance d'avoir les connaissances et le temps pour maintenir cet outil. +Quasiment personne, comme beaucoup d'outils libre, pas de gros marketing derrière. Même [Signal](https://www.signal.org), qui met pourtant les moyens, peine à concurrencer ses concurents qui sont pourtant nazes au possible, alors autant dire que Matrix n'est pas prêt de percer, mais patience, car contrairement aux autres, Matrix est pérenne dans le temps et sera là encore bien après eux (l'e-mail, xmpp et irc en témoignent). + +Finalement, les seuls qui ont un intérêt à déployer Matrix, sont les entreprises, associations et organisations qui souhaitent disposer d'un outil de communication en interne. Pour les autres, on y retrouvera majoritairement des Geek qui ont la chance d'avoir les ressources et le temps pour maintenir cet outil. # Les Bridges ! 🏗 -En plus de pouvoir choisir n'importe quel interface de tchat pour votre Matrix (ce qui est déjà génial), Matrix à donc lancé une idée révolutionaire : **Les bridges** ! +En plus de pouvoir [choisir n'importe quel client](https://matrix.org/ecosystem/clients/) (ce qui est déjà génial), Matrix a une fonction révolutionnaire : **Les bridges** ! -L'idée est extaorinaire car elle promet récupérer le trafic (donnés et messages) des autres plateformes dans votre instance Matrix, carément ! +Elle vous promet de récupérer vos messages des autres plateformes dans votre instance Matrix ! [ matrix.org/ecosystem/bridges](https://matrix.org/ecosystem/bridges) -Il faut comprendre que les Bridges sont additionnels et heuresement, car il y à baleine sous gravillon, explication dans le chapitre suivant. +Il faut comprendre que les Bridges sont additionnels et heureusement, car il y a baleine sous gravillon, explication dans le chapitre suivant. # Le piège des Bridges 🚧 -Après plusieurs mois d'utilisation des Bridges, je vais être honnête, c'est un calvaire et la maintenance est chronophage au possible. Les Bridges sont essentiellement des prototypes en Alpha et plus nous en ajoutons plus c'est instable, la maintenance n'en devient que plus lourde. +Après plusieurs mois d'utilisation des Bridges, je vais être honnête, c'est un calvaire et la maintenance est chronophage au possible. Les Bridges sont essentiellement des prototypes et plus nous en ajoutons plus c'est le chaos, la maintenance n'en devient que plus lourde. -Chaque Bridge à son lot de galère c'est sans fin, **il faut donc être determiné à y consacrer beaucoup de temps !** +Chaque Bridge à son lot de galère, c'est sans fin, **il faut donc être déterminé à y consacrer beaucoup de temps !** -Autrement, la meilleur alternative que je connaisse est [Element-ONE](https://ems.element.io/element-one), payant et avec seulement trois Bridges, mais c'est un début 😉 +Autrement, la meilleure alternative que je connaisse est [Element-ONE](https://ems.element.io/element-one), payant et avec seulement trois Bridges, mais c'est un début 😉 # Déploiement basique avec Docker 🐳 @@ -46,7 +50,7 @@ Si vous êtes à l'aise avec Docker, alors la configuration suivante vous permet La configuration générale ici est donc d'installer le moteur Synapse avec sa DB Postgres. Avec seulement ceci, vous pourrez bénéficier d'une instance Matrix qui tourne super bien. -Pour tout le reste, ce sont les Bridges, que vous pouvez simplement commenter pour ne pas les déployer dans un premier temps, voir jamais, vu l'enfer que s'est à gérer. +Pour tout le reste, ce sont les Bridges, que vous pouvez simplement commenter pour ne pas les déployer dans un premier temps, voir jamais 😤 ## Docker compose file @@ -239,9 +243,7 @@ Générer le fichier de config Synapse : docker run -it --rm -v /home/matrix/Synapse/:/data -e SYNAPSE_SERVER_NAME=matrix.domain.tld -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate ``` -Ce fichier de configuration sera généré dans **/home/matrix/Synapse/homeserver.yaml**, plutôt simple à comprendre, voici quelques paramètres à modifier celon vos besoins : - - +Ce fichier de configuration sera généré dans **/home/matrix/Synapse/homeserver.yaml**, plutôt simple à comprendre, voici quelques paramètres à modifier selon vos besoins : ```yaml max_upload_size: 100M @@ -258,7 +260,7 @@ app_service_config_files: - /bridges/whatsapp/data/registration.yaml ``` -Chaque fichier de configuration des bridges est similaire, les paramètres récurents à modifier sont les suivants : +Chaque fichier de configuration des bridges est similaire, les paramètres récurrents à modifier sont les suivants : ```yaml homeserver: @@ -278,37 +280,35 @@ homeserver: Maintenant, vous pouvez démarrer toute la tambouille : ``docker compose -f /home/matrix/docker-compose.yml up`` -Le premier lancement peu prendre du temps, le temps que les fichiers de configuration et de **registration.yaml** soit générés. - -N'anticiper pas leur création, ces derniers doivent être générés par synapse, confirmant que tout fonctionne correctement, enssuite vous pouvez éditer les paramètres, puis finalement relancer les services. +Le premier lancement prend du temps, les fichiers de configuration et de **registration.yaml** doivent être générés par Synapse (n'anticipez pas leur création), confirmant que tout fonctionne correctement, ensuite, vous pouvez éditer les paramètres. -Vous aurrez probablement une erreur de permission sur ces fichiers d'ailleur, corrigez simplement cela : +Vous aurez probablement une erreur de permission sur ces fichiers au lancement, corrigez simplement cela ainsi : ```bash sudo chmod 644 /home/matrix/bridges/*/data/registration.yaml ``` -## Visio-conférence +## Visioconférence -Si vous souhaitez utiliser la visio-conférence, notez bien que cette dernière ne fonctionnera que en local sur votre réseau interne. Pour aller plus loin et profiter pleinement des fonctionnalités de la visio-conférence, il vous faudra mettre en service un serveur TURN : [Configuring a Turn Server - Synapse](https://matrix-org.github.io/synapse/latest/turn-howto.html) +Si vous souhaitez utiliser la visioconférence, notez bien que cette dernière ne fonctionnera qu'en local sur votre réseau interne. Pour aller plus loin et profiter pleinement des fonctionnalités de la visioconférence, il vous faudra mettre en service un serveur TURN : [Configuring a Turn Server - Synapse](https://matrix-org.github.io/synapse/latest/turn-howto.html) # Mon retour d'expérience sur les différents Bridges -Vous remarquerez que la plupart des Bridges sont déployé via [MAUTRIX](https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram&ref=infos.zogg.fr). Ce n'est pas pour rien car la plus grande panoplie est édité par eux et c'est aussi bien souvent les bridges les plus stable. +Vous remarquerez que la plupart des Bridges sont déployées via [MAUTRIX](https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram&ref=infos.zogg.fr). Ce n'est pas pour rien, car la plus grande panoplie est éditée par eux et ce sont aussi bien souvent les bridges les plus stables. -Pour rappel, [la liste des Bridges est diffusée sur le site officiel de Matrix](https://matrix.org/ecosystem/bridges/). +Pour rappel [la liste des Bridges est diffusée sur le site officiel de Matrix](https://matrix.org/ecosystem/bridges/). -De façon général, la logique d'ajout d'un bridge est toujours la même : +De façon générale, la logique d'ajout d'un bridge est toujours la même : -1. Execution du bridge. +1. Exécution du bridge -2. Depuis votre client Matrix préféré, rechercher le bot du bridge pour commencer une discution avec lui. +2. Depuis votre client Matrix préféré, rechercher le bot du bridge pour commencer une discussion avec lui -3. Dans le canal de discution avec le bot taper ``help`` pour afficher les actions possibles. +3. Dans le canal de discussion avec le bot taper ``help`` pour afficher les actions possibles ## Signal -Le Bridge de Signal est un peu lourd à mettre en place car il réclame une DB à part (ce que je vous conseil vivement de faire pour les performances). Après cela, il tourne plutôt bien ! +Le Bridge de Signal est un peu lourd à mettre en place, car il réclame une DB à part (ce que je vous conseille vivement de faire pour les performances). 1. Inviter @signalbot 2. Enregistrez votre téléphone ``register +33000000000`` @@ -320,40 +320,36 @@ Le Bridge de Signal est un peu lourd à mettre en place car il réclame une DB ## Discord -Pour Discord, la première initialisation ne permet que de jongler avec les messagerie privée, vous aurez ensuite besoin de jouer avec les commandes du bridges pour rejoindre les différentes guildes (plus communément appelés "Serveurs Discord" par les moldus) via leur identifiants uniques. - -Ensuite, c'est le gros dawa, si vous invitez une guilde assez grose, vous allez vous retrouver avec autant de notification d'invitation à accépter que de catégories ! Bon une fois que c'est validés, vous êtes tranquille, mais faite très attention aux journaux qui vont être générés sur votre serveur, ça va très rapidement remplir l'espace disque s'il y a de l'activité sur vos salons discord ! - +Pour Discord, la première initialisation ne permet que de jongler avec les messageries privées, vous aurez ensuite besoin de jouer avec les commandes du bridges pour rejoindre les différentes guildes (plus communément appelées "Serveurs Discord" par les Moldus) via leur identifiant unique. +Ensuite, c'est le gros dawa, si vous invitez une guilde assez grosse, vous allez vous retrouver avec autant de notification d'invitation à accepter que de catégories ! Bon une fois que c'est validé, vous êtes tranquille, mais faite très attention aux journaux qui vont être générés sur votre serveur, ça va très rapidement remplir l'espace disque s'il y a de l'activité sur vos salons Discord ! 1. Inviter @discordbot -2. Sur l'app mobile : *paramètres de l'app > "Scanner le QR code"* +2. Sur l'application mobile : *paramètres de l'app > "Scanner le QR code"* 3. Envoyer la commande au bot : ``login-qr`` 4. La commande ``guilds status`` permet d'afficher les différents "Serveurs Discord" - - ## WhatsApp -Alors WhatsApp, pour faire simple, dispose d'une sécuritée très agréable qui consite à déconnecter tous vos périphériques tiers après une semaine, super ... +Alors WhatsApp, pour faire simple, dispose d'une sécurité très agréable qui consiste à déconnecter tous vos périphériques tiers après une semaine, super ... Cela concerne donc également votre Bridge qu'il vous faudra reconnecter avec un QRCode toute les semaines. Voila voila ... 👌 1. Inviter @whatsappbot -2. Sur l'app mobile : *paramètres de l'app > "Scanner le QR QR"* +2. Sur l'application mobile : *paramètres de l'app > "Scanner le QR QR"* 3. Envoyer la commande au bot : ``login`` ## Facebook et Instagram -Dans le même type de flood absurde que discord, vous aller recevoir une notif d'invite à accépter pour chaque personne ... J'espère pour vous que vous êtes un associal avec peu d'amis sur ces plateformes, sinon vous aller user votre souris à accépter des centaines d'invitations. -A et un conseil, tester bien vos volumes docker, le redémarrage du bridge à tendance à tout remettre à zéro, histoire de vous pousser au sucide une bonne fois pour toute 😖 +Dans le même type de flood absurde que Discord, vous allez recevoir une notification d'invitation à accepter pour chaque personne ... J'espère pour vous que vous êtes un asocial avec peu d'amis sur ces plateformes, sinon vous aller user votre souris à accepter des centaines d'invitations une par une. +Un conseil, tester bien vos volumes docker, le redémarrage du Bridge à tendance à tout remettre à zéro, histoire de vous pousser au suicide une bonne fois pour toutes 😖 ## Telegram -Un peu plus de difficulté à mettre en place le bridge Télégram, le bot étant encore en Alpha protoype au moment de mon test, mais enssuite, fonctionne correctement. +Un peu plus difficile à mettre en place, le bot étant encore en prototype au moment de mon test, mais ensuite, fonctionne correctement. Sur la configuration, il est nécessaire d'ajouter une clef d'API récupérable sur : https://my.telegram.org/apps @@ -363,33 +359,29 @@ App api_hash: 00000000000000000000000000000000 ``` 1. Inviter @telegrambot -2. Sur l'app mobile : *paramètres de l'app > "Scanner le code QR"* +2. Sur l'application mobile : *paramètres de l'app > "Scanner le code QR"* 3. Envoyer la commande au bot : ``login-qr`` ## WeChat -La palme d'or de la torture reviens à nos amis Chinois avec leur messagerie abominable. +La palme d'or de la torture revient à nos amis Chinois avec leur messagerie abominable. -Créé par un nerd Chinois répondant au doux nom de [lxduo](https://github.com/duo/matrix-wechat-docker), ce dernier probablement considéré par un teroriste par le gouvernement chinois, à eu la patience de mettre au monde un Brige capable de s'accoupler avec cette horreur de WeChat. - -Ce qui donne naissance à une terrible usine à Gaz qui vous servira d'hote, qui vous faudra accompagner d'autant usine à gaz supplémentaire que vous souhaitez ajouter de compte WeChat ... Le gros délire en terme de consomation de ressource 😭. - -Bon dans mon cas, [je n'ai même pas réussis à le faire tomber en marche](https://github.com/duo/matrix-wechat-docker/issues/2) et à vrais dire, j'ai surement été banni par le gouvernement Chinois de leur app car impossible de me créer un compte, j'ai donc rennoncé. -Bon je prévois un voyage en Chine en 2024, je vais en profiter pour me créer un compte en lousdé sur place, je ferais peut-être un article à ce sujet un jour si c'est croustillant. +Créé par un nerd Chinois répondant au doux nom de [lxduo](https://github.com/duo/matrix-wechat-docker), ce dernier probablement considéré par un terroriste par le gouvernement chinois, a eu la patience de mettre au monde un Bridge capable de s'accoupler avec cette horreur de WeChat. +Ce qui donne naissance à une terrible usine à Gaz qui vous servira d'hôte, qui vous faudra accompagner d'autant d'usine à gaz supplémentaire que vous souhaitez ajouter de compte WeChat ... Le gros délire en termes de consommation de ressource 😭. +Bon dans mon cas [je n'ai même pas réussi à le faire tomber en marche](https://github.com/duo/matrix-wechat-docker/issues/2) et à vrai dire, j'ai sûrement été banni par le gouvernement Chinois de leur application car impossible de me créer un compte, j'ai donc renoncé. +Je prévois un voyage en Chine en 2024, je vais en profiter pour me créer un compte en lousdé avec un numéro sur place, je ferais peut-être un article à ce sujet un jour si c'est croustillant. 1. Inviter @wechatbot -2. Sur l'app mobile : *paramètres de l'app > "Scanner le code QR"* +2. Sur l'application mobile : *paramètres de l'app > "Scanner le code QR"* 3. Envoyer la commande au bot : ``login`` pour tenter de détecter l'agent WeChat - - ## SMS -En bonus, j'ai tenté l'utilisation de [SmsMatrix](https://f-droid.org/en/packages/eu.droogers.smsmatrix/), une app tiers qui peux tourner avec un bridg, j'ai fait tomber en marche le machin ainsi : +En bonus, j'ai tenté l'utilisation de [SmsMatrix](https://f-droid.org/en/packages/eu.droogers.smsmatrix/), une application Android qui peut fonctionner avec un Bridge, j'ai fait tomber en marche le machin ainsi : -S'authentifier sur le compte **@smsbot:matrix.domain.tld** et inviter son compte utilisateur pour créer un canal de discution. +S'authentifier sur le compte **@smsbot:matrix.domain.tld** et inviter son compte utilisateur pour créer un canal de discussion. Après autorisation, installer SmsMatrix sur votre téléphone : ``` @@ -402,29 +394,386 @@ Devicename : Il suffit ensuite de recevoir un SMS pour initialiser une conversation. +Attention, cette solution est crade, car si vous commencez à vouloir partager ce bridge avec d'autres utilisateurs, en plus de devoir vous partager le mot de passe du compte @smsbot, cela va mettre un sacré bazar pour qui envoi/reçoi les sms ... +Préférez plutôt une solution plus complexe comme [mautrix-gmessages](https://github.com/mautrix/gmessages) qui fonctionnera avec le client SMS natif d'Android. -Attention, cette solution est crade car si vous commencez à vouloir partager ce bridge avec d'autre utilisateur, en plus de devoir vous partager le mot de passe du compte @smsbot, cela va mettre un sacré merdier dans qui envoi/reçoi les sms ... +# Conclusion -Préférez plutôt une solution plus complexe comme [mautrix-gmessages](https://github.com/mautrix/gmessages) qui fonctionnera avec le client SMS natif d'Android. +- Matrix, c'est le top du top de la messagerie. Tant sur l'aspect technique qu'éthique. +- Quasiment personne ne connais et n'utilise ça dans le monde pro et encore moins ailleurs. +- La configuration d'un serveur TURN supplémentaire est nécessaire si vous souhaitez profiter de la Visioconférence. -# Conclusion +- La configuration des Bridges est très chronophage et instable. + +C'est tout pour moi 😉 je vous relais maintenant les notes de mon ami [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui souhaite également partager son expérience avec Matrix. +Sans aller aussi loin que moi sur la quantité de Bridge testés, il a cependant abordé le Double Puppetting, très intéressant pour profiter pleinement des Bridges. + +---- + +L'article ci-dessous, rédigé par [Lucas Assier](https://www.linkedin.com/in/lucasassier), date de Septembre 2023. + +---- + +# Pourquoi Matrix + +À cela plusieurs raisons et cas d'usages : + +- En premier, les communications sont chiffrées, dans la mesure du possible, par design, ce qui permet de discuter avec des amis de sujets sensibles sans avoir à se soucier de voir nos communications et pièces jointes sur un CDN random (N'est-ce pas Discord ?). + +- En second, le système de fédération : un utilisateur d'un serveur peut communiquer sur un serveur différent de manière transparente. J'ai pu voir cela l'an dernier sur l'instance de visioconférence de la Fosdem qui n'est autre qu'une instance Matrix avec un plugin jitsi + +- Le système de bridges : Le protocole de serveur Matrix a été pensé pour inclure un système de "passerelles" permettant de lier un service quelconque a Matrix. C'est notamment ce système qui m'a poussé à passer le pas et à déployer ma propre instance Matrix. + +# Terminologie + +## Provider + +Matrix, c'est un peu comme le système de mails, il faut un fournisseur ou **provider** pour pouvoir communiquer. Pour cela, un **homeserver** va leur donner un compte, exemple : + +![Matrix Exemple 1](../../assets/matrix_exemple_1.png) + +## Homeserver + +Un **homeserver** est un serveur Matrix (Synapse, Conduit, etc ...). + +Il est lié a un seul domaine qui n'est pas voué a changer. +Les comptes générés via les **homeserver** sont en deux parties comme suit : + +`@user@homeserver.tld` + +Pour reprendre l'exemple ci-dessus, cela donnerait : + +![Matrix Exemple 2](../../assets/matrix_exemple_2.png) + +## AppService + +C'est ce que l'on peut comparer à un bot standard. +Les AppServices doivent être enregistrés dans la configuration du serveur, il n'est pas possible de les enregistrers à la volée. + +## Bridges + +Un bridge est un système permettant de connecter un groupement Matrix à une autre plateforme, par exemple, Slack ou encore Signal. + +Les bridges fonctionnent de deux manières : + +1. Dans Matrix, les utilisateurs des autres plateformes sont vus en tant que "*ghost*". + +2. Dans l'autre plateforme, les comptes utilisateurs de Matrix sont appelés des "*puppets*". + +Exemple : + +![Matrix Exemple 3](../../assets/matrix_exemple_3.png) + +Les spécifications matrix sont complexe mais entièrement documentées [ici](https://spec.matrix.org/latest/). + +# Choisir son serveur + +Aujourd'hui, Matrix possède plusieurs implémentations serveurs plus ou moins aboutis. +Il y en a trois qui en ont retenu mon attention : + +1. **Synapse** - la référence originale en python. C'est le seul projet de serveur marqué comme stable. + +2. **Conduit** - une implémentation en *RUST* du protocole serveur de Matrix mais avec une empreinte mémoire plus faible. + +3. **Dendrite** - la même volontée que Conduit, mais en *GO*. Certaines fonctions sont manquantes, la priorité étant l'implémentation des fonctions pour les instances single user. + +# Monter son homeserver + +## Préparations + +Pour des raisons pratiques, nous allons assumer que le serveur retenu est Synapse (car officiel et implémente l'intégralité des fonctionnalités). +En premier lieu, il faut réfléchir à un nom de domaine, c'est très important car il est +impossible de le changer une fois le serveur installé. + +Ensuite, il y a plusieurs manières d'installer un serveur Synapse : + +1. Via un package manager + +2. Via Ansible + +3. Via Docker + +Ici, nous verrons via Docker. + +## La stack technique de la démo + +### Un reverse-proxy + +Initialement, le projet est déployé dans une colocation de homelabs derrière un seul et même port. + +Par conséquent, nous passons par Caddy afin de faire le routage en reverse-proxy. + +Cela, peut-être contraignant, mais il est quand même nécessaire d'en avoir un avec Synapse, notamment quand on va vouloir faire de la délégation. + +### Une instance Docker + +Pour héberger le serveur ainsi que les bridges, le serveur et les bridges seront en deux stacks Docker-compose séparés. + +## Déployer le serveyr Synapse + +```yaml +version: '3' +services: + synapse: + container_name: synapse + image: docker.io/matrixdotorg/synapse:latest + restart: unless-stopped + environment: + - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml + volumes: + - synapse-data:/data + depends_on: + - synapse-db + ports: + - 8448:8448/tcp # Federation Traffic + - 8008:8008/tcp # Client Traffic + networks: + - default + - bridgenet + + synapse-db: + container_name: synapse-pgsql + image: docker.io/postgres:12-alpine + environment: + - POSTGRES_USER=synapse +            - POSTGRES_PASSWORD=changeme! +            - POSTGRES_DB=synapse +            - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C +        volumes: +            - synapse-pgsql:/var/lib/postgresql/data +        volumes: +            synapse-data: {} +            synapse-pgsql: {} +        networks: +            bridgenet: +                name: synapse_bridges +                external: true +``` + +> À noter, nous avons un réseau Docker dédié a l'intercommunication entre Synapse et les Bridges installés comme suit : +> +> `docker network create synapse_bridges` + +En premier lieu, il faudra lancer Synapse pour lui dire de générer la configuration : + +`docker-compose run --rm -e SYNAPSE_SERVER_NAME=matrix.kestrel.ovh -e +SYNAPSE_REPORT_STATS=no synapse generate` + +En suivant, il faudra éditer la configuration `homeserver.yaml` dans le volume synapse-data. + +Il sera important de regarder les options de configuration, notamment la configuration de la connection à la base Postgres, le nom du serveur (*server name*), que les serveurs de clés de confiance ainsi que l'option pour autoriser la création de comptes ou non. + +Une fois cela fait, nous pouvons démarrer la stack via `docker compose up`. + +> On pourrait faire en background mais comme nous en sommes à la phase de lancement initiale, je préfère laisser en premier plan afin de voir si l'application lance des erreurs ou non. + +## Configurer le reverse proxy et setup une délégation + +Par délégation, nous sous-entendons relayer le trafic Matrix a une entité dans un sous-domaine ou ailleurs. + +Ici, mon server name est `kestrel.ovh`, pour autant, le trafic est délégués vers `matrix.kestrel.ovh` via la configuration suivante : + +```json +kestrel.ovh { +       header /.well-known/matrix/* Content-Type application/json +       header /.well-known/matrix/* Access-Control-Allow-Origin * +       respond /.well-known/matrix/server `{"m.server": +"matrix.kestrel.ovh:443"}` +       respond /.well-known/matrix/client `{"m.homeserver": +{"base_url":"https://matrix.kestrel.ovh"}}` +} +matrix.kestrel.ovh { +       reverse_proxy /_matrix/* 192.168.1.102:8008 +       reverse_proxy /_synapse/client/* 192.168.1.102:8008 +} +``` + +Il existe [une documentation](https://matrix-org.github.io/synapse/latest/reverse_proxy.html) sur la configuration de divers reverse-proxy pour Matrix, avec ou sans délégation. +Pour tester si la configuration est correcte, on peut utiliser [le testeur de fédération](https://federationtester.matrix.org) et voir si le trafic de fédération est OK. + +## Créer des comptes + +Pour créer des comptes, il est possible de passer via une interface client Matrix standard tel que [Element](https://app.element.io/#/register). + +Pour les serveurs qui n'acceptent pas la création de comptes, il est possible de le faire via le conteneur Synapse via la commande suivante : + +`docker exec -it synapse register_new_matrix_user http://localhost:8008 -c +/data/homeserver.yaml` -* Matrix c'est le top du top. Les autres alternatives font pâles figure. Tant sur l'aspect technique que éthique. +Synapse demandera quelques questions puis créera les comptes. -* Quasiment personne ne connais et n'utilise ça dans le monde pro et encore moins ailleur. +Personnellement, j'ai opté pour un compte admin dont je ne me sers uniquement pour l'administration du serveur ainsi qu'un utilisateur standard pour mon usage quotidien. -* La configuration d'un serveur TURN supplémentaire est nécessaire si vous souhaiter profiter de la Visio-conférence. +À ce stade, nous avons une instance Matrix fonctionnelle, avec un compte. Nous pouvons donc nous pencher sur l'ajout de Bridges ! + +# Ajouter un Bridge + +> Le déploiement d'un Bridge peut être long et fastidieux, par conséquent, nous ne verrons que pour le Bridge Mautrix-signald + +## Docker Compose 2: Electric Boogaloo + +```yaml +version: "3.7" + +services: + mautrix-signal: + container_name: mautrix-signal + image: dock.mau.dev/mautrix/signal + restart: unless-stopped + volumes: + - mautrix-signal-data:/data + - mautrix-signal-signald:/signald + depends_on: + - signald + networks: + - default + - bridgenet # Communication w/ Synapse + + signald: + container_name: signald + image: docker.io/signald/signald + restart: unless-stopped + volumes: + - mautrix-signal-signald:/signald + + mau-signal-db: + container_name: mau-signal-db + image: postgres:13-alpine + restart: unless-stopped + environment: + POSTGRES_USER: mautrixsignal + POSTGRES_DATABASE: mautrixsignal + POSTGRES_PASSWORD: changeme! + volumes: + - mautrix-signal-db:/var/lib/postgresql/data + +volumes: + mautrix-signal-data: {} + mautrix-signal-signald: {} + mautrix-signal-db: {} + +networks: + bridgenet: + name: synapse_bridges + external: true +``` + +Ici, pas énormément de choses à dire, on lance la DB, puis signald (en vérifiant que cela ne crash pas). Ensuite, on lance le Bridge qui crée un fichier de configuration. + +Il faudra remplir le fichier avec les informations comme : + +* L'adresse du serveur Synapse +* L'adresse du conteneur du bridge (Pour que Synapse relaie nos messages) +* Désactiver le manhole +* Régler les permissions +* Connecter la base postgres + +## Enregistrer une AppService dans Synapse + +Une fois cela fait, on relance le conteneur. Si tout est correct, celui-ci va générer un fichier `appservice.yaml` + +Il faudra le copier dans le volume du conteneur synapse et le référencer comme suit dans la configuration `homeserver.yaml` + +```yaml +# NB: Il est pas necessaire de faire de sous-dossiers appservices mais c'est +plus sympa. +app_service_config_files: +    - /data/appservices/mau-signal.yaml +    - /data/appservices/mau-instagram.yaml +    - /data/appservices/mau-slack.yaml +``` -* La configuration des Bridges est très chonophage et instable. +Une fois ceci fait, relancer Synapse ainsi que le Bridge. Si tout fonctionne, le doit être joignable via message privé à l'adresse **@signalbot:homeserver.tld** +## Se connecter à Signal +Pour se connecter à Signal, il faudra ouvrir un canal avec le bot, puis choisir une des deux options possibles : -C'est tout pour moi 😉 je vous relais maintenant les notes de mon amis [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui souhaite également partager son expérience avec Matrix. -Sans aller aussi loin que moi sur la quantité de Bridge testés, il a cependant abordé le Double Puppetting, très interessant pour profiter pleinement des Bridges. +`**link** [device name] - Link the bridge as a secondary device` +`**register**  - Sign into Signal as the primary device` +Malheureusement, j'ai eu une erreur quand j'ai voulu "register"" donc je suis passé via "link", le bot fournit un QR Code permettant de s'authentifier. + +Une fois l'authentification effectuée, vous recevrez tout un tas d'invitations de messages privés et de canaux. + +Ceux-ci sont gérés via le bot et font le lien avec toutes les conversations présentes sur Signal. + +Par exemple, ici, un canal avec des amis : + +![Matrix Exemple 4](../../assets/matrix_exemple_4.png) + +> À noter, le bot est présent dans chaque room afin de faire le lien. Il est possible de lui parler directement via `!signal` ou via MP. +> En gris, tous les utilisateurs ayant le tag `(signal)` sont des "**ghosts**" contrôlés par le bot. + +> Il est bon de noter aussi que nous ne sommes pas administrateur du canal mais que les admins du groupe Signal le sont par extension sur ce canal Matrix. + +## Le Double Puppetting + +Sur la capture d'écran précédente, nous avons pu voir que je possède deux comptes, un compte Matrix et un compte Signal. + +On pourrait dire que l'on s'en fiche dans certains cas mais cela pose problème lorsque les gens veulent me mentionner. + +Exemple ici : + +![Matrix Exemple 5](../../assets/matrix_exemple_5.png) + +Ici on me mentionne pour un événement. Problème, le Bridge mentionne mon compte Signal et non moi-même. +Pour palier à cela, les développeurs ont ajouté une fonction permettant de remplacer le compte de la plateforme en question (Ici, *Lucas(Signal)* ) par mon propre compte Matrix. + +Pour ce faire, il est possible de passer par deux manières de faire : + +* A la main via des "access tokens (à coup de `curl` puis via des MP aux différents bots de Bridge). + +* Automatiquement via [ce plugin](https://github.com/devture/matrix-synapse-shared-secret-auth). Pour des raisons évidentes, nous allons passer par le plugin. + +### Installer le module Shared Secret Authenticator + +Pour installer le module, il faudra cloner depuis le dépôt GIT, le fichier python, puis l'ajouter aux volumes du conteneur synapse. + +Cloner le dépôt : `git clone https://github.com/devture/matrix-synapse-shared-secret-auth` + +Puis l'ajouter en tant que volume : + +```yaml +[...] + volumes: + - synapse-data:/data + - /opt/matrix-synapse-shared-secret-auth/shared_secret_authenticator.py:/usr/local/lib/python3.11/site-packages/shared_secret_authenticator.py +``` + +Générer un secret : `pwgen -s 128 1` + +Puis, dans le fichier `homeserver.yaml`, saisir les informations recensées dans le GIT croisées avec [la documentation de Mautrix](https://docs.mau.fi/bridges/general/double-puppeting.html). + +```yaml +modules: + - module: shared_secret_authenticator.SharedSecretAuthProvider + config: + shared_secret: "YOUR_SHARED_SECRET_GOES_HERE" + m_login_password_support_enabled: true + com_devture_shared_secret_auth_support_enabled: false +``` + +Une fois cela fait et le conteneur Synapse relancé, dans la configuration du Bridge Signal, remplacer : + +```yaml +double_puppet_server_map: + example.com: https://example.com + login_shared_secret_map: + example.com: +``` + +```yaml +double_puppet_server_map: + kestrel.ovh: http://synapse:8008 + login_shared_secret_map: + kestrel.ovh: YOUR_SHARED_SECRET_GOES_HERE +``` +Ceci fait, relancer le conteneur Signal. +Si cela fonctionne correctement, le compte en trop doit disparaître et les mentions envers ce compte sont maintenant redirigés vers l'utilisateur Matrix correct. ---- +![Matrix Exemple 6](../../assets/matrix_exemple_6.png) diff --git a/content/assets/matrix_exemple_1.png b/content/assets/matrix_exemple_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2d915616f5371613dce8a93cd71ca9d3f5404e GIT binary patch literal 8481 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 H5ikA+8Ywys literal 0 HcmV?d00001 diff --git a/content/assets/matrix_exemple_2.png b/content/assets/matrix_exemple_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ab204fc051ce5543b8c15d9c5393a666a38710df GIT binary patch literal 9480 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 Vi$ZU#0ADx}DBe|-E4+gU_#da--OT_1 literal 0 HcmV?d00001 diff --git a/content/assets/matrix_exemple_3.png b/content/assets/matrix_exemple_3.png new file mode 100644 index 0000000000000000000000000000000000000000..53e56c475c5db4562d7cd0bbc4dba4336fac3724 GIT binary patch literal 20455 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�TUyW-n6hCiOdI8)$ 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 IRkRBGUnCc^&;S4c literal 0 HcmV?d00001 diff --git a/content/assets/matrix_exemple_5.png b/content/assets/matrix_exemple_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b142a7ee5f51e4a97b4f6d367a03335e31efee GIT binary patch literal 18182 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 PZ5TXV{an^LB{Ts5>uCmj literal 0 HcmV?d00001 diff --git a/content/assets/matrix_exemple_6.png b/content/assets/matrix_exemple_6.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5f76b14a4a8c34805d71a30434c99a4092f89a GIT binary patch literal 24244 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