Diese Anleitung installiert Mosquitto, konfiguriert Benutzer-Authentifizierung und bereitet alles für die SSL-Verschlüsselung vor.
1. Installation
Zuerst installieren wir den Broker und die Client-Tools (zum Testen).
sudo apt update
sudo apt install mosquitto mosquitto-clients
2. Benutzer anlegen (Sicherheit)
Standardmäßig sollte MQTT niemals ohne Passwort laufen. Wir legen eine Passwortdatei an.
# Ersetze 'dein_benutzer' durch den Namen aus deiner .config Datei
sudo mosquitto_passwd -c /etc/mosquitto/passwd dein_benutzer
(Du wirst nach einem Passwort gefragt. Nutze das, was du im Python-Script eingetragen hast.)
3. Grundkonfiguration
Wir erstellen eine Konfigurationsdatei, die den anonymen Zugriff verbietet und die Passwortdatei lädt.
sudo nano /etc/mosquitto/conf.d/default.conf
Inhalt einfügen:
# Port für unverschlüsselte interne Kommunikation (oder zum Testen)
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
# Vorbereitung für SSL (Port 8883)
listener 8883
protocol mqtt
# Die folgenden Zeilen erst aktivieren, wenn die Zertifikate da sind:
# cafile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/chain.pem
# certfile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/cert.pem
# keyfile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/privkey.pem
# --- WebSockets Support ---
listener 9001
protocol websockets
# Falls WebSockets auch über SSL laufen sollen (WSS):
# cafile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/chain.pem
# certfile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/cert.pem
# keyfile /etc/letsencrypt/live/mqtt.EXAMPLE.TLD/privkey.pem
# --- Performance Tuning (Optional für viele kleine Sensoren) ---
persistence true
persistence_location /var/lib/mosquitto/
4. Firewall & HestiaCP
Da Mosquitto auf Port 1883 (lokal) und 8883 (extern) läuft, müssen wir diese in HestiaCP oder der Firewall freigeben.
In der HestiaCP GUI:
-
Gehe zu Settings -> Firewall.
-
Füge zwei neue Regel hinzu:
| Regel-Name | Port(s) | IP-Adresse | Kommentar |
|---|---|---|---|
| MQTT External | 8883,9001 |
0.0.0.0/0 |
Sicherer Zugang von außen (SSL & WS) |
| MQTT Internal | 1883 |
127.0.0.1 |
Nur für lokale Scripte (Logger) |
Hinweis: Falls deine Sensoren zu Hause kein SSL können, müsstest du Port 1883 doch für 0.0.0.0/0 (alle) öffnen, aber das solltest du nur im Notfall tun.
🛸 MQTT Port-Matrix
| Port | Protokoll | Verschlüsselung | Zielgruppe |
|---|---|---|---|
| 1883 | MQTT | Nein (Plain) | Interne Scripte / Lokale Sensoren |
| 8883 | MQTT | Ja (TLS/SSL) | Externe Sensoren / Python-Logger |
| 9001 | WebSocket | Optional (WSS) | Browser-Dashboards / Web-Apps |
5. SSL-Zertifikat (Let's Encrypt)
Da dein Script über mqtt.EXAMPLE.TLD:8883 mit SSL verbinden will, braucht Mosquitto Zugriff auf die Zertifikate.
Wichtig für die Berechtigungen: Mosquitto läuft als User mosquitto und kann normalerweise nicht in den Let's Encrypt Ordner schauen.
# Mosquitto Leserechte für Zertifikate geben
sudo usermod -aG ssl-cert mosquitto
6. Neustart & Test
sudo systemctl restart mosquitto
sudo systemctl status mosquitto
Manueller Test-Befehl (im Terminal):
# Nachricht senden zum Testen
mosquitto_pub -h localhost -t "Sensors/Test" -m '{"id": "Test_1", "temperature": 25.0}' -u "dein_benutzer" -P "dein_passwort"
📝 Notizen für dein Python-Script
-
Dein Script nutzt
MQTT_USE_SSL = true. Das wird erst funktionieren, wenn du in Schritt 3 die SSL-Pfade in derdefault.confeinkommentierst und die Zertifikate fürmqtt.EXAMPLE.TLDerstellt hast. -
Tipp: Wenn du den Broker erst mal ohne SSL testen willst, stelle in der
.configden Port auf1883undMQTT_USE_SSLauffalse.
Soll ich dir zeigen, wie du für die Subdomain mqtt.EXAMPLE.TLD in HestiaCP ein separates Zertifikat anforderst, damit Mosquitto es nutzen kann?