Auto-héberger un broker MQTT pour Meshtastic

Delurk - 27/05/2024 23:56 - Meshtastic

Pour garder le contrôle sur ses données publiées par un nœud Meshtastic, il est essentiel d'être vigilant avec le paramétrage de MQTT. Par défaut, le broker défini est "mqtt.meshtastic.org", qui est le domaine officiel de Meshtastic. L'avantage, c'est qu'il s'agit d'un broker légitime proposé par les responsables du projet Meshtastic. L'inconvénient, c'est qu'il est utilisé par de très nombreux nœuds Meshtastic, ce qui expose toutes vos données aux yeux de tous à l'échelle mondiale. À moins que vous ne limitiez très précisément la diffusion de vos données de télémétrie, dont la localisation est un élément, elles seront accessibles à n'importe qui via un client MQTT, qui est un moyen parmi tant d'autres de consulter vos données.

En plus d'être limité à un seul scénario : rejoindre des canaux publics connectés à Internet et diffuser vos données en public, il est impossible de profiter de tous les avantages du protocole MQTT dans cette configuration. Vous pouvez donc soit héberger votre propre broker MQTT, soit rejoindre un broker MQTT communautaire qui limite son périmètre d'usage aux utilisateurs connus grâce à une stratégie de sécurité maîtrisée par ses administrateurs.

Logo Mosquitto

Le broker Eclipse Mosquitto

Eclipse Mosquitto est un broker open source (sous licence EPL/EDL) qui implémente les versions 5.0, 3.1.1, et 3.1 du protocole MQTT. Il est léger et peut être hébergé sur une grande diversité de plateformes : serveurs bare-metal et virtualisés, nano-ordinateurs, instances cloud computing, etc. Le projet Mosquitto fournit également une bibliothèque C pour implémenter des clients MQTT, ainsi que les très populaires clients MQTT en ligne de commande mosquitto_pub et mosquitto_sub. Mosquitto fait partie de la Fondation Eclipse et le développement est piloté par Cedalo.

Mon broker MQTT privé

J'ai choisi d'auto-héberger mon propre broker MQTT sur une instance Alpine de mon infrastructure LXD. Avec quelques notions GNU/Linux, la mise en œuvre est très simple. La configuration de mon broker MQTT m'a permis de définir très précisément son rôle. Voici une liste non exhaustive des fonctionnalités que m'offre ma configuration :

Mise en œuvre

Pour installer le broker MQTT sur GNU/Linux, utilisez un gestionnaire de paquets pour installer le paquet mosquitto disponible à travers les sources des distributions Alpine et Ubuntu, entre autres. Une fois installé, les exemples des fichiers de configurations sont localisés dans "/etc/mosquitto/". L'idéal est de créer vos fichiers de configuration dans le répertoire "/etc/mosquitto/conf.d/". Je vous propose ci-dessous un exemple de configuration qui reprend la liste des fonctionnalités détaillées précédemment.

Configuration globale avec le fichier "configuration.conf"

# Écoute sur le port 1883
listener 1883

# Active l'authentification et les règles de contrôle d'accès (ACL)
per_listener_settings true

# Active la persistance des données
persistence true

# Nom du fichier de persistance
persistence_file mosquitto.db

# Emplacement du fichier de persistance
persistence_location /var/lib/mosquitto

# Destination des journaux
log_dest stderr

# Emplacement des journaux
log_dest file /var/log/mosquitto/mosquitto.log

# Type de journaux : erreurs
log_type error

# Type de journaux : avertissements
log_type warning

# Type de journaux : notifications
log_type notice

# Type de journaux : informations
log_type information

# Type de journaux : abonnements
# log_type subscribe 

# Type de journaux : désabonnements
# log_type unsubscribe

# Format de l'horodatage dans les journaux
log_timestamp_format %Y-%m-%dT%H:%M:%S

# Interdit les connexions anonymes
allow_anonymous false

# Fichier contenant les mots de passe des utilisateurs
password_file /etc/mosquitto/conf.d/pw

# Fichier contenant les ACL
acl_file /etc/mosquitto/conf.d/acl

### Broker MQTT local - Début ###

# Nom de connexion
connection ExNomMonBroker

# Adresse du broker local
address localhost:1883

# Mot de passe pour la connexion local (local_password)
password ExMotDePasse

# Nom d'utilisateur pour la connexion local (local_username)
username userlocal

## Topics du broker local

# Topic France (remap du root)
topic # both 0 msh/MonBrokerLocal/2/e/France/ msh/EU_868/2/e/France/

### Broker MQTT local - Fin ###

### Broker MQTT Meshtastic Officiel - Début ###

# Nom de connexion
connection BrokerMeshtasticOfficiel

# Adresse du broker distant
address mqtt.meshtastic.org:1883

# Mot de passe de l'utilisateur distant (à récupérer dans les paramètres de votre nœud)
remote_password MotDePasseMeshtasticOfficiel

# Nom d'utilisateur pour le broker distant (à récupérer dans les paramètres de votre nœud)
remote_username usermeshtasticofficiel

# Désactive le mode privé (try_private)
try_private false

## Topics du broker distants

# Topic de statut (publication sur distant)
topic msh/MonBrokerLocal/2/stat/# out 0 "" ""

# Topic pour les cartes (publication sur distant)
topic msh/MonBrokerLocal/2/map/# out 0 "" ""

# Topic France (abonnement et publication sur distant)
topic msh/EU_868/2/e/France/# both 0 "" ""

### Broker MQTT Meshtastic Officiel - Fin ###

Gestion des contrôles d'accès avec le fichier "acl"

Ce fichier comporte l'ensemble des règles qui s'appliquent aux abonnés de votre broker local. Il ne faut surtout pas négliger les droits accordés en procédant pas à pas pour limiter les accès au strict nécessaire sinon on perd tout l'intérêt de déployer un broker local.

user userlocal
topic readwrite #

user usermeshtasticofficiel
topic read msh/MonBrokerLocal/2/stat/#
topic read msh/MonBrokerLocal/2/map/#
topic readwrite msh/MonBrokerLocal/2/e/France/#

user noeud868
topic write msh/MonBrokerLocal/2/stat/#
topic write msh/MonBrokerLocal/2/map/#
topic readwrite msh/MonBrokerLocal/2/e/France/#

user noeud433
topic write msh/MonBrokerLocal/2/stat/#
topic write msh/MonBrokerLocal/2/map/#
topic readwrite msh/MonBrokerLocal/2/e/France/#

⚠️ Après un redémarrage, il faut supprimer le fichier de persistance des données pour appliquer à nouveau les ACL.

Gestion des utilisateurs avec le fichier "pw"

Ce fichier doit être manipulé avec la commande mosquitto_passwd pour que le mot de passe soit chiffré.

Créer le fichier des utilisateurs et initialiser le hash : mosquitto_passwd -c /etc/mosquitto/conf.d/pw noeud868 Ajouter un utilisateur avec un mot de passe spécifié : mosquitto_passwd -b /etc/mosquitto/conf.d/pw noeud433 "MotDePasseComplexe" Supprimer un utilisateur : mosquitto_passwd -D /etc/mosquitto/conf.d/pw noeud868

Où acheter une radio pour Meshtastic ?

🛒 Voici trois radios abordables et prêtes à l'emploi parmi les plus populaires :

Liens utiles


Commentaires
Vous devez être connecté pour laisser un commentaire.