Knapp 60.000 MQTT-Broker sollen öffentlich einsehbar sein und angeblich nur zwei davon nutzen eine Transportverschlüsselung. Zeit etwas daran zu ändern! Die Kurzanleitung verhilft zur Installation und Konfiguration des quelloffenen MQTT-Brokers Mosquitto unter Linux mit verschlüsselter Übertragung. Beispielhaft werden von Letsencrypt ausgestellte Zertifikate integriert und kurz in die Benutzer/Passwort-basierte Authentifizierung und Rechteverwaltung eingeführt.
MQTT, was ist das und wozu ist das gut?
Das Message Queue and Telemetry Transport (MQTT) Protocol dient dem Austausch von Telemetriedaten zwischen Maschinen und Geräten nach einem einfachen Publish/Subcribe-Model. Werden von einem Gerät Nachrichten unter einem Thema veröffentlicht, verteilt ein Broker diese an alle angemeldeten Clients, die dieses Thema abboniert haben. Damit nur berechtigte Geräte Nachrichten zu bestimmten Themen abonnieren und veröffentlichen dürfen, ist eine Authentifizierung der Geräte gegenüber dem Broker sinnvoll. Eine Transportverschlüsselung ist empfohlen, um sowohl die Authentifizierungsdaten als auch die Nachrichten auf dem Weg durch das Netz vor den neugierigen Blicken Dritter zu schützen.
MQTT-Broker Mosquitto
Mosquitto ist ein quelloffener MQTT-Nachrichten-Broker. Er lässt sich mit dem Debian Package-Manager installieren:
sudo apt-get install mosquitto
oder alternativ von https://mosquitto.org/download/ herunterladen und gemäß dortiger Anleitung installieren.
Konfiguration für TLS (Transport Layer Security) mit Letsencrypt
TLS-Zertifikate gibt es per Letsencrypt:
letsencrypt certonly --rsa-key-size 4096 -d example.com
Um die TLS-Verschlüsselung mit den ausgestellten Zertifikaten nutzen zu können, müssen diese in der Konfigurationsdatei /etc/mosquitto/mosquitto.conf bzw. im Konfigurationsverzeichnis /etc/mosquitto/conf.d/ angegeben werden:
bind_address xx.xx.xx.xx port 8883 cafile /etc/letsencrypt/live/example.com/chain.pem certfile /etc/letsencrypt/live/example.com/cert.pem keyfile /etc/letsencrypt/live/example.com/privkey.pem
Konfiguration der Rechteverwaltung per Benutzername und Passwort
Um die Authentifizierung durch Benutzernamen und Passwort zu aktivieren, muss in der Konfigurationsdatei folgendes angegeben sein:
allow_anonymous false password_file /etc/mosquitto/passwords acl_file /etc/mosquitto/access.acl
Die Passwörter werden dann wie angegeben in der Datei /etc/mosquitto/passwords erwartet. Accounts können mit
mosquitto_passwd /etc/mosquitto/passwords username
angelegt bzw. das Passwort geändert werden. Die Datei sollte vor neugierigen Blicken geschützt sein:
chmod 0600 /etc/mosquitto/passwords
Die Zuordnung von Zugriffsberechtigungen und Themen erfolgt durch die in der Konfigurationsdatei angegebenen Access-Control-List (ACL) Datei /etc/mosquitto/access.acl:
user username pattern readwrite #
Durch diesen Eintrag wird dem Benutzer username das Lesen und Schreiben aller Themen gewährt. ‚#‘ steht für alle Topics. Es kann auch eine bestimmte Themenbezeichnung angegeben werden. Um z.B. für den Benutzer observer das Lesen für das Thema foo zu aktivieren:
user observer topic read foo
Eine Testverbindung mit dem Mosquitto-Client herstellen
Sofern auf dem Client-System noch nicht bekannt, ist zur Prüfung des von Letsencrypt ausgestellten TLS-Zertifikats des MQTT-Brokers das entsprechende Wurzelzertifikat erforderlich. Dieses kann von https://www.identrust.com/certificates/trustid/root-download-x3.html bezogen werden. Den angezeigte Inhalt zwischen
-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
mit einem Texteditor in mosquitto-letsencrypt-ca.crt zur späteren Verwendung speichern.
Eine Nachrichten-Publikation kann dann z.B. mit
mosquitto_pub -h example.com -p 8883 --cafile mosquitto-letsencrypt-ca.crt -m 1 -t test -u username -P password
erfolgen.
Unter Android habe ich erfolgreich eine Verbindung mit MQTT Dash aufbauen und das Thema beobachten können.
Neueste Kommentare