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.