Instalando NodeRed en Raspberry

Objetivos

  • Veremos como instalar Nodered en Raspberry Pi.
  • Veremos como acceder desde otros PC a Nodered
  • Mosstaremos un sistema de seguridad masado en usuario/ contraseña.[/three-fourth] [clear/]
  •  

    Material requerido.

     

     Vista mayor  Una Raspberry Pi

     

    ¿Qué es Nodered y porque lo instalamos?

     

    Bueno… Esto… Muy buena pregunta si me permite… Ejem… yo…

    La verdad es que definir Nodered es bastante más complicado de lo que parece, pero si estas leyendo esto, es que tienen interés en el tema, seguramente porque algún Amigo /Conocido te ha calentado la oreja con el asunto y eso me facilita el trabajo, al menos un poco.

    Podríamos definir Nodered como un sistema de programación a base de bloques o Nodos, basado en Node-js, cada uno de los cuales esta diseñado para resolver un problema especifico en un entorno visual de interconexión de elementos IOT, a base de estándares de la industria como MQTT, REST, JSON, Modbus, OPC-UA, Bacnet, Websocket,… y eso les ha permitido acabar estableciendo nodos a servicios estándar en la web de proveedores comerciales, como Microsoft Azure, Amazon Web servicios y…. toda una lista de otros proveedores.

    Si eres nuevo en esto, es imposible que hayas entendido una palabra de lo de arriba, pero paciencia, Nodered es un concepto extraño y sorprendente, pero también absolutamente asombroso en cuanto a las posibilidades que te ofrece y además lo hace un modo tan sencillo y elegante que asombra a cualquiera que empieza… y le obliga a repensar muchas cosas de sus concepciones acerca de la programación, porque , en realidad está pensado para no programadores y probablemente si eres un niño todo te parecerá tan normal y evidente que te sorprenderá que no se pueda hacer de otro modo.

    Pero si eres un adulto con experiencia en lenguajes de programación,  te dejará anonadado por la potencia y sencillez del modo de desarrollar aplicaciones. Por eso, te pido un poco de paciencia conmigo (Estoy mayor y con tendencia a divagar) y en esta sesión, vamos a instalar Nodered en Raspberry Pi para mas adelante ver como leer los datos que hemos ido subiendo a los servidores MQTT, y como almacenarlos en una base de dados o simplemente presentarlos en un panel de control visual.

    No quiero ponerme pesado, pero… os pido un acto de fe y que instaléis Nodered. En los siguientes capítulos haremos una mini introducción a la programación con Nodered para conectar con el servidor MQTT que creamos anteriormente y tratar esos datos. Animo

     

    Instalando Nodered en raspberry Pi

     

    Como siempre antes de instalar algo en tu Raspberri tienes que poner al día tu sistema para evitar líos:

    Sudo apt-get update
    Sudo apt-get upgrade

    Y ahora ya podemos ir al comando de instalación de Nodered, que según la pagina oficial recomienda instalarlo con el siguiente comando (A mí no me miréis)

    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

    No preguntéis mucho. Copiad y pegad. Por lo visto, Node-red viene ya instalado de serie en el nuevo Raspbian (¿A que no lo sabías?), pero seguro que será viejo y con este comando se instala o actualiza según sea el caso. Al acabar en principio ya tienes listo el Nodered para correr en tu máquina con el comando:

    sudo node-red

    Que tras una larga parrafada te dejará una pantalla como esta:

    consola raspberry

    Arrancar Nodered manualmente, tiene el inconveniente de que en primer lugar, que algunos somos vagos y no nos  gusta hacer algo que puede hacer una máquina por mí, y en segundo lugar si pulsas [CTRL]+ C, saldremos de Nodered y cesará el servicio lo que no suele ser buena idea.

    Por eso es mejor (y descansado) correr Nodered como un servicio, de modo que no se suspenda al hacer [CTRL]+ C . Para instalar el servicio:

    node-red-start

    Y también tenemos disponibles:

    node-red-stop
    node-red-restart
    node-red-log

    Para los que odiáis escribir comandos, también podéis arrancar el servicio Nodered desde el modo grafico en:

    \\Menu\Programming\Node-Red
    ejemplo de mensajes de arranque

    Pero los que somos vagos profesionales, preferimos que Node-red arranque solo al inicio por lo que estos comandos me encantan:

    sudo systemctl enable nodered.service

    Y si por cualquier razón, necesitas pararlo (Por ejemplo, porque traga cantidad de memoria y CPU, algo de lo que la Raspberry Pi no va sobrada, ni con los 8Gb):

    sudo systemctl disable nodered.service

    Para empezar a usar Nodered, dado que se instala con acceso vía Web, si vas a tu navegador y escribes en la dirección URL:

    localhost:1880

    Accediendo via web a nodered

    Pero… tienes que entender que Nodered consume muchos recursos de tu Raspberry por lo que la página principal de Node-red, recomienda que accedas a el desde un ordenador externo, para no agotar memoria y hacer que la Raspi vaya demasiado lenta.

    Para eso necesitas saber la dirección IP de tu Raspberri y por si eres nuevo (Tranqui que nos ha pasado a todos) puedes usar el comando: ifconfig

    mostrando la direcicon IP

    O también:

    hostname -I

    averiguando tu IPSi tiene un pc cualquiera por ahí, (Windows o Linux o Mac) puedes acceder Nodered en tu Raspi con tu navegador favorito, sin mas que en lugar de localhost indicar la IP de la Raspberry, y el puerto 1880 de acceso. En en mi caso es:

    http://192.168.1.52:1880/

    Accediendo desde mi Microsoft Edge, podremos ver:

    accediendo a nodered con Iexplorer

     

     

    Configurando la seguridad de Nodered

     

    Por defecto, Nodered aplica aquello de todo el mundo es bueno, y no establece contraseñas ni seguridad de ningún tipo, por eso hemos podido entrar antes a la pantalla principal. Esto está bien si estas montando un servidor en la Raspberry para ti y como mucho unos coleguillas, pero en cuanto montes un servidor con acceso desde internet comprobarás que la cantidad de hijos de perra que hay por la red es infinito y aun cuando sea un porcentaje bajo de la población total, son mas que suficientes para que pierdas la fe en la humanidad.

    Por eso vamos a tener que montar un mínimo servicio de seguridad, que nos permita filtrar a indeseables de nuestro bonito servidor Nodered y el primer paso es montar un sistema de usuario y contraseña.

    Para ello tenemos que saber que como siempre en Linux hay fichero de opciones infinitas que configura en el arranque el comportamiento del Nodered y para pedirle que utilice autentificación por usuario con contraseña hay que editar ese fichero, que se llama settings.js y que se encuentra en un directorio oculto, de tu carpeta de usuario llamado .node-red:

    Opciones de configuracion

    Recuerda, que cada vez que hagas cambios en el fichero de configuración, tendrás que tumbar el Nodered y volverlo a iniciar para que los cambios tengan efecto, con los comandos:

    node-red-start
    node-red-stop

    Vamos a crear un par de usuarios, que puedan acceder a nuestro Node-red y para ello tienes que editar el fichero settings.js con tu editor favorito, que para mi en Raspberry voy a usar:

    sudo mousepad settings.js

    Una vez dentro busca una sección llamada adminAuth. Si tienes el fichero de configuración original pondrá algo como esto:

    /** To password protect the Node-RED editor and admin API, the following
    * property can be used. See http://nodered.org/docs/security.html for details.
    */
    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},:

    Lo mismo que Arduino y C++ los comentarios se indican con // para las líneas y con /* hasta */ para bloques. Tienes que escribir en su lugar exactamente esto:

  • Pero naturalmente puedes / debes  variar el nombre de los usuarios claro.
  • Aunque ahora puedes copiar las contraseñas raras que hay abajo, luego las vas a cambiar por las tuyas propias, cunado veamos como encriptar la passwd.
  •  

    adminAuth: {
    type: "credentials",
    users: [
    {
    username: "admin",
    password: "$2b$10$2DiQRwQ/yi7OZyBYxGd4keFwmxj9RpitnzOyTwBh8oP3SYqPouEQa",
    permissions: "*"
    },
    {
    username: "charly",
    password: "$2b$10$P8UmP07PNO6FZ2PwT2v34OY9RNCJbR3Wt9bsRW9No4EjTgWQb5vM.",
    permissions: "*"
    }
    ]
    },

    En mi caso he creado dos usuarios admin y Charly (Para variar) pero para crear las contraseñas encriptadas y que no lo vea el enemigo, hay dos procedimientos: El primero es decidir que, para el usuario admin y charly, quiero las contraseñas “Pagasarri” y “contrase” respectivamente. Para ello abrimos una ventana de comandos y escribimos:

    Node-red admin hash-pw

    Usando el algoritmo de hash

    ¡Accede al contenido!

    El programa te pedirá la clave a encriptar, que no se verá en pantalla, (Por eso las he pintado en rojo) y te devolverá ese chorro de caracteres, que, por increíble que te parezca, es único, y van a ser la forma en que guardaras las contraseñas en tu fichero de configuración.

  • Para los que van a por nota: Un hash es un sistema de encriptado de acuerdo a una serie de reglas que hace que para una clave concreta se genere una serie de letras únicas. Para una clave, se genera una secuencia única de caracteres, pero revertir el proceso está fuera de la capacidad de las computadoras actuales por mucho.
  • La más mínima modificación en la secuencia original hace surgir una serie completamente diferente lo que impide que puedas buscar una relación. Por ejemplo, el hash que corresponde a estas dos frases (Que solo se diferencian en el punto final) es:
  • ejemplo de cambio de un unico caracter
  • El gestor de contraseñas solo tiene que calcular el hash de la contraseña oculta que le pases y ver si coincide con la que tiene almacenada para decidir si eres quien dices. Paro el proceso contrario necesitaría unos cuantos millones de años.
  • Ya que estamos y en un tema completamente distinto, el Blockchain concatena los bloques mediante un hash similar a este que se calcula a partir de todo el contenido del bloque(Las operaciones registradas) de modo que si tocas un dato cualquiera del bloque su hash cambia y el siguiente bloque al detectarlo invalida toda la cadena subsiguiente pues indica que el registro original ha sido alterado.
  •  

    Ahora solo tienes que copiar cada una de esas claves encriptadas que ha generado y pegarlas en la sección password: del fichero de configuración (Asegúrate de poner la contraseña a su usuario asociado) y ya puedes salvar el fichero.

    Alternativamente si eres de los que odias escribir comandos en la consola, tienes algunos servidores públicos para generar el hash como por ejemplo, este:

    generador de claves publico

    Puedes comprobar que para la misma clave se genera el mismo hash con exactitud. Si ahora entras a la página de tu Nodered veras que te pide un usuario y contraseña, antes de dejarte pasar:

    peticion de contraseña

    En la próxima sesión empezaremos a jugar con Nodered y veréis porque es tan interesante.

     

    IMAGEN DE MARCA


    Deja una respuesta