Dieses Buch steht im Regal EDV sowie im Regal Anleitungen. Zielgruppe: Freizeit, Beruf Lehrbuch


Zusammenfassung des Projekts

Bearbeiten

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 0 % fertig

  • Zielgruppe: Menschen, die MQTT als Transportsystem benutzen
  • Projektumfang: Die Konfiguration und Abhärten eines MQTT-Brokers für unterschiedliche Anwendungen wird beschrieben.

Titelseite

Bearbeiten

Autoren sind aus der Versionsgeschichte dieses Buches und aller Unterkapitel ersichtlich.

Initiiert wurde dieses Projekt am 01.01.2021 von ademant, welcher MQTT-Broker sowohl beruflich als auch privat nutzt.

Haftung / Gewähr

Bearbeiten

Diese Anleitung soll einen sicheren Zustand beschreiben, so dass alle Nutzer hinter dem Router einigermaßen sicher arbeiten können. Die einzelnen Punkte spiegeln aber nur den Sicherheitszustand zu einem bestimmten Zeitpunkt dar. Die Anleitung ist für Privatanwender gedacht. Im geschäftlichen Bereich sind andere Anforderungen bezüglich Sicherheit zu erfüllen.

Es existieren verschiedene Anleitungen, welche nur einzelne Aspekte eines MQTT-Brokers beschreiben. In dieser Anleitungen sollen verschiedene Szenarien beschrieben werden, unter anderem, wie MQTT sicher über das Internet betrieben werden kann.

Einleitung

Bearbeiten

Das MQTT-Protokoll wird sowohl privat als auch industriell zur Übertragung von Telemetriedaten und Anweisungen verwendet. MQTT wird hierbei als Infrastruktur unter Anderem für Anwendungen im Smart Home verwendet. Verschiedene Geräte zur Datenaufnahme (Temperatur, Helligkeit etc.) sind verteilt und eine zentrale Instanz steuert Aktoren wie Heizregler.

Einsatzzweck

Bearbeiten
 
MQTT Broker mit verschiedenen Clients, die Daten zuliefern bzw. abfragen.

Im privaten Bereich wird MQTT für Smart Home Anwendungen verwendet. Telemetriedaten werden an einem zentralen Broker gesammelt und auch Anweisungen können zentral über einen MQTT-Broker verteilt werden. Mit MQTT ist es möglich, Daten verschiedener Sensoren über Platzhalter abzufragen.

Im industriellen Umfeld wird MQTT zur Anbindung von Aggregaten verwendet.

Funktionsweise

Bearbeiten

MQTT verwendet Broker als zentrale Komponente. Der Broker empfängt Daten, hält diese vor und stellt diese Daten anderen Geräten zur Verfügung. Diese Daten werden über Topics verwaltet. Ein Datum wird unter einem Topic veröffentlicht (published) und kann von anderen Geräten unter diesem Topic abonniert (subscribed) werden. Das Topic kann in einer Baumform strukturiert werden, wobei der Schrägstrich / als Trenner verwendet wird.

In einer einfachen Heimautomation können die Topics wie folgt strukturiert sein (siehe obige Grafik):

/plug1/voltage

/plug1/current

/plug1/state

/plug2/voltage

/plug2/current

/plug2/state

/thermo/temperature

Jedes Gerät kann den entsprechenden Status über den Topic veröffentlichen. Ein Abonnent kann verschiedene Topics abonnieren. Hierbei helfen die Platzhalter + und #. Mit der Raute # werden alle Topics unterhalb erfasst, mit dem + nur die Topics, die sich an der entsprechenden Stelle unterscheiden. In obiger Grafik abonniert das Laptop mit /plug1/# alle Topics des Zwischensteckers plug1, also /plug1/voltage, /plug1/current und /plug1/state. Das Smartphone abonniert mit /+/current alle Topics, die im dritten Feld mit current enden, also /plug1/current und /plug2/current, dagegen kein Topic des Thermometers, da dieser kein Subtopic current besitzt.

Die Zwischenstecker können per MQTT geschaltet werden. Hierzu abonnieren sie vom Broker das zu ihnen gehörige Subtopic state. Ein Abonnent könnte hiermit basierend auf der Temperatur die Zwischenstecker ein- oder ausschalten. Hierbei müssen die Topics explizit genannt werden, da die Platzhalter nicht für das Veröffentlichen gültig sind. Ein Einschalten über /+/state ist nicht möglich.

Zu diesen Topics werden die Inhalte (Payload) gespeichert bzw. veröffentlicht (published) und können von verschiedenen Geräte abonniert werden (subscription). Der Broker informiert alle Abonennten über neue Inhalte der abonnierten Topics. Eine Form für die Payload wird nicht definiert, so dass in einer Installation die Clients selbst wissen müssen, in welchem Format die Daten gespeichert werden. Im einfachsten Fall werden nur einzelne Werte gespeichert. Es können aber beispielsweise auch JSON oder XML Objekte verwendet werden.

Nutzername

Bearbeiten

Clients können sich am Broker mit einem Nutzernamen anmelden. Anhand des Nutzernamens lassen sich Einschränkungen definieren, welche Topics nutzbar sind.

