MQTT mit Mosquitto: Installation, Konfiguration und Nutzung

Wenn du schon immer ein MQTT-Broker-Setup für dein Smart-Home-Projekt oder dein IoT-Experiment aufbauen wolltest, bist du hier genau richtig. Mosquitto, der Open-Source-MQTT-Broker, ist schnell eingerichtet und vielseitig einsetzbar. In diesem Beitrag zeige ich dir, wie du Mosquitto direkt auf einem Debian-System installierst oder wie du es als Docker-Container betreiben kannst. Zusätzlich erkläre ich, wie du den MQTT-Server konfigurierst, Benutzer anlegst und dich mit dem MQTT-Explorer unter Windows verbindest. Außerdem gehen wir auf das Rechtekonzept und die Nutzung von Bridges ein.

Was ist MQTT bzw. ein MQTT-Server?

MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Nachrichtenprotokoll, das speziell für die Kommunikation zwischen Geräten mit begrenzten Ressourcen oder für den Betrieb in ressourcensparenden Netzwerken entwickelt wurde. Es basiert auf einem Publish/Subscribe-Modell, bei dem ein zentraler MQTT-Server (auch „Broker“ genannt) als Vermittler fungiert. Geräte (Clients) können Nachrichten an sogenannte Topics senden (Publish) oder diese abonnieren (Subscribe).

Ein MQTT-Server wie Mosquitto nimmt Nachrichten entgegen, prüft die Abonnements und leitet die Informationen effizient an die richtigen Geräte weiter. Das macht MQTT ideal für Anwendungen wie Smart Homes, IoT-Projekte und Automatisierungssysteme.

 

 

Mosquitto direkt auf Debian installieren

  1. Vorbereitungen
    Wie üblich aktualsieren wir zuerst unser System:
  2. Installation von Mosquitto
    Anschließend installieren wir den Broker und die zugehörigen Clients:
  3. Starten und Aktivieren von Mosquitto
  4. Prüfen, ob der Broker läuft

 

 

Mosquitto als Docker-Container installieren

  1. Docker installieren (falls nicht vorhanden):
  2. Mosquitto-Container starten
    Dazu erstellen wir ein Verzeichnis für die Konfiguration:

    Wir starten anschließend den Container:

 

 

Konfiguration des MQTT-Servers bei einer Installation auf Debian

Die Mosquitto-Konfiguration wird über die Datei mosquitto.conf vorgenommen.

  1. Anonyme Verbindungen deaktivieren
    Um zu verhindern, dass ungebetene Gäste sämtliche Daten mitlesen und vor allem verfälschte Daten auf den Broker schreiben können, deaktivieren wir die anonyme Anmeldung und erstellen einen neuen Nutzer. Dazu öffne die Konfigurationsdatei:

    Füge folgende Zeilen hinzu:
  2. Benutzer anlegen
    Erstelle ein Passwort für einen Benutzer:

    Starte den Broker neu:

 

 

Konfiguration des MQTT-Servers in einem Docker-Container

  • Bearbeite die Konfigurationsdatei im Verzeichnis ~/mosquitto/config/mosquitto.conf und setze allow_anonymous auf false:
  • Erstelle die Passwortdatei:
  • Starte den Docker-Container neu, damit die Änderungen wirksam werden:

Jetzt ist die anonyme Anmeldung deaktiviert und der Benutzer „username“ angelegt.

 

 

Rechtekonzept

Mosquitto unterstützt die Vergabe von Rechten auf Basis der Benutzer. Über die Datei acl_file kannst du festlegen, wer welche Topics lesen oder beschreiben darf.

  1. ACL-Datei erstellen: Erstelle die Datei /etc/mosquitto/acl mit folgendem Inhalt:

    Dies erlaubt dem Benutzer username, alle Topics unter home/ zu lesen, aber nur das Topic home/livingroom/temperature zu schreiben.
  2. Konfiguration anpassen: Füge in der Datei mosquitto.conf folgende Zeile hinzu:
  3. Broker neu starten:

Bridges: MQTT-Broker verbinden

Eine Bridge verbindet zwei MQTT-Broker, sodass Nachrichten zwischen ihnen ausgetauscht werden können. Dies ist nützlich, um lokale Netzwerke mit entfernten Standorten zu verbinden.

  1. Bridge-Konfiguration
    Bearbeite die Datei mosquitto.conf und füge folgenden Abschnitt hinzu:

    • local/topic: Das lokale Topic
    • remote/topic: Das Topic auf dem entfernten Broker
    • both: Nachrichten fließen in beide Richtungen
      Alternativ dazu:
      in: Topic wird von deinem Server nur „aboniert“, es fließen also nur daten von dem entfernten Server zu dir
      out: Du leitest lediglich auf deinem Broker ankommende Daten an den entfernten Server weiter.
    • 0: Die QoS-Stufe (Quality of Service)
  2. Bridge-Konfiguration mit dem gleichen lokalen und entfernten Topic
    Wenn die Topics auf beiden Seiten gleich lauten, reicht es, in der oben gezeigten Konfiguration nur ein gemeinsames Topic anzugeben. Also füge deiner Konfiguration folgendes hinzu:
  3. Broker neu starten

 

 

