Introduction
En 2026, les architectures IoT exigent des brokers MQTT ultra-sécurisés et scalables. Mosquitto, le broker open-source le plus léger et performant, domine avec son support natif des protocoles MQTT 5.0, persistence persistante et bridges inter-brokers. Ce tutoriel expert vous guide pas à pas pour déployer un Mosquitto production-ready : installation sur Linux, configuration avancée avec authentification par mot de passe, ACL granulaires, chiffrement TLS 1.3, persistence et Docker Compose pour l'orchestration.
Pourquoi c'est crucial ? Dans un monde zero-trust, un broker mal sécurisé expose vos devices à des attaques MITM ou DoS. Nous couvrons des configs complètes, testables immédiatement, avec des pièges experts évités. À la fin, votre broker gérera 100k+ connexions QoS2 sans faillir, prêt pour Kubernetes ou edge computing. (142 mots)
Prérequis
- Serveur Ubuntu 24.04 LTS ou Debian 12 (4 Go RAM min. pour tests load).
- Connaissances avancées MQTT (QoS, topics wildcards, retained messages).
- OpenSSL 3+ installé (
sudo apt install openssl). - Docker 27+ et Docker Compose 2.29+ pour le déploiement conteneurisé.
- Outils :
mosquitto_pub/sub(installés avec le broker),jqpour JSON parsing.
Installation de Mosquitto
#!/bin/bash
sudo apt update
sudo apt install -y software-properties-common
dist="$(lsb_release -cs)"
wget -O - https://repo.eclipse.org/content/repositories/dev_mosquitto/com/eclipse-mosquitto/repo/${dist}-main/public.key | sudo tee /etc/apt/trusted.gpg.d/mosquitto-${dist}.asc > /dev/null
sudo add-apt-repository -y "deb https://repo.eclipse.org/content/repositories/dev_mosquitto/com/eclipse-mosquitto/repo/${dist}-main/ ${dist} main"
sudo apt update
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl stop mosquitto
sudo systemctl disable mosquittoCe script installe la dernière version dev de Mosquitto (2.0.18+ en 2026) via le repo officiel Eclipse pour MQTT 5.0 complet. On désactive le service systemd pour une config manuelle. Évitez les paquets distro obsolètes qui manquent de features comme shared subscriptions.
Configuration basique et listener
Maintenant, testons le broker nu. Copiez le code d'installation et exécutez-le. Vérifiez avec mosquitto_sub -h localhost -t test/topic dans un terminal, et publiez via mosquitto_pub -h localhost -t test/topic -m 'Hello MQTT'. Le broker écoute par défaut sur 1883 (non sécurisé).
Configuration Mosquitto basique
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
log_type all
log_timestamp true
log_timestamp_format %Y-%m-%dT%T%z
max_queued_messages 10000
max_queued_bytes 1048576
allow_anonymous false
listener 1883 localhost
listener 8883
protocol mqtt
max_connections 100000Cette config active la persistence (messages survivent aux redémarrages), logging détaillé avec timestamps ISO, et deux listeners : 1883 local-only pour tests, 8883 pour MQTT standard. Limitez les queues pour éviter OOM sous load. allow_anonymous false force l'auth dès le départ.
Lancement et test basique
Placez la config dans /etc/mosquitto/mosquitto.conf, créez les dirs sudo mkdir -p /var/lib/mosquitto /var/log/mosquitto, sudo chown -R mosquitto:mosquitto /var/{lib,log}/mosquitto. Lancez : sudo -u mosquitto mosquitto -c /etc/mosquitto/mosquitto.conf. Testez avec pub/sub – erreur auth attendue (bonne !).
Génération du fichier de mots de passe
#!/bin/bash
sudo mkdir -p /etc/mosquitto/auth
sudo touch /etc/mosquitto/auth/passwordfile
sudo chown mosquitto:mosquitto /etc/mosquitto/auth/passwordfile
sudo -u mosquitto mosquitto_passwd -c /etc/mosquitto/auth/passwordfile admin 'SecurePass2026!'
sudo -u mosquitto mosquitto_passwd /etc/mosquitto/auth/passwordfile iotdevice 'DeviceToken123'
sudo chmod 600 /etc/mosquitto/auth/passwordfileGénère un fichier hashed avec mosquitto_passwd (SHA512 PBKDF2). Ajoute deux users : admin (gestion) et iotdevice (publish/sub). Permissions strictes 600 pour sécurité. Ne stockez jamais plaintext en prod ; rotatez régulièrement.
Intégration auth par password
Mettez à jour mosquitto.conf avec password_file /etc/mosquitto/auth/passwordfile. Redémarrez : pkill mosquitto ; sudo -u mosquitto mosquitto -c /etc/mosquitto/mosquitto.conf. Test : mosquitto_pub -h localhost -p 1883 -u iotdevice -P 'DeviceToken123' -t sensors/temp -m '23.5'. Succès ! Sans creds, connexion refusée.
Configuration ACL avancée
# ACL pour admin : full access
user admin
pattern readwrite %/
# IoT devices : publish sur sensors/, sub sur $SYS/ et actuators/
user iotdevice
pattern write sensors/+
pattern read $SYS/broker/#
p topic read actuators/#
# Groupe devices : wildcards
pattern write home/+/#
pattern read home/%u/#
# Deny all else
pattern readwrite $SYS
ACL hiérarchique : admin tout accède via %/. iotdevice publie sur sensors/+ (un niveau), lit sysinfo et actuators. %u injecte username pour per-user topics. Testez avec mosquitto_sub -u iotdevice -P 'DeviceToken123' -t 'sensors/invalid' -v – denied ! Ajoutez acl_file /etc/mosquitto/auth/aclfile dans conf.
Application des ACL et tests
Ajoutez acl_file à mosquitto.conf, chown sudo chown mosquitto:mosquitto /etc/mosquitto/auth/aclfile, redémarrez. Tests experts :
- Admin pub/sub partout : OK.
- Iotdevice pub
sensors/temp: OK ; pubhome/bad: denied.
/var/log/mosquitto/mosquitto.log pour Access Refused.Génération certificats TLS auto-signés
#!/bin/bash
sudo mkdir -p /etc/mosquitto/certs
cd /etc/mosquitto/certs
sudo openssl req -newkey rsa:4096 -days 365 -nodes -x509 -keyout mosquitto.key -out mosquitto.crt -subj '/C=FR/ST=Paris/L=Paris/O=Learni/OU=IoT/CN=localhost'
sudo openssl dhparam -out dhparam.pem 4096
sudo chown -R mosquitto:mosquitto /etc/mosquitto/certs
sudo chmod 600 /etc/mosquitto/certs/{mosquitto.key,dhparam.pem}
sudo chmod 644 /etc/mosquitto/certs/mosquitto.crtGénère un CA auto-signé RSA 4096bits (TLS 1.3 compatible), DH params pour Perfect Forward Secrecy. En prod, utilisez Let's Encrypt ou EJBCA. Permissions critiques : clé privée 600. Vérifiez : openssl x509 -in mosquitto.crt -text -noout.
Activation TLS sur listener 8883
Ajoutez à mosquitto.conf :
```
listener 8883
protocol mqtt
cafile /etc/mosquitto/certs/mosquitto.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key
dhparam /etc/mosquitto/certs/dhparam.pem
require_certificate false
use_identity_as_username truemosquitto_pub -h localhost -p 8883 --capath /etc/ssl/certs -u iotdevice -P 'DeviceToken123' -t sensors/temp -m '24.0'
Redémarrez. Test TLS : . Vérifiez logs pour TLS-PSK` ou erreurs cipher.
Configuration bridge vers broker distant
connection bridge-to-aws
address aws-iot-endpoint:8883
bridge_hostname mqtt-aws
bridge_username AWS_IOT_USER
bridge_password AWS_IOT_TOKEN
tls_version tlsv1.3
bridge_cafile /etc/mosquitto/certs/aws-ca.crt
bridge_certfile /etc/mosquitto/certs/client.crt
bridge_keyfile /etc/mosquitto/certs/client.key
remote_username mosq-aws
remote_password bridgepass
topic sensors/# out 1 bridge-mqtt-aws/ sensors/ {{"qos":1,"retain":true}}
topic actuators/# in 2 bridge-mqtt-aws/ actuators/Bridge out/in : forward sensors/# vers AWS IoT (QoS1, retain), sub actuators QoS2. TLS mutual pour sécurité. Incluez via include_dir /etc/mosquitto/conf.d avec sudo ln -s /etc/mosquitto/bridge.conf /etc/mosquitto/conf.d/. Scalez pour clustering.
Déploiement Docker production
Pour HA, utilisez Docker. Générez secrets via docker secret create mosquitto_pw /etc/mosquitto/auth/passwordfile.
Docker Compose pour Mosquitto HA
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto:2.0
restart: always
ports:
- '1883:8883'
- '8883:8883'
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro
- ./auth:/mosquitto/config/auth:ro
- ./certs:/mosquitto/config/certs:ro
- mosquitto_data:/mosquitto/data
- mosquitto_log:/mosquitto/log
environment:
- TZ=Europe/Paris
networks:
- iot-net
volumes:
mosquitto_data:
mosquitto_log:
networks:
iot-net:
driver: bridgeCompose prod : volumes persistants, read-only configs, TZ pour logs. Scalez avec replicas en Swarm. Lancez docker compose up -d. Monitorez avec Prometheus via plugin Mosquitto.
Bonnes pratiques
- Rotatez creds : Script cron mensuel pour
mosquitto_passwd+ ACL update. - Monitoring : Activez
$SYS/broker/clients/active+ exporter Prometheus. - Load testing : Utilisez
mqtt-benchmarkpour 10k conn/s. - Backup : Rsync
/var/lib/mosquitto+mosquitto_db_dump. - Zero-trust : Mutual TLS + PSK pour devices low-power.
Erreurs courantes à éviter
- Oublier
sudo chown mosquittosur configs : crash avec 'Permission denied'. - ACL sans
userprefix : apply global, expose tout. - TLS sans DH params : fallback insecure ciphers (log: 'no shared cipher').
- Pas de
max_connections: DoS via exhaustion (défaut 1000 trop bas).
Pour aller plus loin
Plongez dans MQTT 5.0 shared subs avec nos formations Learni IoT. Ressources : Docs Mosquitto, MQTT Explorer pour debug, repo GitHub Eclipse pour plugins C.