Cómo instalar el servidor MQTT Mosquitto en Ubuntu 22.04

Mosquitto es una implementación de servidor gratuita, de código abierto y ligera del protocolo MQTT. Está diseñado para todos los dispositivos, desde ordenadores monoplaca de baja potencia hasta servidores completos. MQTT funciona sobre el protocolo TCP/IP y utiliza tu red doméstica de Internet existente para enviar mensajes a tus dispositivos IoT y responder a esos mensajes. Está escrito en lenguaje C, lo que lo hace rápido y más eficiente que otros brokers MQTT.

Este post te mostrará cómo instalar el servidor Mosquitto en Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Una contraseña de root configurada en tu servidor.

Instalar las dependencias necesarias

Antes de empezar, se recomienda actualizar y actualizar todos los paquetes del sistema a la versión actualizada. Puedes actualizarlos ejecutando el siguiente comando:

apt update -y
apt upgrade -y

Tras actualizar todos los paquetes, ejecuta el siguiente comando para instalar los demás paquetes necesarios:

apt-get install curl gnupg2 wget git apt-transport-https ca-certificates -y

Una vez instalados todos los paquetes necesarios, puedes pasar al siguiente paso.

Instalar el Servidor Mosquitto

Por defecto, el paquete Mosquitto no está disponible en el repositorio por defecto de Ubuntu 22.04. Así que tendrás que añadir el repositorio oficial de Mosquitto al APT. Puedes añadirlo con el siguiente comando:

add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y

Una vez añadido el repositorio a APT, puedes instalarlo con el siguiente comando:

apt install mosquitto mosquitto-clients -y

Una vez completada la instalación, puedes verificar el estado de Mosquitto con el siguiente comando:

systemctl status mosquitto

Deberías ver la siguiente salida:

? mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-12-06 04:50:33 UTC; 8s ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
    Process: 5491 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5492 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5493 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5494 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
   Main PID: 5495 (mosquitto)
      Tasks: 1 (limit: 2242)
     Memory: 1.3M
        CPU: 23ms
     CGroup: /system.slice/mosquitto.service
             ??5495 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Dec 06 04:50:32 ubuntu2204 systemd[1]: Starting Mosquitto MQTT Broker...
Dec 06 04:50:33 ubuntu2204 systemd[1]: Started Mosquitto MQTT Broker.

Crear contraseña administrativa MQTT

Por razones de seguridad, se recomienda configurar la autenticación por contraseña para MQTT.

Configuremos un usuario y una contraseña de administrador con el siguiente comando:

mosquitto_passwd -c /etc/mosquitto/passwd hitesh

Establece una contraseña como se muestra a continuación:

Password: 
Reenter password: 

A continuación, edita el archivo de configuración de MQTT y define el puerto y el archivo de contraseña.

nano /etc/mosquitto/conf.d/default.conf

Añade las siguientes líneas:

listener 1883
password_file /etc/mosquitto/passwd

Guarda y cierra el archivo y reinicia el servicio Mosquitto para aplicar los cambios.

systemctl restart mosquitto

Cómo utilizar MQTT para enviar y recibir mensajes

Tendrás que utilizar el cliente Mosquitto para conectarte al servidor Mosquitto y luego enviar y recibir mensajes sobre diferentes temas.

Antes de enviar y recibir mensajes, tendrás que suscribirte a un tema. Puedes utilizar uno de los siguientes temas en aplicaciones domóticas.

  • casa/luces/sala de estar
  • home/luces/cocina
  • home/luces/dormitorio principal
  • home/luces/dormitorio_niños

Vamos a ejecutar el siguiente comando para suscribirnos al tema home/light/kids_bedroom.

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

A continuación, abre la nueva interfaz de terminal y publica un mensaje en el tema home/lights/kids_bedroom con el siguiente comando.

mosquitto_pub -u hitesh -P password -m "ON" -t "home/lights/kids_bedroom"

En el primer terminal, obtendrás ON payload:

