Come installare e configurare il broker MQTT “Mosquitto” in Docker con autenticazione su Raspberry Pi
In un precedente articolo ho già descritto come eseguire l’installazione del broker MQTT all’interno di un container Docker su Raspberry Pi, ma quest’oggi andremo ad integrare l’obbligo di autenticazione da parte dei client che si dovranno connettere al server MQTT.
Il primo passaggio (oltre ad avere già installato l’applicativo Docker), sarà quello di creare una cartella sul nostro Raspberry Pi che a sua volta conterrà i file di configurazione per il nostro broker MQTT.
Per cui, colleghiamoci in SSH sul nostro dispositivo ed eseguiamo i seguenti comandi:
sudo mkdir docker-mosquitto
sudo mkdir docker-mosquitto/configsudo mkdir docker-mosquitto/data
sudo mkdir docker-mosquitto/log
Create queste cartelle, andiamo a generare un primo file di configurazione attraverso l’editor di test nano, con il seguente comando:
sudo nano docker-mosquitto/config/mosquitto.conf
Nella schermata che apparirà, andiamo ad inserire la seguente configurazione:
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
Dopo di che chiudiamo il file e salviamo (control/command+x, yes, invio).
A questo punto, passiamo alla creazione del nostro container MQTT con il seguente comando:
sudo docker run --init -d -it -p 1883:1883 --name mosquitto --restart=always -v ~/docker-mosquitto/config:/mosquitto/config -v ~/docker-mosquitto/log:/mosquitto/log -v ~/docker-mosquitto/data/:/mosquitto/data eclipse-mosquitto
Al termine dell’esecuzione, Mosquitto sarà in esecuzione come container Docker.
Giunti a questo punto, per impostare l’autenticazione al nostro broker MQTT, è necessario creare una o più utenze alle quali concedere l’accesso al broker. Al momento l’accesso è libero e anonimo – e ovviamente può essere una vulnerabilità.
Accediamo al container col comando:
sudo docker exec -it mosquitto sh
ed eseguire il seguente comando per la creazione del file utenze/password:
mosquitto_passwd -c /mosquitto/config/mosquitto.passwd mqtt_user
verrà dunque chiesta, due volte, la password per l’utente indicato (nell’esempio mqtt_user) e di seguito uscire con il seguente comando:
exit
Sarà stato così definito un primo utente/password, il quale potrà essere successivamente utilizzato per configurare i propri client MQTT sulla propria rete.
Ora dobbiamo indicare a Mosquitto di utilizzare l’elenco username/password appena creato. Per farlo andiamo a modificare il file definito all’inizio col comando:
sudo nano docker-mosquitto/config/mosquitto.conf
al quale andremo ad aggiungere, in coda, la seguente configurazione:
password_file /mosquitto/config/mosquitto.passwd
allow_anonymous false
Uscire salvando (control/command+x, yes, invio).
Ed infine riavviare il container per rendere le modifiche operative:
sudo docker container restart mosquitto
Buon Divertimento!