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
- Introduction
- Sommaire
- Présentation de MQTT et Mosquitto
- Installation de Mosquitto
- Fonctionnement des topics MQTT
- Arborescence et fichiers importants
- Synthèse Markdown pour ta fiche bristol
- Configuration complète de Mosquitto
- Gestion des utilisateurs et mots de passe
- Sécurisation TLS
- Pare-feu et ports réseau
- Commandes essentielles MQTT
- Exemples concrets
- Logs et dépannage
- Bonnes pratiques de sécurité
- Erreurs fréquentes
- Pour aller plus loin
- Liens utiles et documentation officielle
- 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ément | Description |
|---|---|
| Broker | Serveur MQTT |
| Publisher | Client qui envoie |
| Subscriber | Client qui reçoit |
| Topic | Canal logique |
| QoS | Niveau de garantie |
| Retain | Dernier message conservé |
| TLS | Chiffrement 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 paquetsapt install: installe le broker et les clients MQTTmosquitto-clients: ajoutemosquitto_pubetmosquitto_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 :
| Symbole | Rôle |
|---|---|
+ | Un niveau |
# | Tous les niveaux |
Exemples :
maison/+/temperature
maison/#
6. Arborescence et fichiers importants
Fichiers principaux
| Fichier | Rôle |
|---|---|
/etc/mosquitto/mosquitto.conf | Configuration principale |
/etc/mosquitto/conf.d/ | Configurations supplémentaires |
/etc/mosquitto/passwd | Base utilisateurs |
/etc/mosquitto/acl | ACL MQTT |
/var/log/mosquitto/mosquitto.log | Logs |
/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ètre | Rôle |
|---|---|
allow_anonymous false | interdit l’accès anonyme |
password_file | active les comptes MQTT |
acl_file | contrôle les accès |
listener 1883 | port MQTT classique |
listener 8883 | port MQTT TLS |
cafile | certificat CA |
tls_version | impose TLS 1.2 |
max_connections | limite clients |
persistence | conserve 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 :
| Option | Rôle |
|---|---|
-c | crée le fichier |
sans -c | ajoute 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 :
capteur1peut publiersupervisionpeut 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
| Port | Usage |
|---|---|
| 1883 | MQTT non chiffré |
| 8883 | MQTT TLS |
| 9001 | MQTT 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 :
| Option | Rôle |
|---|---|
-h | hôte |
-t | topic |
-m | message |
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
| QoS | Description |
|---|---|
| 0 | au plus une fois |
| 1 | au moins une fois |
| 2 | exactement 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
| Message | Signification |
|---|---|
| Client connected | connexion client |
| Client disconnected | déconnexion |
| Invalid password | mauvais mot de passe |
| TLS error | erreur certificat |
| ACL denied | accè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
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
