Inhalt dieser Seite
MQTT Connector – Sicherheit
Der MQTT Connector ist die Schnittstelle zwischen Ihrer Steuerung und den Pumpendaten. Wer sich am Broker anmelden kann, liest die Werte der Anlage; wer schreiben darf, gibt Messwerte vor. Deshalb schützt die App den Zugang in mehreren Ebenen, die aufeinander aufbauen. Keine Ebene genügt allein, zusammen ergeben sie einen belastbaren Schutz.
1. Netzwerk 2. TLS 3. Anmeldung 5. Schreib- 6. Wertprüfung
Steuerung ───► Firewall ───► verschlüsselt ─► Passwort ────► rechte ───► Typ, Min/Max, ───► Pumpendaten
4. Zertifikat je Gerät Schreibrecht
7. Überwachung: Weboberfläche, Logs, Statistik
Übersicht
| Ebene | Schützt vor | Im Auslieferungszustand | Wer stellt ein |
|---|---|---|---|
| 1. Netzwerk | Zugriff von fremden Rechnern | Broker auf Port 1883 im ganzen Netz erreichbar |
Betreiber (Firewall, Netzplanung) |
| 2. TLS | Mitlesen von Passwörtern und Werten | aus | Herborner Pumpen (Konfiguration), Betreiber (Zertifikat in der Steuerung) |
| 3. Anmeldung | Unbekannte Clients | an, anonyme Verbindungen sind immer gesperrt | Betreiber oder Herborner Pumpen |
| 4. Client-Zertifikat | Gestohlene Passwörter | aus, derzeit nicht einrichtbar | – |
| 5. Schreibrechte | Schreiben durch reine Lese-Systeme oder auf fremde Geräte | an: plc schreibt alles, monitor nichts |
Herborner Pumpen |
| 6. Wertprüfung | Falsche oder unzulässige Werte | an, nicht abschaltbar | – |
| 7. Überwachung | Unbemerkte Angriffe und Fehler | an | Betreiber (regelmäßig hinsehen) |
1. Netzwerk
Was es bringt: Ein Angreifer, der das Gerät gar nicht erreicht, kann auch nichts ausprobieren. Der Broker bremst falsche Anmeldeversuche nicht; das Netzwerk ist deshalb die erste und wichtigste Hürde.
So nutzen Sie es:
- Betreiben Sie das Gerät im Steuerungsnetz (OT-Netz) der Anlage, nicht im Büronetz und nie direkt am Internet.
- Lassen Sie per Firewall auf den MQTT-Port (
1883, mit TLS8883) nur die IP-Adressen der Steuerungen und Leitsysteme zu, die ihn brauchen. - Geben Sie die Weboberfläche nur für Service-Rechner frei. Sie arbeitet ohne Anmeldung und zeigt Werte, Protokolle und Benutzernamen – nie Passwörter.
Die Verbindung zur Herborner-Cloud baut HP.CloudLink auf, nicht der MQTT Connector. Für den MQTT Connector sind keine Verbindungen von außen in das Anlagennetz nötig.
2. Verschlüsselung (TLS)
Was es bringt: Ohne TLS gehen Benutzername, Passwort und alle Werte im Klartext über das Netz. Jeder, der im selben Netz mitschneidet, kann das Passwort lesen und sich danach selbst anmelden. Mit TLS ist die Verbindung verschlüsselt, und die Steuerung prüft anhand des Zertifikats, dass sie wirklich mit diesem Gerät spricht.
Ist TLS eingeschaltet, nimmt der Broker Verbindungen von außen nur noch verschlüsselt auf
Port 8883 an. Port 1883 ist dann nur noch für die App selbst innerhalb des Geräts
erreichbar.
Das Gerät weist sich mit einem eigenen Zertifikat aus, das die App selbst erzeugt (selbstsigniert). Der zugehörige private Schlüssel entsteht auf dem Gerät und verlässt es nie. Die Steuerung vertraut genau diesem Zertifikat; man nennt das Pinnen.
So nutzen Sie es:
-
TLS einschalten: Herborner Pumpen setzt in der Konfiguration unter
broker:Parameter Wert Bedeutung tls_enabledtrueTLS einschalten tls_port8883Port für verschlüsselte Verbindungen tls_subject_alt_namesz. B. ["plc-gateway.local"]zusätzliche Namen im Zertifikat, sonst leer Die App erzeugt daraufhin das Zertifikat. Darin stehen die IP-Adressen des Geräts, die FLECS meldet, und die Namen aus
tls_subject_alt_names. -
Port freigeben: Port
8883muss für die App in FLECS und in der Firewall freigegeben sein. -
Zertifikat herunterladen: In der Weboberfläche unter Telemetry, Zeile TLS, auf Download certificate klicken. Die Datei
mqtt-broker.crtenthält nur das Zertifikat, nie den Schlüssel. -
Fingerabdruck vergleichen: Dieselbe Zeile zeigt den SHA-256-Fingerabdruck; das Symbol daneben kopiert ihn. Vergleichen Sie ihn mit dem der heruntergeladenen Datei, etwa mit
openssl x509 -in mqtt-broker.crt -noout -fingerprint -sha256, oder mit dem Fingerabdruck, den Herborner Pumpen aus der Cloud nennt. So stellen Sie sicher, dass unterwegs niemand ein anderes Zertifikat untergeschoben hat. Steuerungen, die statt des Zertifikats nur den Fingerabdruck hinterlegen, bekommen ihn auf demselben Weg. -
Steuerung umstellen: Port
8883, TLS ein,mqtt-broker.crtals vertrauenswürdiges Zertifikat hinterlegen. Testen lässt sich das so:mosquitto_sub -h <IP-Adresse> -p 8883 --cafile mqtt-broker.crt -u plc -P <Passwort> -t HP/status -v
Gut zu wissen:
- Laufzeit und Erneuerung: Das Zertifikat gilt 10 Jahre. Nach zwei Dritteln der Laufzeit erzeugt die App ein neues; dann müssen alle Steuerungen das neue Zertifikat hinterlegen.
- Neue Adresse des Geräts: Bekommt das Gerät eine neue IP-Adresse, tauscht die App das
Zertifikat nicht von selbst aus, weil sonst alle Steuerungen auf einmal getrennt würden.
Die Zeile TLS zeigt die fehlende Adresse gelb an. Trägt Herborner Pumpen sie in
tls_subject_alt_namesein, erzeugt die App ein neues Zertifikat. Vergeben Sie dem Gerät deshalb eine feste IP-Adresse. - Lässt sich TLS nicht einrichten, arbeitet der Broker mit der bisherigen Einstellung weiter, und die Weboberfläche zeigt unter Broker Process den Fehler.
3. Anmeldung mit Benutzer und Passwort
Was es bringt: Nur wer Benutzername und Passwort kennt, verbindet sich mit dem Broker. Anonyme Verbindungen sind immer gesperrt, unabhängig von der Konfiguration. Ein Benutzer ohne Passwort kann sich nicht anmelden.
Ein sicheres Passwort wählen
Auf dem Gerät und in der Konfiguration steht nie das Passwort selbst, sondern nur sein Hash, eine Art Fingerabdruck. Aus dem Hash lässt sich das Passwort nicht zurückrechnen, wohl aber durch Ausprobieren erraten – bei kurzen oder gängigen Passwörtern schnell. Der Hash wird mit der Konfiguration auch in die Herborner-Cloud übertragen.
Verwenden Sie deshalb zufällig erzeugte Passwörter mit mindestens 20 Zeichen, etwa so (auf einem Rechner mit Python 3):
python3 -c 'import secrets; print(secrets.token_urlsafe(24))'
Die Steuerung speichert das Passwort ohnehin; niemand muss es sich merken.
Das Passwort setzen
Gesetzt wird das Passwort als Umgebungsvariable der App in FLECS (Weg A) oder in der Weboberfläche von eThemis, auf Anfrage auch durch Herborner Pumpen (Weg B). Auf das Gerät gelangt in beiden Fällen nur der Hash. Eine Umgebungsvariable hat Vorrang: Solange sie gesetzt ist, behält der Betreiber vor Ort die Hoheit über das Passwort. Bedenken Sie, dass jeder mit Zugriff auf die Einstellungen der App in FLECS die Variable lesen kann.
Die einzelnen Schritte stehen in der Inbetriebnahme unter Passwort setzen.
Passwort ändern oder Zugang sperren
- Ändern: neues Passwort auf einem der beiden Wege setzen und in der Steuerung hinterlegen. Die alte Anmeldung gilt ab dann nicht mehr.
- Sperren: Herborner Pumpen entfernt das Passwort oder den ganzen Benutzer aus der Konfiguration. Ist eine Umgebungsvariable gesetzt, muss auch sie entfernt werden, sonst trägt die App das Passwort beim nächsten Start wieder ein.
Die App meldet sich selbst mit einem eigenen, zufällig erzeugten Zugang am Broker an. Dieser steht nie in der Konfiguration und verlässt das Gerät nicht.
4. Client-Zertifikate
Was es bringt: Zusätzlich zum Passwort muss jede Steuerung ein Zertifikat vorweisen, das Ihre CA ausgestellt hat. Ein abgefangenes oder erratenes Passwort genügt dann nicht mehr; der Angreifer bräuchte auch das Zertifikat mit dem zugehörigen privaten Schlüssel aus der Steuerung. Das entspricht einer Anmeldung mit zwei Faktoren: etwas, das man weiß (Passwort), und etwas, das man hat (Zertifikat).
Stand: Der Broker kann Client-Zertifikate prüfen, die CA dafür lässt sich aber noch nicht auf das Gerät bringen. Sobald es dafür einen Weg gibt, beschreibt ihn diese Seite. Benutzername und Passwort bleiben auch dann nötig.
5. Schreibrechte je Gerät
Was es bringt: Jeder Benutzer darf nur schreiben, was er für seine Aufgabe braucht. Ein Leitsystem, das nur anzeigt, kann so keine Werte vorgeben, und die Steuerung einer Halle keine Pumpe der anderen – selbst wenn ihr Passwort in falsche Hände gerät.
Lesen dürfen alle Benutzer alle Topics unter HP/. Schreiben legt die Liste write je
Benutzer fest:
write |
Darf schreiben | Typischer Einsatz |
|---|---|---|
["+"] |
die Command-Topics aller Pumpen und Entities | eine Steuerung für die ganze Anlage |
["pump"] bzw. ["entity"] |
alle Pumpen bzw. alle Entities | getrennte Steuerungen für Pumpen und Entities |
["pump/AB-2400654-010-01"] |
nur diese Pumpe, über ihre Seriennummer | eine Steuerung je Pumpe |
[] |
nichts | Visualisierung, Leitsystem, Datenaufzeichnung |
Ein Recht über die Nummer (pump/1) gilt nur für den Pfad über die Nummer und folgt bei einer
Umnummerierung nicht dem Gerät; für feste Zuordnungen die Seriennummer verwenden. Die Rechte
setzt der Broker durch, bevor ein Befehl die App erreicht.
Kein Benutzer darf die State-Topics, HP/status, HP/error oder HP/response/… beschreiben.
Diese Topics schreibt nur die App; wer sie liest, kann sich auf ihre Herkunft verlassen.
So nutzen Sie es:
- Geben Sie Systemen, die nur lesen, einen Benutzer ohne Schreibrechte (
write: []), etwamonitor. - Legen Sie für jede Steuerung einen eigenen Benutzer an, etwa
plc_halle1undplc_halle2, und beschränken Sie ihn auf die Geräte, die sie steuert. So lässt sich ein einzelner Zugang sperren, ohne die anderen anzuhalten, und das Log zeigt, wer sich angemeldet hat. - Prüfen Sie unter Telemetry die Spalte write access: Sie zeigt je Datenpunkt, wer ihn
schreiben darf. Jeder Benutzer muss
writehaben; ein Benutzer ohne die Angabe wird abgelehnt, damit niemand versehentlich alles schreiben darf. - Weitere Benutzer legt Herborner Pumpen in der Konfiguration an. Benutzernamen bestehen aus
Kleinbuchstaben, Ziffern und
_, beginnen mit einem Buchstaben und sind höchstens 32 Zeichen lang.
6. Prüfung jedes Befehls
Was es bringt: Auch ein angemeldeter Benutzer mit Schreibrecht kann nur gültige Werte vorgeben. Diese Prüfung ist immer aktiv und nicht abschaltbar.
- Datentyp und Grenzen: Jeder Wert muss zum Datenpunkt passen und innerhalb von Min/Max liegen (Standard-Konfiguration). Sonst wird er verworfen.
- Schreibrecht: Nur beschreibbare Datenpunkte nehmen Werte an; Kennwerte wie der Wirkungsgrad lassen sich nicht überschreiben.
- Keine retainten Befehle: Ein Befehl mit Retain-Flag würde nach jedem Neustart erneut ausgeführt. Die App verwirft ihn und löscht ihn auf dem Broker.
- Antworten nur unter
HP/response/: Die App antwortet nicht auf beliebige Topics, die ein Client vorgibt. So kann niemand die App dazu bringen, mit ihren Rechten an fremde Stellen zu schreiben. - Schutz vor Überlastung: Nachrichten sind standardmäßig auf 256 KiB begrenzt, wartende Befehle auf 1000. Was darüber hinausgeht, wird verworfen statt den Speicher zu füllen.
Jeder abgelehnte Befehl erscheint mit Grund auf HP/error und in der Statistik.
7. Überwachung
Was es bringt: Ein Schutz, den niemand überprüft, fällt nicht auf, wenn er versagt. Die Weboberfläche zeigt alles, was Sie dafür brauchen:
| Wo | Was Sie sehen | Worauf Sie achten |
|---|---|---|
| Telemetry → Zustand | Broker-Prozess, Anzahl verbundener Clients, anmeldbare Benutzer | Mehr Clients als Steuerungen (plus die App selbst)? Benutzer ohne Passwort? |
| Logs | Meldungen des Brokers (mit Mosquitto: gekennzeichnet): An- und Abmeldungen, abgelehnte Anmeldungen |
Häufige abgelehnte Anmeldungen (not authorised) von unbekannten Adressen |
| Statistics | abgelehnte Befehle, Verbindungsabbrüche | Plötzlich viele abgelehnte Befehle |
Protokolle und Ereignisse gehen über HP.CloudLink auch an die Herborner-Cloud.
Bei Auffälligkeiten: Passwörter der betroffenen Benutzer ändern, Firewall-Regeln prüfen und Herborner Pumpen informieren.
Empfohlene Schutzstufen
| Stufe | Geeignet für | Maßnahmen |
|---|---|---|
| Basis (Auslieferung) | abgeschottetes Steuerungsnetz mit wenigen, bekannten Geräten | Passwort für jeden Benutzer, Schreibrechte, Wertprüfung |
| Empfohlen | übliches Anlagennetz | zusätzlich: zufällige Passwörter (≥ 20 Zeichen), TLS, Firewall nur für die Steuerungen, eigener Benutzer je Steuerung mit Schreibrechten nur für ihre Geräte, write: [] für alle lesenden Systeme |
| Hoch | Netze mit vielen Teilnehmern, Fernzugriff, kritische Infrastruktur | zusätzlich: Passwörter nur per Umgebungsvariable vor Ort, Logs regelmäßig prüfen; Client-Zertifikate, sobald einrichtbar |
Checkliste zur Inbetriebnahme
- Gerät im Steuerungsnetz, MQTT-Port nur für die Steuerungen freigegeben.
- Für jeden benötigten Benutzer ein eigenes, zufälliges Passwort gesetzt; Users in der Weboberfläche ist grün.
- Nicht benötigte Benutzer, etwa ein ungenutzter
monitor, haben kein Passwort und sind damit gesperrt. - TLS eingeschaltet, Fingerabdruck verglichen, Steuerungen verbinden sich auf Port
8883. - Lesende Systeme verwenden einen Benutzer ohne Schreibrechte (
write: []); jede Steuerung darf nur ihre Geräte schreiben (Spalte write access). - Weboberfläche nur von Service-Rechnern erreichbar.
Grenzen
Diese Punkte sollten Sie bei der Bewertung kennen:
- Weboberfläche ohne Anmeldung: Sie zeigt Werte, Protokolle und Benutzernamen, aber keine Passwörter. Schützen Sie sie über das Netzwerk (Ebene 1).
- Fehlanmeldungen werden nicht gebremst: Der Broker sperrt nach falschen Passwörtern nicht. Lange, zufällige Passwörter und eine enge Firewall gleichen das aus.
- Konfiguration über die Cloud: Herborner Pumpen kann über die Cloud Benutzer, Schreibrechte, TLS-Einstellungen und Passwort-Hashes ändern und damit auch Zugänge zum Broker anlegen. Passwörter per Umgebungsvariable haben Vorrang vor der Cloud; neue Benutzer kann Herborner Pumpen dennoch anlegen.
- Andere Apps auf dem Gerät: Die Apps tauschen Daten und Konfigurationen über einen gemeinsamen Datenbus aus. Konfigurationen und Befehle nimmt die App nur noch signiert von den Herborner-Apps an. Mitlesen können andere Apps auf dem Gerät aber, solange der Bus nicht verschlüsselt ist. Installieren Sie deshalb nur Apps aus vertrauenswürdiger Quelle.
- Fremder Broker: Verbindet sich die App mit einem vorhandenen Broker der Anlage statt
mit ihrem eigenen, gelten dessen Schutzmaßnahmen. Die App verbindet sich dann ohne TLS,
ihre Zugangsdaten liegen in
data/mosquitto/credentials.jsonauf dem Gerät.
Mehr zur Funktion der App steht in der Funktionsbeschreibung.