Fiche mosquitto mqtt

1. Introduction

MQTT (Message Queuing Telemetry Transport) est un protocole léger de messagerie très utilisé dans les projets IoT, les systèmes embarqués et les infrastructures de supervision. Dans un BTS CIEL ou SIO, tu rencontres souvent MQTT dans des projets de capteurs, de domotique, de supervision industrielle ou d’échanges machine à machine.

Mosquitto est l’un des brokers MQTT les plus populaires sous Linux. Il fonctionne très bien sur Debian et Ubuntu, consomme peu de ressources et s’intègre facilement avec Node-RED, Home Assistant, Grafana ou des scripts Python.

Dans cette fiche, tu vas apprendre à :

  • Installer Mosquitto sur Debian ou Ubuntu
  • Comprendre le fonctionnement de MQTT
  • Configurer un broker MQTT
  • Utiliser les commandes principales
  • Sécuriser les échanges avec TLS
  • Gérer les utilisateurs et les ACL
  • Configurer le pare-feu
  • Lire les logs et dépanner une installation

Cette fiche respecte les contraintes pédagogiques demandées par Breizh Sec Ops.

2. Sommaire

  1. Introduction
  2. Sommaire
  3. Présentation de MQTT et Mosquitto
  4. Installation de Mosquitto
  5. Fonctionnement des topics MQTT
  6. Arborescence et fichiers importants
  7. Synthèse Markdown pour ta fiche bristol
  8. Configuration complète de Mosquitto
  9. Gestion des utilisateurs et mots de passe
  10. Sécurisation TLS
  11. Pare-feu et ports réseau
  12. Commandes essentielles MQTT
  13. Exemples concrets
  14. Logs et dépannage
  15. Bonnes pratiques de sécurité
  16. Erreurs fréquentes
  17. Pour aller plus loin
  18. Liens utiles et documentation officielle
  19. Propositions de TP

3. Présentation de MQTT et Mosquitto

MQTT repose sur un modèle Publisher / Subscriber.

Les équipements ne communiquent pas directement entre eux. Ils passent par un broker MQTT.

Exemple :

  • Un capteur publie une température
  • Le broker Mosquitto reçoit le message
  • Les clients abonnés récupèrent l’information

Architecture :

Capteur ---> Broker MQTT ---> Client abonné

Les notions importantes :

ÉlémentDescription
BrokerServeur MQTT
PublisherClient qui envoie
SubscriberClient qui reçoit
TopicCanal logique
QoSNiveau de garantie
RetainDernier message conservé
TLSChiffrement des échanges

4. Installation de Mosquitto

Sous Debian ou Ubuntu :

sudo apt update
sudo apt install mosquitto mosquitto-clients -y

Explications :

  • apt update : met à jour les index de paquets
  • apt install : installe le broker et les clients MQTT
  • mosquitto-clients : ajoute mosquitto_pub et mosquitto_sub

Vérifie le service :

sudo systemctl status mosquitto

Démarrer automatiquement :

sudo systemctl enable mosquitto

Redémarrer après modification :

sudo systemctl restart mosquitto

5. Fonctionnement des topics MQTT

Un topic représente un canal logique.

Exemple :

maison/salon/temperature

Hiérarchie :

maison/
├── salon/
│ ├── temperature
│ └── humidite
└── cuisine/
└── temperature

Wildcards :

SymboleRôle
+Un niveau
#Tous les niveaux

Exemples :

maison/+/temperature
maison/#

6. Arborescence et fichiers importants

Fichiers principaux

FichierRôle
/etc/mosquitto/mosquitto.confConfiguration principale
/etc/mosquitto/conf.d/Configurations supplémentaires
/etc/mosquitto/passwdBase utilisateurs
/etc/mosquitto/aclACL MQTT
/var/log/mosquitto/mosquitto.logLogs
/etc/ssl/certs/Certificats CA
/etc/mosquitto/certs/Certificats Mosquitto

Arborescence typique

/etc/mosquitto/
├── mosquitto.conf
├── conf.d/
├── passwd
├── acl
└── certs/
├── ca.crt
├── server.crt
└── server.key

7. Synthèse Markdown pour ta fiche bristol

# Mosquitto MQTT

