Instal·lació de MQTT a un servidor remot basat en Debian 9

De Wiki d'en Jordi Binefa
Dreceres ràpides: navegació, cerca

Les passes descrites a aquesta pàgina les he fet a un servidor virtual privat (VPS) d'OVH (al primer d'agost de 2018 el preu és 3€ al mes, més IVA, per un ordinador VPS al núvol amb 1 vCore, 2,4 GHz, 2 GB RAM i 20 GB SSD). De les opcions de sistema operatiu he escollit un Debian 9 (Stretch).

Instal·lació

Fent una connexió remota mitjançant SSH accedim al terminal remot.

No farem servir el paquet mosquitto que ve per defecte als dipòsits de Debian, farem servir els dipòsits propis de mosquitto.org

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
wget http://repo.mosquitto.org/debian/mosquitto-stretch.list
apt-get update
apt-get install mosquitto mosquitto-clients
service mosquitto status

Configuració per defecte

root@remot:/etc/mosquitto# cat /etc/mosquitto/mosquitto.conf 
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d

A l'arxiu de bitàcola /var/log/mosquitto/mosquitto.log es pot veure tot el que està passant al servei mosquitto.

1533141525: mosquitto version 1.5 starting
1533141525: Config loaded from /etc/mosquitto/mosquitto.conf.
1533141525: Opening ipv4 listen socket on port 1883.
1533141525: Opening ipv6 listen socket on port 1883.
1533141550: New connection from 37.133.159.153 on port 1883.
1533141550: New client connected from 37.133.159.153 as mosqsub|2034-popotamo (c1, k60).
1533141567: New connection from 2.152.69.183 on port 1883.
1533141567: New client connected from 2.152.69.163 as joMateix (c1, k60).
1533141567: Client joMateix disconnected.
1533141721: New connection from 2.152.69.163 on port 1883.

Aquest registre recull que dos ordinadors des de dues IP públiques diferents s'han connectat mitjançant el protocol MQTT. Un com a subscriptor i un altre com a publicador.

L'ordinador popotamo connectat a Internet amb IP pública 37.133.159.153 s'ha subscrit a tots els subtemes que pengen del tema /house/

popotamo@popotamo:~$ mosquitto_sub -h broker.electronics.cat -t /house/#
Hola
Hola i A10

L'ordinador debianJB connectat a Internet amb IP pública 2.152.69.163 ha publicat dos missatges al subtema /house/casa/meva identificant-se com a joMateix

jordi@debianJB:~$ mosquitto_pub -h broker.electronics.cat -t /house/casa/meva -m "Hola" -i joMateix
jordi@debianJB:~$ mosquitto_pub -h broker.electronics.cat -t /house/casa/meva -m "Hola i A10" -i joMateix

Configuració restrictiva per nom d'usuari i contrasenya

Genereu un arxiu anomenat contrasenyes.txt a partir de mosquitto_passwd

root@remot:/etc/mosquitto# mosquitto_passwd -c contrasenyes.txt ecat
Password: 
Reenter password: 
root@remot:/etc/mosquitto# mosquitto_passwd -b contrasenyes.txt etpc elClot

A l'arxiu contrasenyes.txt veiem els usuaris i llurs contrasenyes encriptades:

root@remot:/etc/mosquitto# cat contrasenyes.txt 
ecat:$6$e917HQ4WGHXwk9pZ$4TYPRC6QtAXK+6Kb6BYEtnGCuszjLaQf17euPDeLDOfpunKqES55q2wXCkSeeEoXbSLVPI7WQ==
etpc:$6$tl8PZf0GRfsMrnNf$5IrJJh9H85bi85F28VXP5Sr0n8sgFqXLEB97V6mnEDGVe4q/JCwixBNFcPlc7k27jH4j4tuUw==

Editeu l'arxiu de configuració /etc/mosquitto/mosquitto.conf

root@remot:/etc/mosquitto# nano /etc/mosquitto/mosquitto.conf 

i afegiu les dues darreres línies (una per a no acceptar usuaris anònims i l'altre per a indicar la ruta absoluta de l'arxiu de contrasenyes):

root@remot:/etc/mosquitto# cat /etc/mosquitto/mosquitto.conf 
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
# Two new lines
allow_anonymous false
password_file /etc/mosquitto/contrasenyes.txt

Si voleu fer una connexió MQTTS (MQTT segura): Configuració de MQTTS a un servidor remot basat en Debian 9