Cómo instalar el gestor de mensajes MQTT de Mosquitto en Debian 11
Eclipse Mosquitto es una implementación libre y de código abierto del protocolo MQTT. Mosquitto implementa las versiones 3.1.0, 3.1.1 y 5.0 de MQTT. Mosquitto es un broker de mensajes ligero, adecuado para múltiples tipos de despliegue y usos.
Mosquitto es un corredor de mensajes que utiliza el modelo publicar/suscribir para entregar mensajes. Utiliza poco ancho de banda y proporciona facilidad de implementación, lo que significa que es adecuado para despliegues de dispositivos pequeños e IoT (Internet de las Cosas), dispositivos móviles, ordenadores embebidos y microcontroladores.
En este tutorial, recorreremos el proceso de instalación y configuración de Mosquitto MQTT Message Broker en un servidor Debian 11, configurando la autenticación, asegurando Mosquitto mediante certificados SSL/TLS, y también habilitando WebSockets en Mosquitto.
Requisitos previos
Para empezar, debes tener los siguientes requisitos para completar este tutorial:
- Un servidor Debian 11 – Esta demo utiliza un servidor Debian con el nombre de host ‘mosquitto-server’.
- Un usuario no root con privilegios de root/administrador.
Instalar el servidor y el cliente de Mosquitto
Mosquitto es un gestor de mensajes MQTT de código abierto que está disponible y puede instalarse en múltiples plataformas, como Windows, Linux, BSD y macOS. Para la distribución Debian Linux, Mosquitto está disponible en el repositorio por defecto de Debian, lo que te permite instalarlo fácilmente a través del APT.
En este paso, repasarás el proceso de instalación del servidor y el cliente Mosquitto en el servidor Debian. También repasarás el uso básico de la línea de comandos de Mosquitto (mosquitto_sub y mosquitto_pub) para verificar la instalación del servidor Mosquitto.
En primer lugar, actualiza y refresca el índice de paquetes de Debian mediante el siguiente comando apt.
sudo apt update
Busca el paquete «mosquitto» mediante el siguiente comando apt.
sudo apt search mosquitto
Deberías ver algunos de los paquetes de Mosquitto que están disponibles por defecto en el repositorio de Debian, entre los que se incluyen la aplicación servidor y el cliente de Mosquitto.
Ahora ejecuta el siguiente comando apt para instalar los paquetes Mosquitto. Cuando se te solicite, introduce y para confirmar y pulsa ENTER para continuar.
sudo apt install mosquitto mosquitto-clients
Una vez instalado Mosquitto, verifica el servicio Mosquitto mediante el siguiente comando systemctl.
sudo systemctl is-enabled mosquitto sudo systemctl status mosquitto
Verás que el servicio Mosquitto está habilitado y se ejecutará automáticamente al arrancar. Y el estado actual del servicio Mosquitto es en ejecución.
Ahora que el servidor Mosquitto está en ejecución, a continuación repasarás la verificación de Mosquitto mediante la línea de comandos cliente ‘mosquitto_sub‘ y‘mosquitto-pub‘.
De forma sencilla, el ‘mosquitto_sub‘ es la herramienta de línea de comandos para recibir mensajes (Suscriptor) del‘mosquitto_pub‘ (Publicador).
Ejecuta el siguiente comando ‘mosqitto_sub‘ para recibir algunos mensajes sobre el tema‘prueba‘.
sudo mosquitto_sub -h localhost -t test
A continuación, abre una nueva sesión de terminal de tu servidor y ejecuta el siguiente comando ‘mosquitto_pub’ para enviar algunos mensajes al tema‘test’
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2" sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2 - Publisher" sudo mosquitto_pub -h localhost -t test -m "Hello"
Verás los mensajes publicados a través de ‘mosquitto_pub‘ en el receptor‘mosquitto_sub‘, lo que significa que la instalación del servidor y el cliente Mosquitto se han realizado correctamente.
Configurar la autenticación en Mosquitto
La instalación por defecto de Mosquitto viene sin autenticación. Para asegurar el despliegue (especialmente en producción), debes habilitar la autenticación en el servidor Mosquitto. Puedes crear y definir un usuario en Mosquitto y asegurar Mosquitto Sub y Pub mediante autenticación de nombre de usuario/contraseña.
Ejecuta el siguiente comando para crear un nuevo usuario y contraseña de Mosquitto. Esta demostración utiliza el usuario «alice» y la contraseña se generará y se guardará en el archivo «/etc/mosquitto/.passwd«.
sudo mosquitto_passwd -c /etc/mosquitto/.passwd alice
Introduce la contraseña del usuario Mosquitto ‘alice ‘ y repite la contraseña.
Una vez creados el nombre de usuario y la contraseña, crea una nueva configuración de Mosquitto‘/etc/mosquitto/conf.d/auth.conf ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/mosquitto/conf.d/auth.conf
Añade la siguiente configuración al archivo. Esto ejecutará Mosquitto en el puerto«1883«, desactivará el acceso anónimo y definirá el archivo de contraseñas en «/etc/mosquitto/.passwd».
listener 1883 allow_anonymous false password_file /etc/mosquitto/.passwd
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, reinicia el servicio Mosquitto para aplicar los nuevos cambios. Ahora el servidor Mosquitto debería estar funcionando con la autenticación activada.
sudo systemctl restart mosquitto
Para verificar la autenticación del servidor Mosquitto, puedes utilizar los comandos‘mosquitto_sub‘ y‘mosquitto_pub‘.
Si no has proporcionado el nombre de usuario/contraseña durante el proceso pub/sub, se te rechazará y se denegará la conexión. Pero, si has proporcionado el nombre de usuario/contraseña para la autenticación y tienes las credenciales correctas, podrás enviar y recibir mensajes a través del Suscriptor y Publicador Mosquitto.
Ejecuta el siguiente comando para verificar el Pub y el Sub en Mosquitto sin autenticación.
# session - Mosquitto Subscriber sudo mosquitto_sub -h localhost -t test # session - Mosquitto Publisher sudo mosquitto_pub -h localhost -t test -m "Hello again from terminal 2"
Verás que sin autenticación, ambas conexiones al servidor Mosquitto serán rechazadas por no estar autorizadas, y no podrás enviar ni recibir mensajes.
A continuación, ejecuta el siguiente comando para verificar el Pub y Sub de Mosquitto con el usuario y la contraseña.
# session - Mosquitto Subscriber sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
# session – Mosquitto Publisher
sudo mosquitto_pub -h localhost -t «test» -m «Hello – enabled auth» -u «alice» -P «p4ssw0rd»
Cuando las credenciales de Mosquitto sean correctas, estarás conectado tanto al Suscriptor como al Publicador de Mosquitto, y podrás enviar y recibir mensajes a través de la línea de comandos de Mosquitto.
Con el servidor Mosquitto en funcionamiento y la autenticación activada, ahora deberías tener un corredor de mensajes seguro. Pero, para obtener más seguridad, también puedes añadir la autorización mediante certificados SSL/TLS en tus conexiones y transferencias de datos locales de Mosquitto.
Asegurar Mosquitto con certificados SSL/TLS
Aunque el servidor de Mosquitto está asegurado mediante autenticación, todavía hay algunos pasos que debes dar para asegurar la implementación de Mosquitto. Esto incluye la implementación de certificados SSL/TLS que cifrarán la transferencia de datos entre el servidor Mosquitto y las aplicaciones.
Antes de empezar, asegúrate de que tienes certificados SSL/TLS generados para tu entorno local.
Para empezar, ejecuta el siguiente comando openssl para generar el certificado dhparam. Esto generará el certificado DHPARAM en ‘/etc/mosquitto/certs/dhparam.pem’.
sudo openssl dhparam -out /etc/mosquitto/certs/dhparam.pem 2048
Ahora cambia la propiedad del directorio certs de Mosquitto al usuario ‘mosquitto’ mediante el comando chmod que aparece a continuación.
sudo chown -R mosquitto: /etc/mosquitto/certs
A continuación, crea una nueva configuración adicional ‘/etc/mosquitto/conf.d/ssl.conf ‘ utilizando el siguiente comando del editor nano. Con esto, habilitarás una conexión segura en el servidor Mosquitto mediante certificados SSL/TLS.
sudo nano /etc/mosquitto/conf.d/ssl.conf
Añade la siguiente configuración al archivo. Esto ejecutará Mosquitto en el puerto‘8883‘ con TLS habilitado encima. Por tanto, asegúrate de cambiar la ruta de los certificados SSL/TLS.
listener 8883 certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem dhparamfile /etc/mosquitto/certs/dhparam.pem
Guarda el archivo y sal del editor cuando hayas terminado.
Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio Mosquitto y aplicar los nuevos cambios. Ahora el servidor Mosquitto se ejecutará con TLS seguro activado.
sudo systemctl restart mosquitto
Con el SSL/TLS activado, a continuación verificarás la configuración enviando mensajes al Suscriptor de Mosquitte a través de una conexión segura.
Ejecuta el siguiente comando ‘mosquitto_sub’ para abrir el Suscriptor Mosquitte en tu sesión de terminal actual.
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
A continuación, abre una nueva sesión, conéctate al servidor y ejecuta el siguiente comando para enviar mensajes al servidor Mosquitto. Con esto, te conectarás al servidor Mosquitto‘msqt.hwdomain.io‘ a través de una conexión SSL/TLS que se ejecuta en el puerto‘8883‘.
sudo mosquitto_pub -h msqt.hwdomain.io -t test -m "hello again - with SSL enabled" -p 8883 --capath /etc/ssl/certs/ -u "alice" -P "p4ssw0rd"
Ahora deberías recibir mensajes en el intérprete de comandos del Suscriptor de Mosquitto. El Productor Mosquitto envía mensajes al Suscriptor Mosquitto a través de una conexión segura SSL/TLS que se ejecuta en el puerto 8883.
Activar WebSockets en Mosquitto
Llegados a este punto, habrás instalado el servidor Mosquitto y asegurado la instalación habilitando la autenticación usuario/contraseña y la conexión segura SSL/TLS. A continuación, aprenderás a activar WebSockets sobre MQTT en el servidor Mosquitto.
WebSocket es un protocolo de comunicación con estado que proporciona un canal full-duplex persistente entre el servidor y el cliente reutilizando la misma conexión que se abrió al principio de la comunicación (durante el handshake de apertura).
Para empezar, crea una nueva configuración‘/etc/mosquitto/conf.d/websockets.conf ‘ utilizando el siguiente comando del editor nano.
sudo nano /etc/mosquitto/conf.d/websockets.conf
Añade la siguiente configuración al archivo. Esto habilitará el protocolo WebSockets y lo asegurará mediante certificados SSL/TLS. Los WebSockets se ejecutarán en el puerto 8083.
listener 8083 protocol websockets certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem
Guarda el archivo y sal del editor cuando hayas terminado.
A continuación, ejecuta el siguiente comando systemctl para reiniciar el servicio Mosquitto y aplicar los nuevos cambios. El servidor Mosquitto se ejecutará ahora con WebSockets habilitados sobre una conexión segura SSL/TLS.
sudo systemctl restart mosquitto
Para verificar la configuración de WebSockets, puedes conectarte al Mosquitto mediante una herramienta de terceros como «MQTT Explorer», que está disponible para los principales sistemas operativos, como Linux, Windows y macOS.
A continuación se muestra el Explorador MQTT con conexión WebSockets.
Una vez conectado, deberías ver el siguiente panel de control.
Conclusión
En esta guía has aprendido a instalar el gestor de mensajes MQTT Mosquitto en un servidor Debian 11. También has aprendido a proteger el servidor Mosquitto habilitando la autenticación mediante nombre de usuario/contraseña y protegiendo la transferencia de datos y la conexión de Mosquitto mediante certificados SSL/TLS. Además, has habilitado el protocolo WebSockets en el servidor Mosquitto, que te permite establecer conexiones entre el Suscriptor y el Productor de forma asíncrona.
A partir de aquí, ya puedes aprovechar la instalación de Mosquitto creando un Cluster Mosquitto de Alta Disponibilidad o configurando el panel de administración de Mosquitto a través del Centro de Gestión de Cedalo.