## Installation
sudo apt update
sudo apt install mosquitto mosquitto-clients -y

## Service
sudo systemctl status mosquitto
sudo systemctl restart mosquitto

## Publication
mosquitto_pub -h localhost -t test/topic -m "Bonjour"

## Abonnement
mosquitto_sub -h localhost -t test/topic

## Utilisateur MQTT
sudo mosquitto_passwd -c /etc/mosquitto/passwd admin

## TLS
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

## Logs
journalctl -u mosquitto
tail -f /var/log/mosquitto/mosquitto.log

## Pare-feu
sudo ufw allow 1883/tcp
sudo ufw allow 8883/tcp

8. Configuration complète de Mosquitto

Voici un exemple complet de configuration sécurisée.

Fichier :

/etc/mosquitto/conf.d/secure.conf

Configuration :

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information

allow_anonymous false
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl

listener 1883
protocol mqtt

listener 8883
protocol mqtt

cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

tls_version tlsv1.2

max_connections 100

message_size_limit 0

persistence true

autosave_interval 1800

Explications importantes :

ParamètreRôle
allow_anonymous falseinterdit l’accès anonyme
password_fileactive les comptes MQTT
acl_filecontrôle les accès
listener 1883port MQTT classique
listener 8883port MQTT TLS
cafilecertificat CA
tls_versionimpose TLS 1.2
max_connectionslimite clients
persistenceconserve les messages retain

Tester la configuration :

mosquitto -c /etc/mosquitto/mosquitto.conf -v

9. Gestion des utilisateurs et mots de passe

Créer un utilisateur :

sudo mosquitto_passwd -c /etc/mosquitto/passwd admin

Options :

OptionRôle
-ccrée le fichier
sans -cajoute un utilisateur

Ajouter un autre utilisateur :

sudo mosquitto_passwd /etc/mosquitto/passwd capteur1

ACL MQTT

Fichier :

/etc/mosquitto/acl

Exemple :

user capteur1
topic write maison/capteur1/#

user supervision
topic read maison/#

Ici :

  • capteur1 peut publier
  • supervision peut lire

10. Sécurisation TLS

Génération des certificats

Créer un répertoire :

sudo mkdir -p /etc/mosquitto/certs
cd /etc/mosquitto/certs

Créer une autorité CA :

openssl req -new -x509 -days 3650 -extensions v3_ca -keyout ca.key -out ca.crt

Créer la clé serveur :

openssl genrsa -out server.key 2048

Créer la CSR :

openssl req -out server.csr -key server.key -new

Signer le certificat :

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

Sécuriser les permissions :

