So installierst du Mosquitto MQTT Server unter Ubuntu 22.04

Mosquitto ist eine kostenlose, quelloffene und leichtgewichtige Serverimplementierung des MQTT-Protokolls. Es ist für alle Geräte geeignet, von stromsparenden Einplatinencomputern bis hin zu kompletten Servern. MQTT setzt auf dem TCP/IP-Protokoll auf und nutzt dein bestehendes Internet-Heimnetzwerk, um Nachrichten an deine IoT-Geräte zu senden und auf diese zu antworten. Es ist in der Sprache C geschrieben, was es schnell und effizienter als andere MQTT-Broker macht.

In diesem Beitrag zeige ich dir, wie du den Mosquitto-Server auf Ubuntu 22.04 installierst.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 22.04 läuft.
  • Ein Root-Passwort ist auf deinem Server konfiguriert.

Erforderliche Abhängigkeiten installieren

Bevor du beginnst, solltest du alle Systempakete aktualisieren und auf die neueste Version upgraden. Du kannst sie aktualisieren, indem du den folgenden Befehl ausführst:

apt update -y
apt upgrade -y

Nachdem du alle Pakete aktualisiert hast, führe den folgenden Befehl aus, um die anderen benötigten Pakete zu installieren:

apt-get install curl gnupg2 wget git apt-transport-https ca-certificates -y

Sobald alle erforderlichen Pakete installiert sind, kannst du mit dem nächsten Schritt fortfahren.

Mosquitto Server installieren

Standardmäßig ist das Mosquitto-Paket nicht in der Ubuntu 22.04 Standard-Depo verfügbar. Daher musst du das offizielle Repository von Mosquitto zum APT hinzufügen. Du kannst es mit dem folgenden Befehl hinzufügen:

add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y

Sobald das Repository zum APT hinzugefügt wurde, kannst du es mit dem folgenden Befehl installieren:

apt install mosquitto mosquitto-clients -y

Sobald die Installation abgeschlossen ist, kannst du den Status von Mosquitto mit dem folgenden Befehl überprüfen:

systemctl status mosquitto

Du solltest die folgende Ausgabe sehen:

? mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-12-06 04:50:33 UTC; 8s ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
    Process: 5491 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5492 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5493 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5494 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
   Main PID: 5495 (mosquitto)
      Tasks: 1 (limit: 2242)
     Memory: 1.3M
        CPU: 23ms
     CGroup: /system.slice/mosquitto.service
             ??5495 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Dec 06 04:50:32 ubuntu2204 systemd[1]: Starting Mosquitto MQTT Broker...
Dec 06 04:50:33 ubuntu2204 systemd[1]: Started Mosquitto MQTT Broker.

MQTT-Verwaltungspasswort erstellen

Aus Sicherheitsgründen wird empfohlen, eine Passwortauthentifizierung für MQTT zu konfigurieren.

Richten wir einen Admin-Benutzer und ein Passwort mit dem folgenden Befehl ein:

mosquitto_passwd -c /etc/mosquitto/passwd hitesh

Setze ein Passwort wie unten gezeigt:

Password: 
Reenter password: 

Als Nächstes bearbeitest du die MQTT-Konfigurationsdatei und definierst die Port- und Passwortdatei.

nano /etc/mosquitto/conf.d/default.conf

Füge die folgenden Zeilen hinzu:

listener 1883
password_file /etc/mosquitto/passwd

Speichere und schließe die Datei und starte den Mosquitto-Dienst neu, um die Änderungen zu übernehmen.

systemctl restart mosquitto

Wie du MQTT zum Senden und Empfangen von Nachrichten verwendest

Du musst den Mosquitto-Client verwenden, um dich mit dem Mosquitto-Server zu verbinden und dann Nachrichten zu verschiedenen Themen zu senden und zu empfangen.

Bevor du Nachrichten senden und empfangen kannst, musst du dich bei einem Topic anmelden. Du kannst eines der folgenden Themen in der Heimautomatisierung verwenden.

  • home/lights/sitting_room
  • home/lichter/kueche
  • home/lights/master_bedroom
  • home/lights/kids_bedroom

Führen wir den folgenden Befehl aus, um das Thema home/lights/kids_bedroom zu abonnieren.

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

Als Nächstes öffnest du die neue Terminalschnittstelle und veröffentlichst mit dem folgenden Befehl eine Nachricht an das Thema home/lights/kids_bedroom.

mosquitto_pub -u hitesh -P password -m "ON" -t "home/lights/kids_bedroom"

Auf dem ersten Terminal erhältst du ON payload:

