Node-RED

Cómo asegurar Node-RED: una lista de comprobación práctica

Un editor de Node-RED expuesto es una ejecución remota de código a la espera de ocurrir. Esta lista muestra cómo asegurar Node-RED con autenticación de administrador, HTTPS, un secreto de credenciales explícito, endpoints HTTP protegidos, controles de red y TLS hacia tu broker MQTT.

Candado sobre un editor de Node-RED que ilustra cómo asegurar Node-RED con autenticación y TLS
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Para asegurar Node-RED tienes que blindar tres cosas: quién puede abrir el editor, cómo se cifra el tráfico hacia él y cómo se comunican tus flujos con sistemas externos, como un broker MQTT. Esta lista recorre cada ajuste de settings.js, con comandos que puedes copiar, para que acabes con una instancia que se pueda dejar funcionando en una red con seguridad.

Por qué Node-RED necesita bastionado

Recién instalado, Node-RED no tiene login en el editor y sirve HTTP sin cifrar en el puerto 1880. Ese comportamiento predeterminado es cómodo en un portátil y peligroso en cualquier otro sitio. Cualquiera que pueda llegar al editor puede desplegar un nodo function o un nodo exec, lo que significa que puede ejecutar comandos arbitrarios en el host con los permisos de Node-RED. Los escáneres de internet encuentran con regularidad editores de Node-RED expuestos y sin autenticación, así que trata el editor como una consola de administración, no como una página web.

Node-RED también guarda secretos: contraseñas de broker, tokens de API, credenciales de bases de datos. Y como a menudo hace de puente entre las redes de tecnología operacional (OT) y las de TI, por ejemplo en plantas de manufactura, instalaciones mineras o edificios inteligentes, una instancia comprometida puede ser un trampolín hacia lugares a los que los atacantes nunca deberían llegar.

Esta es la lista completa; las secciones siguientes explican cada punto.

# Control Dónde
1 Exigir login en el editor (adminAuth) settings.js
2 Servir el editor por HTTPS settings.js o proxy inverso
3 Definir un credentialSecret explícito settings.js
4 Proteger endpoints HTTP y paneles settings.js / configuración del panel
5 Limitar la exposición de red Dirección de escucha, firewall, VPN
6 Ejecutar con el mínimo privilegio Usuario del sistema, contenedor
7 Controlar los nodos y módulos instalados settings.js, paleta
8 Usar TLS y credenciales únicas para MQTT Nodo de configuración del broker
9 Mantener Node-RED y sus nodos actualizados Rutina de actualización
10 Mantener los secretos fuera de los flujos y de git Credenciales, entorno, proyectos

1. Exige un login para el editor

Genera un hash bcrypt de una contraseña robusta con la herramienta de administración de Node-RED:

npx node-red admin hash-pw
# Password: ********
# $2b$08$wuAqPiKJlVN27eF5qJp.RuQYuy6ZYONW7a/UWYxDTtwKFCdB8F19y

Después añade adminAuth a settings.js (~/.node-red/settings.js, o /data/settings.js en Docker):

adminAuth: {
    type: "credentials",
    users: [
        {
            username: "admin",
            password: "$2b$08$REPLACE_WITH_YOUR_HASH",
            permissions: "*"
        },
        {
            username: "viewer",
            password: "$2b$08$REPLACE_WITH_ANOTHER_HASH",
            permissions: "read"
        }
    ]
},

Reinicia Node-RED y el editor mostrará una pantalla de login. El permiso read permite ver los flujos sin desplegar, lo que encaja con operadores y auditores. Da a cada persona su propia cuenta en lugar de compartir una contraseña de administrador, para poder retirar el acceso cuando alguien se marche. Para equipos más grandes, adminAuth también admite estrategias OAuth y OpenID Connect mediante Passport, así que puedes usar tu proveedor de identidad actual.

2. Sirve el editor por HTTPS

Un login sobre HTTP sin cifrar envía el token de sesión por la red en texto claro. Activa HTTPS directamente en Node-RED o termina TLS en un proxy inverso.

Directamente en settings.js:

// cerca del principio de settings.js
const fs = require("fs");

