Node-RED

Node-RED absichern: Eine praktische Checkliste

Ein offen erreichbarer Node-RED-Editor ist eine Einladung zur Remote Code Execution. Diese Checkliste zeigt, wie Sie Node-RED mit Admin-Authentifizierung, HTTPS, explizitem Credential Secret, geschützten HTTP-Endpunkten, Netzwerkkontrollen und TLS zum MQTT-Broker absichern.

Vorhängeschloss über einem Node-RED-Editor als Symbol dafür, Node-RED mit Authentifizierung und TLS abzusichern
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

Um Node-RED abzusichern, müssen Sie drei Dinge in den Griff bekommen: wer den Editor öffnen darf, wie der Datenverkehr dorthin verschlüsselt wird und wie Ihre Flows mit externen Systemen wie einem MQTT-Broker sprechen. Diese Checkliste geht jede Einstellung in settings.js durch – mit Befehlen zum Kopieren –, sodass Sie am Ende eine Instanz haben, die Sie bedenkenlos im Netzwerk laufen lassen können.

Warum Node-RED gehärtet werden muss

Eine frische Node-RED-Installation hat ab Werk keinen Login für den Editor und liefert unverschlüsseltes HTTP auf Port 1880 aus. Diese Voreinstellung ist auf einem Laptop bequem und überall sonst gefährlich. Wer den Editor erreicht, kann einen Function-Node oder einen exec-Node deployen – und damit beliebige Befehle mit den Rechten von Node-RED auf dem Host ausführen. Offen erreichbare, nicht authentifizierte Node-RED-Editoren werden regelmäßig von Internet-Scannern gefunden. Behandeln Sie den Editor daher als Administrationskonsole, nicht als Webseite.

Node-RED verwahrt außerdem Geheimnisse: Broker-Passwörter, API-Tokens, Datenbank-Zugangsdaten. Und weil Node-RED oft OT- und IT-Netze verbindet, kann eine kompromittierte Instanz zum Sprungbrett in Bereiche werden, die Angreifer niemals erreichen sollten – ein Punkt, den auch IEC 62443 mit der Trennung in Zonen und Conduits adressiert.

Hier die vollständige Checkliste; die folgenden Abschnitte erläutern jeden Punkt.

# Maßnahme Wo
1 Login für den Editor erzwingen (adminAuth) settings.js
2 Editor über HTTPS ausliefern settings.js oder Reverse Proxy
3 Explizites credentialSecret setzen settings.js
4 HTTP-Endpunkte und Dashboards schützen settings.js / Dashboard-Konfiguration
5 Netzwerkzugriff begrenzen Bind-Adresse, Firewall, VPN
6 Mit minimalen Rechten betreiben OS-Benutzer, Container
7 Installierte Nodes und Module kontrollieren settings.js, Palette
8 TLS und eindeutige Zugangsdaten für MQTT nutzen Broker-Konfigurations-Node
9 Node-RED und Nodes aktuell halten Update-Routine
10 Geheimnisse aus Flows und Git heraushalten Credentials, Umgebung, Projects

1. Login für den Editor erzwingen

Erzeugen Sie mit dem Node-RED-Admin-Tool einen bcrypt-Hash eines starken Passworts:

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

Fügen Sie dann adminAuth in settings.js ein (~/.node-red/settings.js oder /data/settings.js in 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"
        }
    ]
},

Starten Sie Node-RED neu, und der Editor zeigt eine Anmeldemaske. Die Berechtigung read erlaubt das Ansehen von Flows ohne Deploy – passend für Bediener und Auditoren. Geben Sie jeder Person ein eigenes Konto, statt ein gemeinsames Admin-Passwort zu teilen; so können Sie den Zugang entziehen, wenn jemand das Unternehmen verlässt. Für größere Teams unterstützt adminAuth über Passport auch OAuth- und OpenID-Connect-Strategien, sodass Sie Ihren bestehenden Identity Provider nutzen können.

2. Editor über HTTPS ausliefern

Ein Login über unverschlüsseltes HTTP schickt das Sitzungstoken im Klartext durchs Netz. Aktivieren Sie entweder HTTPS direkt in Node-RED oder terminieren Sie TLS an einem Reverse Proxy.

Direkt in settings.js:

// im oberen Bereich von 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,
    // ...
};

Hinter einem Reverse Proxy wie Nginx, Caddy oder Traefik lassen Sie Node-RED per HTTP an localhost gebunden und überlassen dem Proxy Zertifikate und Erneuerung. Achten Sie darauf, dass der Proxy WebSocket-Upgrades weiterleitet, denn der Editor nutzt einen WebSocket auf /comms für Live-Status und Debug-Meldungen.

