Saltar al contenido

Cómo instalar y asegurar el mosquitto MQTT mensajería Broker en Ubuntu 18.04

marzo 4, 2020

 

Introducción

MQTT es un protocolo de mensajería de máquina a máquina, diseñada para proporcionar ligera de publicación / suscripción a “Internet de las cosas” dispositivos. Se utiliza comúnmente para las flotas de geo-seguimiento de vehículos, domótica, redes de sensores ambientales, y la recopilación de datos escala de servicio público.

mosquitto es un servidor MQTT populares (o agente , en MQTT jerga) que tiene un gran apoyo de la comunidad y es fácil de instalar y configurar.

En este tutorial, vamos a instalar y configurar mosquitto nuestro corredor para usar SSL para proteger nuestras comunicaciones MQTT protegidos con contraseña.

Requisitos previos

Antes de comenzar este tutorial, necesitará:

  • Un servidor de Ubuntu 18.04 con un no root, el usuario sudo habilitado y firewall básico establecido, como se detalla en este Ubuntu 18.04 configuración del servidor tutorial.
  • Un nombre de dominio apuntando a su servidor, según cómo configurar un nombre de host con digitalocean. Este tutorial se utilizará a lo largo mqtt.example.com. Cifrar el certificado SSL del
  • Un Let auto-renovable para su uso con su dominio y mosquitto, generado utilizando la herramienta Certbot. Usted puede aprender cómo hacer esto en cómo utilizar Certbot modo independiente para recuperar certificados SSL Cifrar Vayamos en Ubuntu 18.04. Puede añadir mosquitto reinicio systemctl como renew_hook en el paso 4. Asegúrese de utilizar el mismo dominio configurado en el paso de pre-requisito anterior.

Paso 1 – Instalación de mosquitto

Ubuntu 18.04 tiene una versión bastante reciente de mosquitto en su repositorio de software por defecto, por lo que podemos instalarlo desde allí.

En primer lugar, iniciar sesión con su usuario no root y actualizar la lista de paquetes utilizando apt update:

sudo apt update

  • sudo update apt

Ahora, instalar mosquitto usando apt instalar:

sudo apt install mosquitto mosquitto-clients

  • sudo apt instalar mosquitto mosquitto-clientes

Por defecto, Ubuntu iniciar el servicio mosquitto después de la instalación. prueba Vamos a la configuración por defecto. Vamos a utilizar uno de los clientes mosquitto acabamos de instalar para suscribirse a un tema en nuestro corredor.

Temas son etiquetas que publica mensajes hacia y suscrito. Están dispuestos como una jerarquía, lo que podría tener sensores / fuera / temp y sensores / exterior / humedad, por ejemplo. Cómo organizar los temas depende de usted y sus necesidades. A lo largo de este tutorial vamos a utilizar un tema simple prueba para probar nuestros cambios de configuración.

Acceder a su servidor por segunda vez, lo que tiene dos terminales de lado a lado. En la nueva terminal, el uso mosquitto_sub para suscribirse al tema de prueba:

mosquitto_sub -h localhost -t test

  • mosquitto_sub -h localhost -t prueba

-h se utiliza para especificar el nombre de host del servidor MQTT, y -t es el nombre del tema. Vas a ver ninguna salida después de oprimir la tecla Enter porque mosquitto_sub está esperando mensajes en llegar. posterior cambio a su otro terminal y publicar un mensaje:

mosquitto_pub -h localhost -t test -m "hello world"

  • mosquitto_pub -h localhost -t -m prueba “Hola mundo”

Las opciones para mosquitto_pub son los mismos que mosquitto_sub, aunque esta vez usamos la -m adicional opción para especificar nuestro mensaje. Pulsa enter, y debería ver mundo hola pop-up en el otro terminal. Usted ha enviado su primer mensaje MQTT!

Introduzca CTRL + C en el segundo terminal para salir de mosquitto_sub, pero mantener la conexión con el servidor abierto. Vamos a utilizar de nuevo para otra prueba en el Paso 5.

A continuación, la obtendremos nuestra instalación mediante la autenticación basada en contraseñas.

Paso 2 – Configurar Configuración de contraseñas MQTT

Vamos a mosquitto utilizan contraseñas. Mosquitto incluye una utilidad para generar un archivo especial llamado contraseña mosquitto_passwd. Este comando le pedirá que introduzca una contraseña para el nombre de usuario especificado, y colocar los resultados en / etc / mosquitto / passwd.

sudo mosquitto_passwd -c /etc/mosquitto/passwd sammy

  • sudo mosquitto_passwd -c / etc / mosquitto / passwd Sammy