ON

Gehe nun zum zweiten Terminal und sende die OFF-Nachricht an dasselbe Thema.

mosquitto_pub -u hitesh -P password -m "OFF" -t "home/lights/kids_bedroom"

Auf dem ersten Terminal solltest du die folgende Nachricht sehen:

ON
OFF

Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.

Mosquitto mit Let’s Encrypt SSL sichern

Um Mosquitto mit SSL zu sichern, musst du das Certbot Client-Paket auf deinem Server installieren.

Installiere zunächst den Snap-Paketmanager mit dem folgenden Befehl:

apt install snapd

Als Nächstes aktualisierst du das Snap-Paket mit dem folgenden Befehl:

snap install core 
snap refresh core

Als Nächstes installierst du das Certbot-Paket mit dem folgenden Befehl:

snap install --classic certbot

Als Nächstes erstellst du einen symbolischen Link des Certbot-Binärpakets auf das Systemverzeichnis.

ln -s /snap/bin/certbot /usr/bin/certbot

Als Nächstes führst du den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m hitjethva@gmail.com -d mosquitto.linuxbuz.com

Du solltest die folgende Ausgabe sehen:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mosquitto.linuxbuz.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem
This certificate expires on 2023-03-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Du kannst alle erzeugten Zertifikatsdateien mit dem folgenden Befehl anzeigen:

ls /etc/letsencrypt/live/mosquitto.linuxbuz.com/

Du erhältst die folgende Ausgabe:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

Als Nächstes generierst du das Diffie-Hellman-Zertifikat mit dem folgenden Befehl:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.

MQTT für die Verwendung von Let’s Encrypt SSL konfigurieren

Kopiere zunächst alle generierten Zertifikate mit dem folgenden Befehl in das Mosquitto-Verzeichnis:

cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem /etc/mosquitto/certs/server.pem
cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem /etc/mosquitto/certs/server.key

Als Nächstes musst du die Eigentumsrechte für das Mosquitto-Zertifikat festlegen.

chown -R mosquitto: /etc/mosquitto/certs

Als nächstes bearbeitest du die Mosquitto-Konfigurationsdatei und definierst Let’s Encrypt SSL.

nano /etc/mosquitto/conf.d/default.conf

Füge die folgenden Zeilen hinzu:

listener 8883
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

Speichere und schließe die Datei und starte den Mosquitto-Dienst neu, um die Änderungen zu übernehmen.

systemctl restart mosquitto

Überprüfe anschließend die Mosquitto-Verbindung mit dem folgenden Befehl:

mosquitto_pub -h mosquitto.linuxbuz.com -t "home/lights/kids_bedroom" -m "hello" -p 8883 --capath /etc/ssl/certs/ -u hitesh -P password

Wenn du damit fertig bist, kannst du die Mosquitto-Verbindung über den Webbrowser testen.

Mosquitto Websockets konfigurieren

Als Nächstes musst du Websockets konfigurieren, um das MQTT-Protokoll im Browser zu verwenden. Du kannst es aktivieren, indem du die Standardkonfigurationsdatei von Mosquitto bearbeitest:

nano /etc/mosquitto/conf.d/default.conf

Füge die folgenden Zeilen hinzu:

listener 8083
protocol websockets
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

Speichere und schließe die Datei und starte den Mosquitto-Dienst neu, um die Änderungen zu übernehmen.

systemctl restart mosquitto

Als Nächstes öffnest du dein Terminal-Interface und führst den folgenden Befehl aus:

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

Öffne nun deinen Webbrowser und benutze den browserbasierten MQTT-Client, um die WebSockets-Funktionalität zu testen. Du solltest den folgenden Bildschirm sehen:

Gib den Host, den Port, den Benutzernamen und das Passwort deines Mosquitto-Servers ein und klicke auf die Schaltfläche Verbinden. Du solltest den folgenden Bildschirm sehen:

Gib nun ein beliebiges Thema und eine Nachricht ein und klicke auf die Schaltfläche Veröffentlichen.

Gehe dann zurück zur Terminalschnittstelle. Du solltest deine veröffentlichte Nachricht in der folgenden Ausgabe sehen:

Hi

Fazit

In diesem Beitrag haben wir erklärt, wie du den Mosquitto-Server installierst und ihn mit Let’s Encrypt SSL unter Ubuntu 22.04 sicherst. Außerdem haben wir Mosquitto über einen browserbasierten Client getestet. Wenn du noch Fragen hast, kannst du sie mir gerne stellen.

Das könnte dich auch interessieren …