sudo chown mosquitto:mosquitto /etc/mosquitto/certs/*
sudo chmod 600 /etc/mosquitto/certs/server.key

11. Pare-feu et ports réseau

Ports MQTT

PortUsage
1883MQTT non chiffré
8883MQTT TLS
9001MQTT WebSocket

Configuration UFW

MQTT local :

sudo ufw allow from 192.168.1.0/24 to any port 1883 proto tcp

MQTT TLS :

sudo ufw allow 8883/tcp

Refuser accès externe :

sudo ufw deny 1883/tcp

Vérifier :

sudo ufw status verbose

12. Commandes essentielles MQTT

Publication simple

mosquitto_pub -h localhost -t test/topic -m "Bonjour MQTT"

Options :

OptionRôle
-hhôte
-ttopic
-mmessage

Abonnement

mosquitto_sub -h localhost -t test/topic

Authentification

mosquitto_pub -h localhost -t test/topic -m "test" -u admin -P motdepasse

TLS

mosquitto_pub \
-h mqtt.example.local \
-p 8883 \
-t test/topic \
-m "TLS OK" \
--cafile ca.crt \
-u admin \
-P motdepasse

QoS

mosquitto_pub -t test -m "QoS1" -q 1
QoSDescription
0au plus une fois
1au moins une fois
2exactement une fois

13. Exemples concrets

Capteur de température

Publication :

mosquitto_pub -t maison/salon/temperature -m "22.4"

Lecture :

mosquitto_sub -t maison/salon/temperature

Node-RED

Node-RED peut :

  • publier
  • recevoir des messages MQTT
  • stocker des données
  • déclencher des alertes

Python

Installation :

pip install paho-mqtt

Script simple :

import paho.mqtt.publish as publish

publish.single(
"maison/test",
"Bonjour",
hostname="localhost"
)

14. Logs et dépannage

Logs systemd

journalctl -u mosquitto

Temps réel :

journalctl -u mosquitto -f

Log Mosquitto

tail -f /var/log/mosquitto/mosquitto.log

Ce que tu peux voir dans les logs

MessageSignification
Client connectedconnexion client
Client disconnecteddéconnexion
Invalid passwordmauvais mot de passe
TLS errorerreur certificat
ACL deniedaccès refusé

Vérifier l’écoute réseau

sudo ss -tulpn | grep mosquitto

Alternative :

sudo netstat -tulpn | grep mosquitto

Tester le port

nc -zv 127.0.0.1 1883

15. Bonnes pratiques de sécurité

Ne laisse jamais MQTT ouvert anonymement sur Internet.

Toujours :

  • désactiver allow_anonymous
  • utiliser TLS
  • limiter les ACL
  • filtrer avec UFW
  • utiliser des mots de passe robustes
  • surveiller les logs
  • limiter les topics accessibles
  • isoler les objets IoT dans un VLAN

Évite :

  • MQTT sans chiffrement sur WAN
  • les certificats auto-signés publics
  • les accès root
  • les wildcard ACL trop larges

16. Erreurs fréquentes

Permission denied sur certificats

Cause :

server.key inaccessible

Solution :

sudo chown mosquitto:mosquitto /etc/mosquitto/certs/*
sudo chmod 600 server.key

Connection Refused

Causes possibles :

  • pare-feu
  • mauvais mot de passe
  • listener absent
  • service arrêté

Adresse déjà utilisée

Erreur :

Address already in use

Recherche :

sudo ss -tulpn | grep 1883

17. Pour aller plus loin

Tu peux ensuite étudier :

  • MQTT over WebSocket
  • clustering MQTT
  • EMQX
  • HiveMQ
  • intégration Grafana
  • supervision Prometheus
  • MQTT avec Docker
  • haute disponibilité MQTT

18. Liens vers : les sites officiels, les mooc ou autres contenus pédagogiques qui font références, etc

Documentation officielle Mosquitto

https://mosquitto.org/man/mosquitto-conf-5.html

Référence officielle complète des paramètres de configuration Mosquitto.

Documentation Debian Mosquitto

https://wiki.debian.org/mqtt

Très utile pour comprendre l’intégration Debian et les services MQTT.

Documentation Ubuntu UFW

https://ubuntu.com/server/docs/security-firewall

Explique la configuration correcte du pare-feu UFW.

OpenClassrooms — Découvrez les réseaux TCP/IP

https://openclassrooms.com/fr/courses/6391971-administrez-vos-systemes-et-reseaux

Permet de revoir les bases réseau indispensables avant MQTT.

OpenClassrooms — Sécurisez vos applications

https://openclassrooms.com/fr/courses/4668056-securisez-vos-applications-web-avec-owasp

Très utile pour comprendre TLS, les certificats et les échanges sécurisés.

RFC MQTT

https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html

Spécification officielle MQTT v5.

19. Propositions de TP

TP 1 — Installation MQTT

Objectif :

  • installer Mosquitto
  • publier et recevoir un message

Travail demandé :

  • installer le broker
  • publier un message
  • observer les logs

TP 2 — Sécurisation TLS

Objectif :

  • chiffrer les échanges MQTT

Travail demandé :

  • générer une CA
  • créer un certificat serveur
  • activer TLS
  • tester avec mosquitto_pub

TP 3 — ACL MQTT

Objectif :

  • limiter les accès utilisateurs

Travail demandé :

  • créer plusieurs comptes
  • créer des ACL différentes
  • vérifier les restrictions

TP 4 — Intégration Node-RED

Objectif :

  • superviser des données MQTT

Travail demandé :

  • connecter Node-RED
  • afficher des températures
  • générer une alerte

TP 5 — Supervision et logs

Objectif :

  • analyser le fonctionnement du broker

Travail demandé :

  • provoquer des erreurs d’authentification
  • analyser les logs
  • identifier les connexions clientes
Retour en haut