module.exports = {
    https: {
        key: fs.readFileSync("/home/nodered/certs/privkey.pem"),
        cert: fs.readFileSync("/home/nodered/certs/fullchain.pem")
    },
    requireHttps: true,
    // ...
};

Detrás de un proxy inverso como Nginx, Caddy o Traefik, mantén Node-RED en HTTP escuchando en localhost y deja que el proxy gestione los certificados y su renovación. Asegúrate de que el proxy reenvía las actualizaciones a WebSocket, porque el editor usa un WebSocket en /comms para el estado en vivo y los mensajes de depuración.

3. Define un secreto de credenciales explícito

Node-RED cifra las credenciales de los nodos, como la contraseña de tu broker MQTT, en flows_cred.json. Si no defines una clave, genera una y la guarda en un archivo de ejecución dentro del directorio de usuario. Define la tuya, idealmente desde una variable de entorno:

credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET,

Guarda ese secreto en tu gestor de contraseñas o de secretos. Sin él, un archivo de credenciales cifrado no sirve de nada, y esa es la idea: quien copie tus archivos de flujo no podrá leer la contraseña del broker. Si cambias el secreto más adelante, Node-RED vuelve a cifrar las credenciales en el siguiente despliegue.

4. Protege los endpoints HTTP y los paneles

adminAuth solo protege el editor y la API de administración. Los flujos construidos con nodos http in y los archivos estáticos son una superficie aparte. Añade autenticación básica para ellos:

httpNodeAuth: { user: "api", pass: "$2b$08$REPLACE_WITH_HASH" },
httpStaticAuth: { user: "static", pass: "$2b$08$REPLACE_WITH_HASH" },

Para algo más elaborado que una contraseña compartida, pon delante un proxy con una autenticación adecuada o comprueba un token dentro del propio flujo. Si usas Dashboard 2.0, revisa sus propias opciones de acceso y plantéate servirlo a través del mismo proxy autenticado. Un panel de solo lectura puede seguir revelando datos de planta que preferirías mantener en privado.

5. Limita la exposición de red

La mejor superficie de ataque es ninguna. Haz que Node-RED escuche en localhost y accede a él mediante una VPN, un túnel SSH o un proxy autenticado:

uiHost: "127.0.0.1",
uiPort: process.env.PORT || 1880,

En Docker, publica el puerto solo en la dirección de loopback, por ejemplo 127.0.0.1:1880:1880, como se muestra en nuestra guía de Node-RED en Docker. Nunca redirijas el puerto 1880 de un router hacia internet. Si una instancia se ejecuta en un gateway de borde, protégela con un firewall para que solo la red de gestión pueda llegar al editor.

En sistemas de producción que nunca deberían cambiar en tiempo de ejecución, puedes ir más allá y definir disableEditor: true. Los flujos siguen ejecutándose, pero el editor y la API de administración desaparecen; despliega los cambios actualizando archivos y reiniciando.

6. Ejecuta con el mínimo privilegio

No ejecutes Node-RED como root. Usa un usuario del sistema dedicado que solo sea propietario del directorio de Node-RED. La imagen oficial de Docker ya se ejecuta como usuario sin privilegios de root. Elimina o restringe los nodos que ejecutan comandos del sistema, como exec, si tus flujos no los necesitan, mediante el ajuste nodesExcludes.

7. Controla los nodos y módulos instalados

Cada nodo de la comunidad es código que se ejecuta con los permisos de Node-RED. Instala solo nodos mantenidos que realmente necesites y revísalos antes de llevarlos a producción. Puedes restringir lo que se puede instalar desde la paleta:

externalModules: {
    palette: {
        allowInstall: true,
        allowList: ["@flowfuse/node-red-dashboard", "node-red-contrib-modbus"]
    },
    modules: {
        allowInstall: false
    }
},

Definir modules.allowInstall como false impide que los nodos function incorporen paquetes npm arbitrarios en tiempo de ejecución.

8. Usa TLS y credenciales únicas para MQTT