Ahora vamos a abrir un nuevo archivo de configuración para mosquitto y decimos que para utilizar este archivo de contraseñas para requerir inicios de sesión para todas las conexiones: sudo

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

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

Esto debería abrir un archivo vacío. Pegar en la siguiente:

allow_anonymous false
password_file /etc/mosquitto/passwd

Asegúrese de dejar un salto de línea final al final del archivo.

falsa allow_anonymous desactivará todas las conexiones no autenticados, y la línea password_file dice mosquitto dónde buscar la información de usuario y contraseña. Guardar y salir del archivo.

Ahora tenemos que reiniciar mosquitto y probar nuestros cambios.

sudo systemctl restart mosquitto

  • sudo systemctl reinicio mosquitto

intenta publicar un mensaje sin una contraseña:

mosquitto_pub -h localhost -t "test" -m "hello world"

  • mosquitto_pub -h localhost -t “prueba” -m “hola mundo”

El mensaje debe ser rechazada:

OutputConnection Refused: not authorised.
Error: The connection was refused.

antes de tratar de nuevo con la contraseña, cambiar a la segunda ventana de terminal nuevo, y suscribirse al tema ‘prueba’, utilizando el nombre de usuario y contraseña en esta ocasión:

mosquitto_sub -h localhost -t test -u "sammy" -P "password"

  • mosquitto_sub -h localhost -u -t prueba de “Sammy” -P “contraseña”

Se debe conectar y sentarse, a la espera de mensajes. Puede dejar este terminal abierto y conectado durante el resto del tutorial, como nosotros enviará periódicamente mensajes de prueba.

Ahora publicar un mensaje con su otro terminal, utilizando de nuevo el nombre de usuario y contraseña:

mosquitto_pub -h localhost -t "test" -m "hello world" -u "sammy" -P "password"

  • mosquitto_pub -h localhost -t “prueba” -m “hola mundo” -u “Sammy” -P “contraseña”

el mensaje debe pasar por que en el paso 1. Hemos añadido con éxito a la protección de contraseña mosquitto. contraseñas Desafortunadamente, estamos enviando sin cifrar en internet. Vamos a arreglar que el próximo mediante la adición de cifrado SSL para mosquitto.

Paso 3 – Configuración de SSL MQTT

Para habilitar el cifrado SSL, necesitamos decirle mosquitto donde se almacenan los certificados Cifrar de nuestra Let. Abre el archivo de configuración que empezamos con anterioridad:

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

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

pegar en el siguiente texto al final del archivo, dejando a las dos líneas que ya ha añadido:

. . .
listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem

una vez más, asegúrese de dejar un salto de línea final al final del archivo.

estamos añadiendo dos bloques separados oyente a la config. La primera, que escucha localhost 1883, actualiza el oyente MQTT defecto en el puerto 1883, que es lo que hemos estado conectando a la medida. 1883 es ​​el puerto estándar MQTT sin cifrar. La parte localhost de la línea instruye mosquitto sólo se unen este puerto a la interfaz localhost, así que no es accesible desde el exterior. Las solicitudes externas habrían sido bloqueados por nuestro servidor de seguridad de todos modos, pero es bueno para ser explícita.

oyente 8883 establece un oyente cifrada en el puerto 8883. Este es el puerto estándar para MQTT + SSL, a menudo referido como MQTTS. Las tres líneas siguientes, certfile, cafile y archivo de claves, todos apuntan a mosquitto Cifrar del Let apropiada archivos para establecer las conexiones cifradas.

Guardar y salir del archivo, a continuación, reinicie mosquitto para actualizar la configuración:

sudo systemctl restart mosquitto

  • sudo systemctl reinicio mosquitto

actualización del servidor de seguridad para permitir las conexiones al puerto 8883.

sudo ufw allow 8883

  • sudo permiten UFW 8883

OutputRule added
Rule added (v6)

Ahora Probamos de nuevo utilizando mosquitto_pub, con algunas opciones diferentes para SSL:

mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p 8883 --capath /etc/ssl/certs/ -u "sammy" -P "password"

  • mosquitto_pub -h mqtt.example.com -t -m prueba “hola de nuevo” -p 8883 –capath / etc / ssl / certs / -u “Sammy” -P “contraseña”

Tenga en cuenta que estamos usando el nombre de host completo en lugar de localhost. Debido a que nuestro certificado SSL se emite por mqtt.example.com, si se intenta una conexión segura a localhost obtendremos un error que indica el nombre de host no coincide con el nombre de host del certificado (a pesar de que ambos apuntan al mismo servidor mosquitto).

