MQTT-Broker mit Mosquitto unter Ubuntu 20.04 installieren
Bei Mosquitto handelt es sich um einen freien und quelloffenen Nachrichtenbroker, der auf dem MQTT-Protokoll basiert – kurz für Message Queuing Telemetry Transport. Es arbeitet im Rahmen des TCP/IP-Protokollstapels und stellt eine zentrale Kommunikationslösung für Anwendungen im Bereich Internet of Things (IoT) dar.
Vorteile von MQTT für Geräte mit begrenzten Ressourcen
Dank seiner äußerst kompakten Bauweise eignet sich das MQTT-Protokoll hervorragend für Systeme mit eingeschränkten Geräteeigenschaften. Es ist ideal für Endgeräte mit geringer Akkuleistung, schmaler Netzwerkbandbreite oder unzuverlässiger Internetverbindung.
Funktionsweise von Mosquitto
Mosquitto basiert auf dem Publisher-Subscriber-Prinzip. In dieser Struktur bauen Clients eine Verbindung zum Mosquitto-Server auf, der als Vermittler fungiert. Der Server übermittelt Nachrichten von Publishern gezielt an alle Clients, die bestimmte Themen (Topics) abonniert haben.
Ziel dieses Leitfadens
In dieser Anleitung wird erklärt, wie man den MQTT-Broker mithilfe von Mosquitto auf einem System mit Ubuntu 20.04 einrichtet. Zudem erfährst du, wie Mosquitto konfiguriert wird, um zu verstehen, wie das ereignisgesteuerte MQTT-Protokoll die Kommunikation in IoT-Szenarien ermöglicht.
Voraussetzungen
Um dieses Tutorial vollständig durchführen zu können, benötigst du Folgendes:
- Einen Server mit installiertem Ubuntu 20.04.
- Ein Benutzerkonto mit sudo-Rechten (kein Root-Zugang).
Mosquitto unter Ubuntu 20.04 installieren
Um das Mosquitto-Paket aus den offiziellen Ubuntu-Paketquellen zu beziehen und den MQTT-Broker zu installieren, befolge diese Schritte. Dieser Abschnitt zeigt dir, wie Mosquitto unter Ubuntu eingerichtet wird.
Verbinde dich zuerst per SSH mit deinem Server und aktualisiere die Paketinformationen:
$ sudo apt update
Installiere anschließend das Mosquitto-Paket mit folgendem Befehl:
$ sudo apt install -y mosquitto
Das Mosquitto-Paket sollte nun auf deinem System installiert sein. Um zu überprüfen, ob der Dienst aktiv ist, verwende folgenden Befehl:
$ sudo systemctl status mosquitto
Stelle sicher, dass der Dienst geladen und aktiv ist. Die Ausgabe sollte in etwa wie folgt aussehen:
● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor pr>
Active: active (running) since Fri 2021-10-08 06:29:25 UTC; 12s ago
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
Sobald der Mosquitto-Dienst läuft, kannst du ihn mit den folgenden Kommandos steuern:
Dienst stoppen:
$ sudo systemctl stop mosquitto
Dienst erneut starten:
$ sudo systemctl start mosquitto
Dienst neu starten:
$ sudo systemctl restart mosquitto
Mosquitto-Clients unter Ubuntu installieren und testen
MQTT-Clients verbinden sich mit dem Mosquitto-Broker, um Nachrichten über verschiedene Themenbereiche (Topics) zu senden und zu empfangen – je nach Anwendungsfall. Jeder Client kann als Publisher, Subscriber oder in beiden Rollen fungieren. Um diese Funktionalität zu testen, installierst du zunächst den Mosquitto-Client unter Ubuntu.
Im Mosquitto-Paket ist ein Kommandozeilen-Tool enthalten, mit dem sich die Serverfunktionen einfach testen lassen. Verwende den folgenden Befehl zur Installation des Clients:
$ sudo apt install -y mosquitto-clients
Nach der Installation kannst du dich auf ein bestimmtes Topic abonnieren. In MQTT bezeichnet ein Topic eine Zeichenkette, die der Broker verwendet, um Nachrichten an passende Clients weiterzuleiten. Ein Smart-Home-System könnte beispielsweise folgende Topics verwenden:
home/lights/sitting_room
home/lights/kitchen
home/lights/master_bedroom
home/lights/kids_bedroom
Um eines dieser Topics zu abonnieren, verwende den Befehl mosquitto_sub -t
gefolgt vom Topic-Namen. Um beispielsweise das Topic home/lights/sitting_room
zu abonnieren, gib Folgendes ein:
$ mosquitto_sub -t "home/lights/sitting_room"
Dieser Befehl blockiert das Terminal und hält es offen, um eingehende Nachrichten zu empfangen.
Öffne nun ein zweites Terminalfenster und lasse das erste geöffnet. Sende aus dem neuen Fenster eine ON
-Nachricht an das Topic home/lights/sitting_room
mit folgendem Befehl:
$ mosquitto_pub -m "ON" -t "home/lights/sitting_room"
Im ersten Terminal sollte nun die Nachricht ON
erscheinen:
ON
Als Nächstes sendest du eine weitere Nachricht – diesmal OFF
– an dasselbe Topic mit folgendem Befehl:
$ mosquitto_pub -m "OFF" -t "home/lights/sitting_room"
Im ersten Terminal sollten nun beide Nachrichten angezeigt werden:
ON
OFF
In dieser Anleitung wurden MQTT-Nachrichten manuell mit den Mosquitto-Clients abonniert und veröffentlicht. In der Praxis übernehmen diese Aufgaben meist Mikrocontroller, die TCP/IP unterstützen – etwa der ESP8266. Solche Geräte senden Nachrichten an den Broker, um Geräte zu überwachen oder zu steuern.
Echte Anwendungsbeispiele für Mosquitto
- Übertragung von Herzfrequenzdaten von Patienten an Krankenhausserver zur Fernüberwachung – so werden teure Klinikbesuche vermieden.
- Überwachung von Messwerten in der Öl- und Gasindustrie, bei der tausende Sensoren per Satellit Daten an zentrale Systeme senden. Durch die geringe Datenlast von MQTT werden Informationen nur bei Bedarf übertragen.
- Echtzeit-Verfolgung von Zügen im Transportwesen, um zentral bessere Fahrplanauskünfte für Reisende bereitzustellen.
- Einsatz als Vermittlungsschicht in Messaging-Systemen zur Aktualisierung von Nutzerstatus und Nachrichtenweiterleitung.
- Integration in Speichersysteme, bei denen Clients Daten an den Broker schicken, der sie wiederum dauerhaft in einer Datenbank speichert.
Neben diesen Szenarien gibt es zahlreiche Bibliotheken, mit denen sich Verbindungen zum Mosquitto-Broker in beliebten Programmiersprachen wie PHP, Python, Go und vielen weiteren aufbauen lassen.
Den Mosquitto-Server unter Ubuntu absichern
Standardmäßig besitzt Mosquitto keine aktive Sicherheitskonfiguration. Um deine Installation zu schützen, kannst du den Server so einrichten, dass Benutzername und Passwort für Verbindungen erforderlich sind.
Die Konfigurationsdateien lädt Mosquitto aus folgendem Verzeichnis:
/etc/mosquitto/conf.d
Lege in diesem Verzeichnis eine Datei mit dem Namen default.conf
an:
$ sudo nano /etc/mosquitto/conf.d/default.conf
Füge folgende Anweisungen hinzu, um anonyme Verbindungen zu blockieren und den Pfad zur Passwortdatei festzulegen:
allow_anonymous false
password_file /etc/mosquitto/passwd
Speichere die Datei und schließe sie.
Bearbeite nun die Passwortdatei mit folgendem Befehl:
$ sudo nano /etc/mosquitto/passwd
Trage die Zugangsdaten der Benutzer ein, die sich mit dem Mosquitto-Server verbinden sollen. Ersetze die Beispielpasswörter durch sichere Varianten:
john_doe:EXAMPLE_PASSWORD
mary_smith:EXAMPLE_PASSWORD_2
Verschlüssele die Passwörter anschließend mit dem mosquitto_passwd
-Tool:
$ sudo mosquitto_passwd -U /etc/mosquitto/passwd
Die Passwörter sind nun verschlüsselt gespeichert und nur vom Mosquitto-Server lesbar. Mit folgendem Befehl kannst du den Inhalt prüfen:
$ sudo cat /etc/mosquitto/passwd
Die Ausgabe sollte in etwa so aussehen:
john_doe:$6$TSzNycsj...5Qyvgd4g==
mary_smith:$6$DtlKf1lG.../rLHIL0Q==
Starte den Mosquitto-Dienst neu, um die Änderungen zu aktivieren:
$ sudo systemctl restart mosquitto
Ab sofort musst du dich beim Veröffentlichen oder Abonnieren authentifizieren. Beispiel:
$ mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room"
$ mosquitto_pub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" -m "ON"
Verbindungen ohne oder mit falschen Anmeldedaten sollten jetzt scheitern. Beispiele:
$ mosquitto_pub -m "ON" -t "home/lights/sitting_room"
$ mosquitto_sub -t "home/lights/sitting_room"
$ mosquitto_sub -u john_doe -P WRONG_PASSWORD -t "home/lights/sitting_room"
$ mosquitto_pub -u john_doe -P WRONG_PASSWORD -t "home/lights/sitting_room" -m "ON"
Erwartete Ausgabe:
...
Connection error: Connection Refused: not authorised.
Fazit
In dieser Anleitung hast du gelernt, wie man den MQTT-Broker Mosquitto unter Ubuntu 20.04 installiert und konfiguriert. Außerdem wurde gezeigt, wie man über die Kommandozeile Nachrichten abonniert und veröffentlicht. Mosquitto ist eine hervorragende Wahl für IoT-Anwendungen.