Client ID

Bearbeiten

Unabhängig vom Nutzernamen verwendet jeder Client eine eigene ID, mit der sich der Client am Broker anmeldet. Diese ID wird bei der Umsetzung der Quality of Service Level 1 und 2 verwendet. Zudem kann anhand der Client ID der Zugriff zu einzelnen Topics geregelt werden.

Quality of Service (QoS)

Bearbeiten

Zur Verarbeitung von Daten sind folgende drei QoS-Level definiert:

0 (default)
at most once - maximal einmal: Die Daten werden maximal einmal übertragen. Bei Verbindungsabbrüchen können Nachrichten verloren gehen.
1
at least once - mindestens einmal: Die Daten werden mindestens einmal übertragen. Erfolgt von der Gegenstelle keine Empfangsbestätigung, wird die Nachricht wiederholt gesendet.
2
exact once - genau einmal: Die Daten werden an die Gegenstelle exakt einmal übertragen.

Das QoS-Level 0 wird standardmäßig verwendet. Solange eine aktive Verbindung zum Broker besteht, werden die Daten übertragen. Bricht die Verbindung ab, werden keine weiteren Daten übertragen. Wird die Verbindung wieder aufgebaut, werden neue Daten wieder übertragen. In der Zwischenzeit angefallen Daten sind verloren.

QoS-Level 1 versucht Probleme in einer aktiven Verbindung zu kompensieren. Die Gegenstelle muss den Empfang einer Nachricht quittieren, womit die Nachricht aus dem Ausgangspuffer entfernt wird. Erfolgt die Quittierung nicht, wird die Nachricht als Duplikat markiert weitergesendet.

Bei QoS-Level 2 wird die Nachrict exakt einmal an eine Gegenstelle gesendet. Hierzu verwendet der Broker für jeden angemeldeten Client dessen ID für einen Ausgangspuffer. Meldet sich der Client ordnungsgemäß ab, wird der Ausgangspuffer deaktiviert und es werden keine Nachrichten gemerkt. Wird die Verbindung unterbrochen, beläßt der Broker alle Nachrichten im Ausgangspuffer, bis sich der Client wieder anmeldet. Dann werden alle Nachrichten in der entsprechenden Reihenfolge übertragen.

Implementationen

Bearbeiten

Mittlerweile gibt es einige Programme, welche MQTT als Broker bzw. Client zur Verfügung stellen. Eine Übersicht ist in der englischsprachigen Wikipedia zu finden: MQTT-Implementierungen.

Aus diesen sticht Mosquitto hervor. Aufgrund der weiten Verbreitung ist dies fast schon eine Referenzimplementierung. Mosquitto ist zudem für eine Vielzahl an Architekturen verfügbar und kann z.B. auch auf einem [Heimrouter-Kochbuch|OpenWRT-Router] installiert werden.

Konfiguration

Bearbeiten

Broker abhärten

Bearbeiten

Konfiguration

Bearbeiten

Firewall

Bearbeiten

Nutzerverwaltung

Bearbeiten

Einsatzszenarien

Bearbeiten

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 80 % fertig Dies ist die Standardkonfiguration, wenn Mosquitto auf einem unixoiden System aus den Paketquellen installiert wird.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 80 % fertig Ein MQTT-Broker kann auf verschiedenen Ports lauschen und dort teils abweichende Konfigurationen haben. Dennoch ist der gesamte Topic-Baum auf allen Ports verfügbar.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 0 % fertig Etwas mehr Aufwand ist nötig, um auch einen Rechner mehrere Broker parallel zu nutzen, welche getrennte Topics verwenden.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 80 % fertig Sowohl zur Authentifizierung als auch für Rechteverwaltung können Nutzer eingerichtet werden.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 90 % fertig Speziell zur Kommunikation in einem tendenziell unsicheren Netzwerk dient die TLS-Verschlüsselung, um Daten nicht unverschlüsselt zu übertragen.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 0 % fertig TLS-Zertifikate können zudem genutzt werden, um den Zugriff auf einen Broker einzugrenzen. Mit TLS-Zertifikaten kann eine PKI (Public Key Infrastructure) verwendet werden, mit der Nachteile einer Nutzername/Passwort-System beseitigt werden kann.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 0 % fertig Je nach Netzwerktopologie macht es Sinn, mehrere Broker einzurichten und diese miteinander zu verbinden. Beispiel sind zwei Netzwerksegmente, welche über eine Firewall miteinander verbunden sind.

  „MQTT-Broker einrichten“ ist nach Einschätzung seiner Autoren zu 0 % fertig Ein Client kann für Verbindungen mit mehreren Broker eingerichtet werden; falls ein Broker ausfällt, wird direkt der nächste Broker verwendet.


Dieses Lehrwerk ist erst vor kurzem angelegt worden. – Nützliche Hinweise findest du im Wikibooks-Lehrbuch. – Bei Problemen kannst du unter diesem Link um Hilfe bitten. – Diskussionen zu diesem Buch führst du auf dieser Seite. – (Datum im Format Jahr_Monat_Tag: 20210101))

Details zu diesem Baustein erfährst du unter diesem Link.