Una instancia de Node-RED segura no debería comunicarse después con su broker en texto claro. En el nodo de configuración del broker MQTT:

  1. Usa el puerto 8883 y marca Use TLS, dejando activada la verificación del certificado.
  2. Usa un usuario, una contraseña y un client ID dedicados para Node-RED, distintos de los de los dispositivos. En ConnectMQ, los client IDs están vinculados a las credenciales con las que se emitieron, así que una credencial de dispositivo filtrada no puede suplantar a tu instancia de Node-RED.
  3. Nunca publiques datos reales en un servidor público. El servidor MQTT público gratuito de ConnectMQ es ideal para aprender, probar y hacer prototipos, pero cualquiera puede leer todos los topics de su área pública, así que no es apto para datos de producción.

La configuración completa, incluidos los archivos de CA personalizados, está en nuestra guía de Node-RED MQTT TLS, y nuestras buenas prácticas de seguridad MQTT cubren el lado del broker.

9. Mantén Node-RED y sus nodos actualizados

Las correcciones de seguridad llegan en las versiones de Node-RED, en las de Node.js y en las actualizaciones de los nodos de la comunidad. Revisa Manage palette en busca de actualizaciones de nodos, sigue las notas de versión de Node-RED y actualiza Node.js a una rama LTS con soporte. Haz antes una copia de seguridad de tu directorio de usuario y prueba las actualizaciones en una copia antes de aplicarlas en producción.

10. Mantén los secretos fuera de los flujos y de git

Las credenciales van en los campos de credenciales de los nodos de configuración, que están cifrados, no en el código de las funciones ni en los nodos inject. Lee las claves de API en los nodos function con env.get() desde variables de entorno. Si versionas los flujos con git, la función de proyectos de Node-RED cifra el archivo de credenciales con una clave de proyecto que nunca entra en el repositorio.

La documentación oficial de seguridad de Node-RED enumera todas las opciones mencionadas aquí. Para una introducción más amplia a la creación de flujos, consulta el tutorial de Node-RED MQTT.

Conecta tu Node-RED asegurado a ConnectMQ

Un Node-RED bastionado merece un broker con los mismos estándares. ConnectMQ es un broker MQTT gestionado con TLS en el 8883 mediante un certificado de Let's Encrypt, client IDs vinculados a las credenciales emitidas, aislamiento multi-tenant, protección contra inundaciones y bloqueo automático de IP tras varios intentos de login fallidos. Crea un broker con el plan Serverless gratuito en app.connectmq.com, sin tarjeta de crédito, y da a Node-RED sus propias credenciales generadas. Si estás comparando modelos de alojamiento, lee nuestra guía sobre el broker MQTT en la nube.

Preguntas frecuentes

¿Es Node-RED seguro por defecto?

No. Una instalación predeterminada no tiene login en el editor y sirve HTTP sin cifrar. Debes activar adminAuth, añadir HTTPS y restringir el acceso de red antes de exponerlo fuera de tu propia máquina.

¿Cómo pongo una contraseña al editor de Node-RED?

Genera un hash bcrypt con node-red admin hash-pw, añádelo a la sección adminAuth de settings.js y reinicia Node-RED.

¿Protege adminAuth mis paneles y endpoints HTTP?

No. Cubre el editor y la API de administración. Para los endpoints de los flujos, usa httpNodeAuth, httpStaticAuth, las opciones propias del panel o un proxy inverso con autenticación.

¿Qué ocurre si pierdo el secreto de credenciales?

Node-RED no puede descifrar flows_cred.json, así que las credenciales guardadas se pierden. Tus flujos siguen cargándose, pero debes volver a introducir contraseñas como las credenciales de tu broker MQTT.

Artículos relacionados

Cliente OPC UA en Node-RED hacia MQTT con topics ISA-95

Usa node-red-contrib-opcua para suscribirte a variables OPC UA de un PLC o de un servidor de simulación, asignar los node IDs a topics MQTT de estilo ISA-95 y publicar los valores con calidad y marcas de tiempo.

10 min de lectura

Node-RED Dashboard 2.0 con MQTT: indicadores, gráficos y controles

Un tutorial práctico de Node-RED Dashboard 2.0: suscríbete a telemetría MQTT en directo, muéstrala en indicadores y en un gráfico de líneas, y controla un dispositivo con un interruptor que publica comandos y refleja el estado real.

9 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.