So installierst du Mosquitto MQTT Message Broker unter Debian 11
Eclipse Mosquitto ist eine freie und quelloffene Message Broker-Implementierung des MQTT-Protokolls. Mosquitto implementiert die MQTT-Versionen 3.1.0, 3.1.1 und 5.0. Mosquitto ist ein leichtgewichtiger Message Broker, der sich für viele verschiedene Einsatzmöglichkeiten eignet.
Mosquitto ist ein Message Broker, der das Publish/Subscribe-Modell zur Übermittlung von Nachrichten nutzt. Er benötigt nur eine geringe Bandbreite und ist einfach zu implementieren, was bedeutet, dass er sich für den Einsatz von kleinen Geräten und IoT (Internet of Things), mobilen Geräten, eingebetteten Computern und Mikrocontrollern eignet.
In diesem Tutorial gehen wir durch die Installation und Konfiguration von Mosquitto MQTT Message Broker auf einem Debian 11 Server, richten die Authentifizierung ein, sichern Mosquitto mit SSL/TLS-Zertifikaten und aktivieren WebSockets auf Mosquitto.
Voraussetzungen
Um mit diesem Tutorial zu beginnen, brauchst du die folgenden Voraussetzungen:
- Einen Debian 11-Server – Diese Demo verwendet einen Debian-Server mit dem Hostnamen ‚mosquitto-server‘.
- Ein Nicht-Root-Benutzer mit Root-/Administrator-Rechten.
Installation von Mosquitto Server und Client
Mosquitto ist ein Open-Source MQTT Message Broker, der auf verschiedenen Plattformen wie Windows, Linux, BSD und macOS installiert werden kann. Für die Debian-Linux-Distribution ist Mosquitto im Standard-Debian-Repository verfügbar, so dass du es einfach über die APT installieren kannst.
In diesem Schritt wirst du den Installationsprozess des Mosquitto-Servers und -Clients auf dem Debian-Server durchgehen. Außerdem lernst du die grundlegende Verwendung der Mosquitto-Kommandozeile (mosquitto_sub und mosquitto_pub) kennen, um die Installation des Mosquitto-Servers zu überprüfen.
Aktualisiere zunächst deinen Debian-Paketindex mit dem unten stehenden apt-Befehl.
sudo apt update
Suche mit dem folgenden apt-Befehl nach dem Paket „mosquitto“.
sudo apt search mosquitto
Du solltest einige der Mosquitto-Pakete sehen, die standardmäßig im Debian-Repository verfügbar sind, darunter die Mosquitto-Serveranwendung und den Client.
Führe nun den folgenden apt-Befehl aus, um die Mosquitto-Pakete zu installieren. Wenn du dazu aufgefordert wirst, gib zur Bestätigung y ein und drücke ENTER, um fortzufahren.
sudo apt install mosquitto mosquitto-clients
Nachdem Mosquitto installiert ist, überprüfe den Mosquitto-Dienst mit dem folgenden systemctl-Befehl.
sudo systemctl is-enabled mosquitto sudo systemctl status mosquitto
Du siehst dann, dass der Mosquitto-Dienst aktiviert ist und beim Hochfahren automatisch ausgeführt wird. Und der aktuelle Status des Mosquitto-Dienstes ist „running“.
Da der Mosquitto-Server nun läuft, musst du als Nächstes die Verifizierung von Mosquitto über die Client-Befehlszeilen„mosquitto_sub“ und„mosquitto-pub“ vornehmen.
Vereinfacht ausgedrückt ist„mosquitto_sub“ das Kommandozeilen-Tool für den Empfang von Nachrichten (Subscriber) vom„mosquitto_pub“ (Publisher).
Führe den folgenden„mosqitto_sub„-Befehl aus, um einige Nachrichten zum Thema„test“ zu empfangen.
sudo mosquitto_sub -h localhost -t test
Öffne dann eine neue Terminalsitzung auf deinem Server und führe den folgenden „mosquitto_pub“-Befehl aus, um einige Nachrichten an das Thema„test“ zu senden
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2" sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2 - Publisher" sudo mosquitto_pub -h localhost -t test -m "Hello"
Du wirst dann sehen, dass die Nachrichten über„mosquitto_pub“ auf dem Empfänger„mosquitto_sub“ veröffentlicht wurden, was bedeutet, dass die Installation von Mosquitto-Server und -Client erfolgreich war.
Einrichten der Authentifizierung auf Mosquitto
Die Standardinstallation von Mosquitto erfolgt ohne Authentifizierung. Um den Einsatz (insbesondere in der Produktion) zu sichern, solltest du die Authentifizierung auf dem Mosquitto-Server aktivieren. Du kannst einen Benutzer auf Mosquitto anlegen und definieren und Mosquitto Sub und Pub über eine Benutzername/Passwort-Authentifizierung sichern.
Führe den folgenden Befehl aus, um einen neuen Mosquitto-Benutzer und ein Passwort zu erstellen. In dieser Demo wird der Benutzer „alice“ verwendet und das Passwort wird in der Datei „/etc/mosquitto/.passwd“ erstellt und gehasht.
sudo mosquitto_passwd -c /etc/mosquitto/.passwd alice
Gib das Passwort für den Mosquitto-Benutzer„alice“ ein und wiederhole das Passwort.
Nachdem du den Benutzernamen und das Passwort erstellt hast, erstelle eine neue Mosquitto-Konfiguration„/etc/mosquitto/conf.d/auth.conf“ mit dem folgenden nano-Editor-Befehl.
sudo nano /etc/mosquitto/conf.d/auth.conf
Füge die folgende Konfiguration in die Datei ein. Dadurch wird Mosquitto auf dem Port„1883“ ausgeführt, der anonyme Zugang deaktiviert und die Passwortdatei „/etc/mosquitto/.passwd“ definiert.
listener 1883 allow_anonymous false password_file /etc/mosquitto/.passwd
Speichere die Datei und beende den Editor, wenn du fertig bist.
Starte anschließend den Mosquitto-Dienst neu, um die Änderungen zu übernehmen. Der Mosquitto-Server sollte jetzt mit aktivierter Authentifizierung laufen.
sudo systemctl restart mosquitto
Um die Authentifizierung des Mosquitto-Servers zu überprüfen, kannst du die Befehle„mosquitto_sub“ und„mosquitto_pub“ verwenden.
Wenn du den Benutzernamen und das Passwort während des Pub/Sub-Prozesses nicht angegeben hast, wird die Verbindung abgelehnt. Wenn du jedoch den Benutzernamen/das Passwort für die Authentifizierung angegeben hast und über die richtigen Anmeldedaten verfügst, kannst du Nachrichten über den Mosquitto Subscriber und Publisher senden und empfangen.
Führe den folgenden Befehl aus, um den Pub und Sub auf Mosquitto ohne Authentifizierung zu überprüfen.
# session - Mosquitto Subscriber sudo mosquitto_sub -h localhost -t test
# session – Mosquitto Publisher
sudo mosquitto_pub -h localhost -t test -m „Hello again from terminal 2“
Du wirst dann sehen, dass ohne Authentifizierung beide Verbindungen zum Mosquitto-Server abgelehnt werden, weil sie nicht autorisiert sind, und du kannst keine Nachrichten senden und empfangen.
Als Nächstes führst du den folgenden Befehl aus, um den Pub und Sub von Mosquitto mit dem Benutzer und dem Passwort zu verifizieren.
# session - Mosquitto Subscriber sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
# session – Mosquitto Publisher
sudo mosquitto_pub -h localhost -t „test“ -m „Hello – enabled auth“ -u „alice“ -P „p4ssw0rd“
Wenn die Mosquitto-Anmeldedaten korrekt sind, bist du sowohl mit dem Mosquitto Subscriber als auch mit dem Publisher verbunden und kannst über die Mosquitto-Befehlszeile Nachrichten senden und empfangen.
Wenn der Mosquitto-Server läuft und die Authentifizierung aktiviert ist, solltest du jetzt einen sicheren Message Broker haben. Um noch mehr Sicherheit zu erhalten, kannst du auch die Autorisierung über SSL/TLS-Zertifikate für deine lokalen Mosquitto-Datenübertragungen und -Verbindungen hinzufügen.
Absicherung von Mosquitto mit SSL/TLS-Zertifikaten
Obwohl der Mosquitto-Server über die Authentifizierung gesichert ist, musst du noch ein paar Schritte gehen, um den Mosquitto-Einsatz zu sichern. Dazu gehört die Implementierung von SSL/TLS-Zertifikaten, die die Datenübertragung zwischen dem Mosquitto-Server und den Anwendungen verschlüsseln.
Bevor du loslegst, musst du sicherstellen, dass du SSL/TLS-Zertifikate für deine lokale Umgebung generiert hast.
Um zu beginnen, führe den folgenden openssl-Befehl aus, um das dhparam-Zertifikat zu erzeugen. Dadurch wird das DHPARAM-Zertifikat in „/etc/mosquitto/certs/dhparam.pem“ erzeugt.
sudo openssl dhparam -out /etc/mosquitto/certs/dhparam.pem 2048
Ändere nun die Rechte am Mosquitto certs-Verzeichnis mit dem chmod-Befehl auf den Benutzer „mosquitto“.
sudo chown -R mosquitto: /etc/mosquitto/certs
Als nächstes erstellst du mit dem folgenden nano-Editor-Befehl eine neue zusätzliche Konfiguration „/etc/mosquitto/conf.d/ssl.conf“. Damit aktivierst du eine sichere Verbindung auf dem Mosquitto-Server über SSL/TLS-Zertifikate.
sudo nano /etc/mosquitto/conf.d/ssl.conf
Füge die folgende Konfiguration in die Datei ein. Dadurch wird Mosquitto auf dem Port„8883“ ausgeführt und zusätzlich TLS aktiviert. Achte also darauf, dass du den Pfad der SSL/TLS-Zertifikate änderst.
listener 8883 certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem dhparamfile /etc/mosquitto/certs/dhparam.pem
Speichere die Datei und beende den Editor, wenn du fertig bist.
Führe nun den folgenden systemctl-Befehl aus, um den Mosquitto-Dienst neu zu starten und die neuen Änderungen zu übernehmen. Jetzt wird der Mosquitto-Server mit aktiviertem sicheren TLS betrieben.
sudo systemctl restart mosquitto
Wenn SSL/TLS aktiviert ist, überprüfst du die Konfiguration, indem du Nachrichten über eine sichere Verbindung an den Mosquitto-Teilnehmer sendest.
Führe den folgenden Befehl „mosquitto_sub“ aus, um den Mosquitte Subscriber in deiner aktuellen Terminalsitzung zu öffnen.
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
Als Nächstes öffnest du eine neue Sitzung, verbindest dich mit dem Server und führst dann den folgenden Befehl aus, um Nachrichten an den Mosquitto-Server zu senden. Damit verbindest du dich mit dem Mosquitto-Server„msqt.hwdomain.io“ über eine SSL/TLS-Verbindung, die auf Port„8883“ läuft.
sudo mosquitto_pub -h msqt.hwdomain.io -t test -m "hello again - with SSL enabled" -p 8883 --capath /etc/ssl/certs/ -u "alice" -P "p4ssw0rd"
Du solltest jetzt Nachrichten auf der Mosquitto Subscriber Shell erhalten. Der Mosquitto Producer sendet Nachrichten an den Mosquitto Subscriber über eine sichere SSL/TLS-Verbindung, die über Port 8883 läuft.
Aktivieren von WebSockets auf Mosquitto
An dieser Stelle hast du den Mosquitto-Server installiert und die Installation gesichert, indem du die Benutzername/Passwort-Authentifizierung und die sichere SSL/TLS-Verbindung aktiviert hast. Nun erfährst du, wie du WebSockets über MQTT auf dem Mosquitto-Server aktivierst.
WebSocket ist ein zustandsbehaftetes Kommunikationsprotokoll, das einen dauerhaften Vollduplex-Kanal zwischen dem Server und dem Client bereitstellt, indem es dieselbe Verbindung wiederverwendet, die zu Beginn der Kommunikation (während des Opening Handshake) geöffnet wurde.
Um zu beginnen, erstelle eine neue Konfiguration„/etc/mosquitto/conf.d/websockets.conf“ mit dem folgenden Befehl des nano Editors.
sudo nano /etc/mosquitto/conf.d/websockets.conf
Füge die folgende Konfiguration in die Datei ein. Damit wird das WebSockets-Protokoll aktiviert und über SSL/TLS-Zertifikate abgesichert. Die WebSockets werden auf Port 8083 ausgeführt.
listener 8083 protocol websockets certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den folgenden systemctl-Befehl aus, um den Mosquitto-Dienst neu zu starten und die neuen Änderungen anzuwenden. Der Mosquitto-Server läuft jetzt mit aktivierten WebSockets über eine sichere SSL/TLS-Verbindung.
sudo systemctl restart mosquitto
Um die WebSockets-Konfiguration zu überprüfen, kannst du dich mit einem Drittanbieter-Tool wie dem „MQTT Explorer“ mit Mosquitto verbinden, das für die wichtigsten Betriebssysteme wie Linux, Windows und macOS verfügbar ist.
Unten siehst du den MQTT Explorer mit WebSockets-Verbindung.
Wenn du verbunden bist, solltest du das folgende Dashboard sehen.
Fazit
In dieser Anleitung hast du gelernt, wie du den Mosquitto MQTT Message Broker auf einem Debian 11 Server installierst. Außerdem hast du gelernt, wie du den Mosquitto-Server absicherst, indem du die Benutzername/Passwort-Authentifizierung aktivierst und die Mosquitto-Datenübertragung und -Verbindung über SSL/TLS-Zertifikate absicherst. Darüber hinaus hast du das WebSockets-Protokoll auf dem Mosquitto-Server aktiviert, mit dem du asynchrone Verbindungen zwischen Subscriber und Producer herstellen kannst.
Jetzt kannst du die Mosquitto-Installation nutzen, indem du einen hochverfügbaren Mosquitto-Cluster erstellst oder das Mosquitto-Administrations-Dashboard über das Cedalo Management Center einrichtest.