3. Explizites Credential Secret setzen

Node-RED verschlüsselt Node-Zugangsdaten wie Ihr MQTT-Broker-Passwort in flows_cred.json. Setzen Sie keinen Schlüssel, erzeugt Node-RED selbst einen und speichert ihn in einer Laufzeitdatei im Benutzerverzeichnis. Setzen Sie Ihren eigenen, idealerweise aus einer Umgebungsvariablen:

credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET,

Bewahren Sie dieses Secret in Ihrem Passwortmanager oder Secrets Store auf. Ohne es ist eine verschlüsselte Credentials-Datei nutzlos – genau darum geht es: Wer Ihre Flow-Dateien kopiert, kann das Broker-Passwort nicht lesen. Ändern Sie das Secret später, verschlüsselt Node-RED die Zugangsdaten beim nächsten Deploy neu.

4. HTTP-Endpunkte und Dashboards schützen

adminAuth schützt nur den Editor und die Admin-API. Flows mit http in-Nodes sowie statische Dateien sind eine eigene Angriffsfläche. Ergänzen Sie Basic Authentication dafür:

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

Für alles, was über ein gemeinsames Passwort hinausgeht, setzen Sie einen Proxy mit richtiger Authentifizierung davor oder prüfen ein Token im Flow selbst. Wenn Sie Dashboard 2.0 verwenden, prüfen Sie dessen eigene Zugriffsoptionen und erwägen Sie, es über denselben authentifizierenden Proxy auszuliefern. Auch ein schreibgeschütztes Dashboard kann Werksdaten preisgeben, die Sie lieber für sich behalten.

5. Netzwerkzugriff begrenzen

Die beste Angriffsfläche ist gar keine. Binden Sie Node-RED an localhost und greifen Sie über VPN, SSH-Tunnel oder einen authentifizierenden Proxy darauf zu:

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

In Docker veröffentlichen Sie den Port nur auf der Loopback-Adresse, zum Beispiel 127.0.0.1:1880:1880, wie in unserem Leitfaden zu Node-RED mit Docker gezeigt. Leiten Sie Port 1880 niemals am Router ins Internet weiter. Läuft eine Instanz auf einem Edge-Gateway, schützen Sie sie per Firewall so, dass nur das Management-Netz den Editor erreicht.

Für Produktivsysteme, die sich zur Laufzeit nie ändern sollen, können Sie noch weiter gehen und disableEditor: true setzen. Die Flows laufen weiter, aber Editor und Admin-API sind verschwunden; Änderungen deployen Sie, indem Sie Dateien aktualisieren und neu starten.

6. Mit minimalen Rechten betreiben

Betreiben Sie Node-RED nicht als root. Verwenden Sie einen eigenen Systembenutzer, dem nur das Node-RED-Verzeichnis gehört. Das offizielle Docker-Image läuft bereits als Nicht-root-Benutzer. Entfernen oder beschränken Sie Nodes, die Systembefehle ausführen, etwa exec, mit der Einstellung nodesExcludes, wenn Ihre Flows sie nicht brauchen.

7. Installierte Nodes und Module kontrollieren

Jeder Community-Node ist Code, der mit den Rechten von Node-RED läuft. Installieren Sie nur gepflegte Nodes, die Sie wirklich brauchen, und prüfen Sie sie, bevor sie in die Produktion gehen. Sie können einschränken, was über die Palette installiert werden darf:

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

Wenn Sie modules.allowInstall auf false setzen, können Function-Nodes zur Laufzeit keine beliebigen npm-Pakete nachladen.

8. TLS und eindeutige Zugangsdaten für MQTT nutzen

Eine abgesicherte Node-RED-Instanz sollte anschließend nicht im Klartext mit ihrem Broker sprechen. Im MQTT-Broker-Konfigurations-Node gilt:

  1. Port 8883 verwenden und Use TLS aktivieren, die Zertifikatsprüfung eingeschaltet lassen.
  2. Einen eigenen Benutzernamen, ein eigenes Passwort und eine eigene Client ID für Node-RED verwenden, getrennt von den Geräten. Bei ConnectMQ sind Client IDs an die Zugangsdaten gebunden, mit denen sie ausgegeben wurden – ein geleaktes Geräte-Credential kann sich also nicht als Ihre Node-RED-Instanz ausgeben.
  3. Niemals echte Daten über einen öffentlichen Broker senden. Der öffentliche MQTT-Broker ist ideal zum Lernen und Testen, aber jedes Topic in seinem öffentlichen Bereich ist für jeden lesbar.

