Mosquitto MQTT Broker unter Gentoo einrichten

Network

Mosquitto ist ein Open Source MQTT Broker. Den Broker kann man dann nutzen, um z. B. Owntracks mit Home Assistant zu nutzen. Diese Tutorial beschreibt, wie Ihr einen Mosquitto Server unter Gentoo einrichtet.

Installation

Zum Zeitpunkt der Erstellung dieses Tutorials war Mosquitto in Version 2.0.15 in Portage verfügbar.

Wir installieren Mosquitto:

emerge -a app-misc/mosquitto

Mosquitto Benutzer anlegen

Um euch mit dem Mosquitto Broker zu verbinden müsst Ihr einen Benutzer anlegen und eine Passwort Datei erstellen. Dies geschieht mit folgenden Befehl:

mosquitto_passwd -c /etc/mosquitto/pwfile USERNAME

Mit dem Parameter “-c” wird eine neue Datei erstellt. Existiert bereits eine wird diese überschrieben. Soll der Benutzer zusätzlich angelegt werden, lasst den Parameter “-c” einfach weg. “USERNAME” ist mit eurem Benutzernamen zu ersetzen. Wenn Ihr diesen Befehl ausführt müsst Ihr ein Passwort festlegen und dieses im Anschluss bestätigen.

Mosquitto konfigurieren

Nun müssen wir noch die eigentliche Konfiguration von Mosquitto vornehmen. Dies geschieht in der Datei “/etc/mosquitto/mosquitto.conf”. Der Einfachheit halber ist hier meine Konfiguration:

autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /var/lib/mosquitto/
log_dest syslog
log_type error
log_type warning
log_type notice
log_type information
connection_messages true
log_timestamp true
allow_anonymous false
password_file /etc/mosquitto/pwfile

listener 1883 localhost

Nun starten wir unseren Mosquitto Broker und fügen ihn zum Default Runlevel hinzu:

/etc/init.d/mosquitto start
rc-update add mosquitto default

Mosquitto testen

Um zu überprüfen, ob unser Broker funktioniert, richten wir einen sogenannten “Sub” ein.

mosquitto_sub -h BROKERHOST -p PORT -t "owntracks/#" -v -u USERNAME -P PASSWORD

In diesem Befehl müsst Ihr die Platzhalter entsprechend mit euren Daten ersetzen. In meinem Fall benutze ich Owntracks auf meinen Android Smartphone um Nachrichten zu schicken (deswegen -t “owntracks/#”).

Wenn kein Fehler beim Ausführen des Befehls kommt, solltet Ihr einkommende Nachrichten sehen können. Die Antwort sieht dann in etwa so aus:

owntracks/user/androidphone {"_type":"location","acc":1800,"alt":0,"batt":65,"conn":"w","lat":46.8359704,"lon":7.5705195,"t":"u","tid":"us","tst":1545653489,"vac":0,"vel":0}

Mosquitto mit SSL sichern

In der aktuellen Konfiguration sollte man den Broker nur im lokalen Netzwerk nutzen. Es ist selbstredend, dass man bei einer Nutzung über das Internet eine Verschlüsselung der Übertragung in Erwägung ziehen sollte.

Hierfür benötigt man SSL Zertifikate. Deren Erstellung soll kein Bestandteil dieses Tutorial sein. Ich nutze in meinem Fall einfach die bestehenden Let’s Encrypt Zertifikate auf meinem Home Server.

Um die SSL Verschlüsselung zu nutzen fügt folgendes zur “/etc/mosquitto/mosquitto.conf” hinzu:

listener 8883
certfile /etc/letsencrypt/live/subdomain.example.com/cert.pem
cafile /etc/letsencrypt/live/subdomain.example.com/chain.pem
keyfile /etc/letsencrypt/live/subdomain.example.com/privkey.pem

Falls Ihr auch Let’s Encrypt benutzt müsst Ihr im Pfad “subdomain.example.com” mit eurem eigenen Domainnamen ersetzen. Nutz ihr selbstsignierte SSL Zertifikate tragt entsprechend die Pfade zu diesen richtig ein.

Wichtig ist das Ihr den bisherigen “listener 1883 localhost” in der Konfigurationsdatei behaltet. So könnt Ihr ohne SSL Verschlüsselung im lokalen Netz auf den Broker verbinden. Für externe Verbindungen wird dann Port 8883 benutzt. Diesen müsst Ihr natürlich in euer Firewall / Router freigeben.

Danach den Mosquitto Broker neu starten:

/etc/init.d/mosquitto restart

Fazit

Mit Mosquitto könnt ihr relativ einfach einen effizienten MQTT Broker realisieren.