ON

Ahora, ve al segundo terminal y envía el mensaje OFF sobre el mismo tema.

mosquitto_pub -u hitesh -P password -m "OFF" -t "home/lights/kids_bedroom"

Deberías ver el siguiente mensaje en el primer terminal:

ON
OFF

Cuando hayas terminado, puedes pasar al siguiente paso.

Asegurar Mosquitto con Let’s Encrypt SSL

Para asegurar Mosquitto con SSL, necesitarás instalar el paquete cliente Certbot en tu servidor.

Primero, instala el gestor de paquetes Snap utilizando el siguiente comando:

apt install snapd

A continuación, actualiza el paquete Snap utilizando el siguiente comando:

snap install core 
snap refresh core

A continuación, instala el paquete Certbot con el siguiente comando:

snap install --classic certbot

A continuación, crea un enlace simbólico del binario de Certbot en la ubicación del sistema.

ln -s /snap/bin/certbot /usr/bin/certbot

A continuación, ejecuta el siguiente comando para generar un certificado SSL.

certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d mosquitto.linuxbuz.com

Deberías ver la siguiente salida:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mosquitto.linuxbuz.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem
This certificate expires on 2023-03-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Puedes ver todos los archivos de certificado generados con el siguiente comando:

ls /etc/letsencrypt/live/mosquitto.linuxbuz.com/

Obtendrás la siguiente salida:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

A continuación, genera el certificado Diffie-Hellman utilizando el siguiente comando:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar MQTT para utilizar Let’s Encrypt SSL

En primer lugar, copia todos los certificados generados en el directorio Mosquitto utilizando el siguiente comando:

cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem /etc/mosquitto/certs/server.pem
cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem /etc/mosquitto/certs/server.key

A continuación, establece la propiedad adecuada al certificado Mosquitto.

chown -R mosquitto: /etc/mosquitto/certs

A continuación, edita el archivo de configuración de Mosquitto y define el SSL Let’s Encrypt.

nano /etc/mosquitto/conf.d/default.conf

Añade las siguientes líneas:

listener 8883
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

Guarda y cierra el archivo y reinicia el servicio Mosquitto para aplicar los cambios.

systemctl restart mosquitto

A continuación, verifica la conexión de Mosquitto utilizando el siguiente comando:

mosquitto_pub -h mosquitto.linuxbuz.com -t "home/lights/kids_bedroom" -m "hello" -p 8883 --capath /etc/ssl/certs/ -u hitesh -P password

Una vez hecho esto, puedes proceder a probar la conexión de Mosquitto a través del navegador web.

Configurar los Websockets de Mosquitto

A continuación, tendrás que configurar Websockets para utilizar el protocolo MQTT desde los navegadores. Puedes habilitarlo editando el archivo de configuración por defecto de Mosquitto:

nano /etc/mosquitto/conf.d/default.conf

Añade las siguientes líneas:

listener 8083
protocol websockets
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

Guarda y cierra el archivo y reinicia el servicio Mosquitto para aplicar los cambios.

systemctl restart mosquitto

A continuación, abre tu interfaz de terminal y ejecuta el siguiente comando:

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

Ahora, abre tu navegador web y utiliza el cliente MQTT basado en navegador para probar la funcionalidad WebSockets. Deberías ver la siguiente pantalla:

Proporciona el host de tu servidor Mosquitto, el puerto, el nombre de usuario, la contraseña y haz clic en el botón Conectar. Deberías ver la siguiente pantalla:

Ahora, escribe cualquier tema, mensaje y haz clic en el botón Publicar.

A continuación, vuelve a la interfaz del terminal. Deberías ver tu mensaje publicado en la siguiente salida:

Hi

Conclusión

En este post, hemos explicado cómo instalar el servidor Mosquitto y asegurarlo con Let’s Encrypt SSL en Ubuntu 22.04. También probamos Mosquitto mediante un cliente basado en navegador. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...