Verbindung über den MQTT-Explorer herstellen

  1. MQTT-Explorer herunterladen und installieren
    Lade den MQTT-Explorer von der offiziellen Website herunter: MQTT-Explorer.
  2. Mit dem Broker verbinden
    • Starte den MQTT-Explorer.
    • Erstelle eine neue Verbindung.
      • Hostname: IP-Adresse oder Domain deines Mosquitto-Brokers
      • Port: 1883
      • Benutzername und Passwort: Deine zuvor erstellten Anmeldedaten
  3. Nachrichten senden und abonnieren:
    • Veröffentliche eine Nachricht:
      • Topic: test/topic
      • Nachricht: Hello World
    • Abonniere das Topic und prüfe, ob die Nachricht empfangen wird.

 

 

MQTT-Topics abonnieren

Um Nachrichten zu empfangen, musst du ein Topic abonnieren. Das funktioniert mit Tools wie mosquitto_sub oder einem MQTT-Client wie MQTT-Explorer.

  1. Ein einzelnes Topic abonnieren:

    Hier abonnierst du Nachrichten vom Topic home/livingroom/temperature.
  2. Wildcards verwenden:
    • + (einzelnes Level): Mit + kannst du eine beliebige, einzelne Ebene im Topic-Pfad ersetzen:

      Das abonniert alle Temperatur-Nachrichten aus beliebigen Räumen, z. B. home/livingroom/temperature oder home/kitchen/temperature.
    • # (mehrere Level): Mit # abonnierst du alles, was unterhalb eines bestimmten Punktes im Topic-Pfad liegt:

      Hiermit abonnierst du Nachrichten wie home/livingroom/temperature, home/kitchen/humidity oder sogar home/basement/lights/status.

 

 

Sichere Verbindungen mit TLS

Einrichtung für eine Installation unter Debian

Vorbereitung: Zertifikate erstellen
  1. Erstelle ein selbstsigniertes Zertifikat (falls kein offizielles Zertifikat genutzt wird):

    Während der Erstellung wirst du nach verschiedenen Details gefragt (Ländername, Organisation etc.). Diese Informationen kannst du ausfüllen, musst du aber nicht.

  2. Stelle sicher, dass nur der Broker Zugriff auf die Schlüsseldatei hat:

 

Konfiguration des Mosquitto-Brokers
  1. Bearbeite die mosquitto.conf-Datei:

    Füge folgende Zeilen hinzu:

    • listener 8883: Aktiviert den TLS-Listener auf Port 8883 (standardmäßig für MQTT über TLS).
    • cafile: Gibt die Zertifikatsdatei an.
    • certfile: Gibt das Broker-Zertifikat an.
    • keyfile: Gibt den privaten Schlüssel des Brokers an.
  2. Optionale Einstellungen:
    • Um nur TLS-Verbindungen zuzulassen, deaktiviere den Standardlistener (Port 1883):

      Kommentiere die Zeile aus oder entferne sie.

    • Alternativ kannst du beide Listener parallel betreiben (Port 1883 für unverschlüsselt und Port 8883 für TLS).

 

Mosquitto neu starten

Nach der Anpassung der Konfiguration muss der Broker wieder neu gestartet werden:

 

 

Einrichtung für eine Installation als Docker-Container

1. Zertifikate vorbereiten

Wenn du noch keine Zertifikate hast, erstelle ein selbstsigniertes Zertifikat:

Achte darauf, dass der Common Name (CN) beim Erstellen des Zertifikats mit der Hostadresse deines Brokers übereinstimmt.

2. TLS-konfigurierter Mosquitto-Container
  1. Erstelle das Konfigurationsverzeichnis:

  2. Kopiere die Zertifikate ins Verzeichnis:

  3. TLS-Konfiguration in mosquitto.conf hinzufügen
    Bearbeite dazu die Datei ~/mosquitto/config/mosquitto.conf:

  4. Docker-Container starten
    Starte Mosquitto mit TLS-Unterstützung:

 

Verbindung mit TLS testen

  1. Mit Mosquitto-Client:

  2. Mit MQTT-Explorer:
    • Stelle sicher, dass du die Option für TLS aktivierst und das Zertifikat hinzufügst.
    • Wähle Port 8883 aus.