fh4

Objetivos

 

  • Vamos a configurar el brokerMosquitto en Raspberry Pi.
  • Añadiremos unas pocas líneas al fichero de configuración.
  • Veremos como crear usuario y contraseñas.
  • Aprovecharemos para presentar el MQTT explorer.[/three-fourth] [clear/]
  •  

    Material requerido.

     

     Vista mayor  Una Raspberry Pi
    personal computer  Un PC

     

    Leyendo el SDS011 desde un PC

     

     

    En la sesión previa vimos como instalar el servidor (O broker) Mosquitto en tu Raspberry PI. Pero esto solo era el principio, ahora toca configurarlo que es un tema un poco más confuso, porque el servidor Mosquitto dispone de poco menos que infinitos parámetros de configuración por lo que en esta sesión vamos a intentar montar una configuración sencilla que nos permita arrancar nuestro broker MQTT sin demasiadas complicaciones.

    No vamos a entrar en muchos detalles (Por mi lamentable ignorancia) pero sí que buscaremos una configuración que nos permita abrir el puerto en cuestión 1883, típico de MQTT, y configurar un sistema básico de usuarios y contraseñas de modo que podamos limitar las conexiones a los que tengan usuario creado

    Naturalmente también tendremos que ver cómo administrar usuarios (Altas, bajas y modificaciones) y algún que otro detalle como crear los ficheros de usuarios / passwords y… seguro que me dejo algo. Así que, sin más preámbulos, vamos al lio

     

    Creando el fichero mosquitto.conf

     

     

    Todo el comportamiento del Broker Mosquitto, se controla desde un fichero único llamado mosquitto.conf, que debe estar situado en el mismo directorio de instalación de Mosquitto, que si estás usando Raspberry y has seguido nuestro proveimiento para instalarlo, debería estar en
    /etc/mosquitto que es donde el broker lo busca al arrancar:

    File mosquitto.conf

    Como ya os decía, hay un numero enorme de posibilidades para controlar nuestro broker MQTT, pero una guía extensa sobre el asunto excede con mucho nuestras posibilidades y desde luego mi capacidad, por lo que me limitaré a incluir aquí un listado de las líneas mínimas que os voy a recomendar incluir.

    No pretendo más que limitar el acceso mediante usuario/contraseña y definir algunos ficheros instrumentales. Borra todo el contenido de tu fichero de configuración, mosquitto.conf, y copia estas líneas

     listener 1883
     allow_anonymous false
     
     log_dest file /etc/mosquitto/mosquitto.log
     password_file /etc/mosquitto/passwd

    La primera línea (Listener 1883,) fija el puerto en el que el servidor MQTT va a escuchar las peticiones y la segunda línea deniega las conexiones anónimas. Las dos últimas líneas indican que el broker deber guardar registro de incidencias en el fichero indicado, mosquitto.log, y, por último, la más importante, un fichero de registro de los nombres de usuarios y contraseñas asignadas, para los usuarios registrados que desene usar el servidor

    Nota: Si modificas el fichero de configuración, tienes que detener el servidor y volverlo a arrancar para que los cambios tengan efecto. Para ello hay 3 comandos de consola que te interesan:

    Sudo systemctl status mosquitto
    Sudo systemctl stop mosquitto
    Sudo systemctl start mosquitto

    El primero, status, nos informa de la situación del servidor, mientras que los otros dos comandos nos permiten detener y arrancar nuestro Mosquitto:

    consola Linux

    Detén el broker MQTT, edita tu fichero mosquitto.conf con tu editor favorito y pon las líneas que vimos más arriba.

  • Para los que odien los editores de texto de Linux (Yo el primero) podéis usar el editor de Raspberry mousepad:
    cd /etc/mosquitto
    mousepad mosquitto.conf
    .
  •  

    Por último vuelve a arrancar tu broker con:

    Sudo systemctl start mosquitto

    Y ya está. Tu sistema permitirá que los usuarios registrados puedan conectar, y para eso tenemos que pasarnos a la parte de como definir usuarios.

     

    Creando usuarios en mosquitto

     

     

    Es bastante fácil. En principio la manera más sencilla de crear usuarios al principio es escribir un fichero de texto como este (Yo voy a usar una versión de Mosquitto en Windows , pero todo es lo mismo):

    Lista de usuarios

    Es decir, simplemente escribes los nombres de usuario seguidos por “:” y luego la contraseña deseada. Antes de que me digas que menuda seguridad de mierda, ejecuta esto:

    sudo mosquitto_passwd -U passw2.txt

    Si ahora vuelves a editar el fichero passwd2.txt te llevarás una sorpresa porque Mosquitto ha encriptado las contraseñas almacenadas de modo que solo él pueda leerlas:

    Resultado tras la encriptacion

    Recuerda que nuestro fichero mosquitto.conf tenía una línea que apuntaba al fichero de usuarios:

    password_file /etc/mosquitto/passwd

    Y que más te vale que coincida con el nombre de fichero que has puesto aquí arriba.

  • Yo he hecho un poco de trampa, para no mostraros mi fichero de usuarios (Y porque estoy probando un Broker MQTT en Raspberry y otro en Windows, para adelantar tiempo), he encriptado un segundo archivo de ejemplo, passwd2.txt, al que astutamente, no apunta mi mosquitto.conf pero que me sirve para mostraros como se las gasta el comando mosquitto_passwd.
  •  

    Si más adelante queremos añadir un usuario llamado Martin, podemos escribir:

    sudo mosquito_passwd -c passwd martin

    Donde después de la -c ponemos el nombre del fichero de contraseñas y luego el nombre del nuevo usuario. El comando nos reclamará una contraseña y confirmación de la misma:

    comando para añadir usuarios

    También podemos añadir usuarios con su contraseña con el comando:

    sudo mosquitto_passwd -b passwordfile user password

    O eliminar usuarios con:

    mosquitto_passwd -D passwordfile user

    Como hemos cambiado los usuarios, tendremos que parar el broker y volverlo a arrancar para que coja los cambios del fichero de usuarios.

    sudo systemctl stop mosquitto
    sudo systemctl start mosquitto
    sudo systemctl status mosquitto

  • Esta configuración es suficiente para un servidor más o menos privado, pero si vas a abrir al público tu broker, o vas a exponerlo en una IP pública, convendría afinar un poco mas la configuración de seguridad.
  • Por defecto, Mosquitto no encripta tu nombre de usuario y contraseña por lo que están muy expuestos y si esto fuese un problema deberías entrar a configurar SSL (Secure Sockets Layer)
  • Lamentablemente, entrar a hablar de certificados y claves publicas / privadas aquí, se escapa del objetivo y posibilidades de estas líneas por lo que si hubiera interés, hacérnoslo saber e intentaré publicar un tuto sobre el asunto.   [/fancy-ul] [/three-fourth]
  •  

    Probando los cambios con MQTT explorer

     

    Una vez que hemos configurado usuarios y un fichero de configuración funcional, solo nos queda probar los cambios y ver qué pasa. Ya vimos en la sesión previa, que podíamos suscribir un topic desde la línea de comandos con mosquitto_sub en una consola y con mosquitto_pub en otra.

    Pero ahora tendremos una diferencia a la hora de publicar y suscribir y es que hemos implementado seguridad por usuario / contraseña y eso también podemos hacerlo en la lineal de comandos mediante:

    mosquitto_sub -h 192.168.1.36 -u charly -P contrase -t “Prosensor/CO2” -v

    La línea indica que buscamos el broker en la dirección IP especificada con el usuario (-u) “Charly” y contraseña (-P) “contrase” para suscribirnos al tópico (-t) “Prosensor/CO2”. Para suscribirnos en otra consola con user / pass podríamos hacer:

    mosquitto_pub -d -h 192.168.1.36 -u charly -P contrase -t “Prosensor/CO2” -m "132"

    Fíjate que para el password hemos usado “-P” en mayúsculas, porque el “-p” en minúsculas es para indicar el puerto: “-p 1883”; En la línea superior lo hemos omitido porque asumimos el puerto por defecto, pero si te equivocas en esto vas a tener muchos problemas difíciles de identificar.

    Esto sería suficiente para ver que el servidor funciona, pero como me sobra sitio (Y está lloviendo sin parar) y para el futuro me interesa un sistema un poco más cómodo de conectar con los servidores MQTT, sin tener que escribir líneas de comandos, que nunca salen bien a la primera, vamos a presentar una utilidad encantadora llamada MQTT Explorer, que nos va a hacer la vida mucho más agradable.

    Puedes descargarla de aquí: MQTT Explorer, hay clientes para Windows, Linux y Mac, pero yo voy a usar la versión Windows que es donde estoy cómodo. Una vez instalada puedes arrancarla y veras algo así:

    Pantalla de bienvenida

    Para conectarte a un servidor nuevo, debes pulsar en el símbolo “+” en rojo y entrarás en el menú de nueva conexión que puedes rellenar con los datos de tu Broker MQTT. En mi caso, la dirección IP del broker con el port 1883, más el usuario y la contraseña definida, que deberás rellenar con tus propios datos, claro.  Pulsa el botón Connect y llegarás a:

    Ejemplo de conexion

    Esta es la pantalla principal del MQTT Explorer donde puedes suscribir tópicos o publicar lo que necesites en el servidor en cuestión. Pero para suscribir tópicos necesitas alguien que esté publicando valores en ese tópico y lo más probable es que por ahora no tengas ningún publicador en marcha, por eso voy a hacer una pequeña trampa, que consiste en poner en marcha mi ESP32 publicando valores aleatorios entre 0 y 100 cada medio segundo, para tener una publicación en marcha y ver como conectarnos con el Explorer. En la próxima sesión veremos el programa Arduino que publica, pero de momento es lo que hay.

    Al conectar a un broker veras algo parecido a esto:

    Ejemplo de conexion

    Tienes la típica lista desplegable debajo del servidor donde al menos aparecerá el tópico SYS de sistema y en mi caso como mi ESP32 está publicando el topic “Prosensor/CO2” vemos la primera categoría Prosensor, con una flecha para desplegarla y al pulsar, veremos:

    ejemplo de categorias dentro de un topic mqtt

    Es decir, se despliegan las categorías de segundo nivel, que en este caso solo hay una, pero podríamos tener “Prosensor/Temp” + “Prosensor/Humedad” por ejemplo, y un número a su derecha, que es cambiante en función del valor de los mensajes que van entrando (Ese número es el valor que publica el ESP32 y se actualiza instantáneamente. Es la forma de suscribir un valor concreto y verlo en pantalla)

    Pero el MQTT Explorer tiene más trucos en la recamara. Pincha en el desplegable Value, donde indica la flecha amarilla:

    Verás un desplegable en el que, en la línea verde, tienes el valor actual de la última publicación, y en la línea roja el número de mensajes publicados hasta la fecha.

    Desplegando value

    Pulsa ahora en el simbolito de una línea, justo al principio de la línea verde y obtendrás un gráfico de los últimos valores publicados, que se va actualizando sobre la marcha:

    Analisis grafico de valores recibido

    El MQTT Explorer nos permite suscribir cualquier topic autorizado de nuestro Broker de una forma sencilla y elegante, evitándonos las temidas líneas de comandos imposibles de recordar. Os dejo aquí un pequeño mini video del autor con las posibilidades del MQTTExplorer

    http://mqtt-explorer.com/video.mp4

    En la próxima sesión veremos cómo usar nuestros Arduinos / ESP32 para conectar a la WIFI y publicar los valores que leamos de un sensor en nuestro Broker MQTT.

     

    IMAGEN DE MARCA

    Deja una respuesta