Die vollständige Einrichtung inklusive eigener CA-Dateien finden Sie in unserem Leitfaden zu Node-RED MQTT mit TLS; unsere Best Practices für MQTT-Sicherheit behandeln die Broker-Seite.

9. Node-RED und Nodes aktuell halten

Sicherheitskorrekturen kommen mit Node-RED-Releases, Node.js-Releases und Updates der Community-Nodes. Prüfen Sie unter Manage palette auf Node-Updates, verfolgen Sie die Release Notes von Node-RED und aktualisieren Sie Node.js auf eine unterstützte LTS-Version. Sichern Sie vorher Ihr Benutzerverzeichnis und testen Sie Upgrades an einer Kopie, bevor Sie die Produktion aktualisieren.

10. Geheimnisse aus Flows und Git heraushalten

Zugangsdaten gehören in die Credential-Felder der Konfigurations-Nodes, die verschlüsselt werden – nicht in Function-Code oder Inject-Nodes. Lesen Sie API-Schlüssel in Function-Nodes mit env.get() aus Umgebungsvariablen. Wenn Sie Flows mit Git versionieren, verschlüsselt die Funktion Node-RED Projects die Credentials-Datei mit einem Projektschlüssel, der nie ins Repository gelangt.

Die offizielle Node-RED-Sicherheitsdokumentation listet alle hier genannten Optionen auf. Eine breitere Einführung in das Erstellen von Flows bietet das Node-RED MQTT-Tutorial.

Abgesichertes Node-RED mit ConnectMQ verbinden

Ein gehärtetes Node-RED verdient einen Broker mit denselben Standards. ConnectMQ ist ein vollständig verwalteter MQTT-Broker mit TLS auf Port 8883 und einem Let's-Encrypt-Zertifikat, an ausgegebene Zugangsdaten gebundenen Client IDs, Mandantentrennung, Flood-Schutz und automatischer IP-Sperre nach wiederholt fehlgeschlagenen Logins. Legen Sie im kostenlosen Serverless-Plan unter app.connectmq.com einen Broker an, ohne Kreditkarte, und geben Sie Node-RED eigene generierte Zugangsdaten. Wenn Sie Betriebsmodelle vergleichen, lesen Sie unseren Leitfaden zum Cloud-MQTT-Broker.

Häufig gestellte Fragen

Ist Node-RED standardmäßig sicher?

Nein. Eine Standardinstallation hat keinen Editor-Login und liefert unverschlüsseltes HTTP aus. Sie müssen adminAuth aktivieren, HTTPS ergänzen und den Netzwerkzugriff einschränken, bevor Sie die Instanz über Ihren eigenen Rechner hinaus erreichbar machen.

Wie setze ich ein Passwort für den Node-RED-Editor?

Erzeugen Sie mit node-red admin hash-pw einen bcrypt-Hash, tragen Sie ihn im Abschnitt adminAuth von settings.js ein und starten Sie Node-RED neu.

Schützt adminAuth meine Dashboards und HTTP-Endpunkte?

Nein. Es deckt den Editor und die Admin-API ab. Für Flow-Endpunkte verwenden Sie httpNodeAuth, httpStaticAuth, die eigenen Optionen des Dashboards oder einen authentifizierenden Reverse Proxy.

Was passiert, wenn ich das Credential Secret verliere?

Node-RED kann flows_cred.json nicht mehr entschlüsseln, die gespeicherten Zugangsdaten sind verloren. Ihre Flows laden weiterhin, aber Sie müssen Passwörter wie die Zugangsdaten Ihres MQTT-Brokers neu eingeben.

Verwandte Artikel

Node-RED als OPC-UA-Client zu MQTT mit ISA-95-Topics

Mit node-red-contrib-opcua OPC-UA-Variablen auf einer SPS oder einem Simulationsserver abonnieren, Node-IDs auf MQTT-Topics im ISA-95-Stil abbilden und Werte mit Qualität und Zeitstempel publizieren.

9 Min. Lesezeit

Node-RED Diagramm-Verlauf: MQTT-Chartdaten über Neustarts hinweg behalten

Dashboard-Diagramme vergessen alles, wenn Node-RED neu startet. Dieser Leitfaden zeigt zwei zuverlässige Wege, den Node-RED Diagramm-Verlauf für MQTT-Daten zu behalten: dateibasierten Context-Speicher und eine kleine SQLite-Tabelle, beide beim Start in Dashboard 2.0 zurückgespielt.

8 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.