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).

BASH
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.

BASH
# 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.

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

Inhalt einfügen:

TXT
# 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:

  1. Gehe zu Settings -> Firewall.

  2. 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.

BASH
# Mosquitto Leserechte für Zertifikate geben
sudo usermod -aG ssl-cert mosquitto

6. Neustart & Test

BASH
sudo systemctl restart mosquitto
sudo systemctl status mosquitto

Manueller Test-Befehl (im Terminal):

BASH
# 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 der default.conf einkommentierst und die Zertifikate für mqtt.EXAMPLE.TLD erstellt hast.

  • Tipp: Wenn du den Broker erst mal ohne SSL testen willst, stelle in der .config den Port auf 1883 und MQTT_USE_SSL auf false.

Soll ich dir zeigen, wie du für die Subdomain mqtt.EXAMPLE.TLD in HestiaCP ein separates Zertifikat anforderst, damit Mosquitto es nutzen kann?