–capath / etc / ssl / certs / habilita SSL para mosquitto_pub, y le dice dónde buscar los certificados raíz. Estos por lo general se instalan de su sistema operativo, por lo que el camino es diferente para Mac OS, Windows, etc. mosquitto_pub utiliza el certificado raíz para verificar que el certificado del servidor mosquitto fue debidamente firmada por la autoridad del certificado de cifrado del Let. Es importante señalar que mosquitto_pub y mosquitto_sub no intentará una conexión SSL sin esta opción (o la opción –cafile similar), incluso si se conecta al puerto seguro estándar de 8883.

Si todo va bien con la prueba , ya veremos hola de nuevo aparece en el otro terminal mosquitto_sub. Esto significa que su servidor está totalmente establecido! Si desea extender el protocolo MQTT de trabajo con websockets, se puede seguir el paso final.

Paso 4 – Configuración MQTT Más de websockets (Opcional)

Para hablar MQTT usando JavaScript desde dentro de los navegadores web, el protocolo fue adaptado para trabajar sobre websockets estándar. Si no se necesita esta funcionalidad, puede omitir este paso.

tenemos que añadir una más bloques oyente de nuestro config mosquitto:

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

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

Al final del archivo, agregue lo siguiente:

. . .
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem

una vez más, asegúrese de dejar un salto de línea final al final del archivo.

Esto es sobre todo el mismo que el bloque anterior, excepto para el número de puerto y la línea websockets de protocolo. No hay puerto oficial normalizado para MQTT sobre websockets, pero 8083 es ​​el más común.

Guardar y salir del archivo, a continuación, reinicie mosquitto.

sudo systemctl restart mosquitto

  • sudo systemctl reinicio mosquitto

Ahora, puerto abierto hasta 8083 en el firewall.

sudo ufw allow 8083

  • sudo permiten UFW 8083

Para probar esta funcionalidad, vamos a utilizar una pública, MQTT cliente basado en navegador. Hay algunos por ahí, pero el Eclipse Opas JavaScript cliente es simple y fácil de usar. Abra el cliente de la OPS en su navegador. Verá el siguiente:

Rellene la información de conexión de la siguiente manera:

  • anfitrión debe ser el dominio de su servidor mosquitto, mqtt.example.com.
  • puerto debe ser 8083.
  • ClientId se puede dejar en el valor predeterminado, js-utilidad-DI1m6.
  • Path se puede dejar en el valor predeterminado, / WS.
  • nombre de usuario debe ser su nombre de usuario mosquitto; Aquí, utilizamos Sammy.
  • contraseña debe ser la contraseña que ha elegido.

Los campos restantes se pueden dejar a sus valores por defecto.

Después de pulsar Conectar , el cliente basado en navegador OPS conectarse a su servidor mosquitto.

Para publicar un mensaje, vaya a la Publicar panel mensaje , llene Tema como prueba , e introduzca ningún mensaje en la sección mensaje . A continuación, pulse Publicar . El mensaje se mostrará en su terminal mosquitto_sub.

Conclusión

Ahora ha configurado un servidor seguro, protegido por contraseña y SSL protegido MQTT. Esto puede servir como una plataforma de mensajería robusta y segura para cualquier proyecto que soñar. Algunos programas de software y hardware populares que funcionan bien con el protocolo MQTT incluyen:

  • OwnTracks, una aplicación de geo-seguimiento de código abierto que puede instalar en su teléfono. OwnTracks reportarán periódicamente información de posición a su servidor MQTT, que luego se puede almacenar y mostrar en un mapa, o crear alertas de hardware y activar la IO basado en su ubicación.
  • Nodo-RED es una interfaz gráfica basada en navegador para ‘cableado’juntos el Internet de las cosas. Arrastra la salida de un nodo a la entrada de otro, e información de ruta lata a través de filtros, entre diversos protocolos, en bases de datos, y así sucesivamente. MQTT está muy bien apoyado por el Nodo-RED.
  • El ESP8266 es un microcontrolador de bajo costo con wifi capacidades MQTT. Se podía conectar uno para publicar datos de temperatura a un tema, o tal vez suscribirse a un tema presión barométrica y sonar un zumbador cuando se acerca una tormenta!

Estos son sólo algunos ejemplos populares desde el ecosistema MQTT. Hay mucho más hardware y software por ahí que habla el protocolo. Si ya tiene una plataforma de hardware favorito, o el lenguaje de software, es probable que tenga capacidades MQTT. Divertirse conseguir sus “cosas” que hablan el uno al otro!