mosquitto.conf-Generator

Wähle Listener, TLS, WebSockets, Authentifizierung, Persistenz und Logging und erhalte eine kommentierte Mosquitto-2.x-Konfiguration mit den passenden mosquitto_passwd-, Docker- und systemd-Befehlen.

Pfade für
Listener
Authentifizierung
Persistenz
Limits
Logging
log_dest
mosquitto.conf
# mosquitto.conf — Mosquitto 2.x
# Generated with the TestMQTT mosquitto.conf generator.
# Full reference: man mosquitto.conf  /  https://mosquitto.org/man/mosquitto-conf-5.html

# ------------------------------------------------------------------
# General
# ------------------------------------------------------------------
# One set of authentication settings shared by every listener.
per_listener_settings false

# ------------------------------------------------------------------
# Persistence
# ------------------------------------------------------------------
# Save retained messages, subscriptions and queued QoS 1/2 messages to disk.
persistence true
persistence_location /var/lib/mosquitto/

# ------------------------------------------------------------------
# Logging
# ------------------------------------------------------------------
log_dest file /var/log/mosquitto/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information
log_timestamp true
log_timestamp_format %Y-%m-%dT%H:%M:%S

# ------------------------------------------------------------------
# Security (applies to all listeners)
# ------------------------------------------------------------------
allow_anonymous false
password_file /etc/mosquitto/passwd

# ------------------------------------------------------------------
# Listeners
# ------------------------------------------------------------------
# MQTT over TCP
listener 1883

# MQTT over WebSockets
listener 9001
protocol websockets

Benutzer anlegen

shell
# Create the password file with the first user (-c creates / overwrites it)
sudo mosquitto_passwd -c /etc/mosquitto/passwd alice

# Add more users later — without -c
sudo mosquitto_passwd /etc/mosquitto/passwd bob

# Mosquitto 2.x warns if the file is readable by other users
sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
sudo chmod 0700 /etc/mosquitto/passwd

Mit Docker starten

shell
# Layout: ./config/mosquitto.conf, ./config/passwd
mkdir -p config data log
cp mosquitto.conf config/mosquitto.conf

docker run -d --name mosquitto --restart unless-stopped \
  -p 1883:1883 \
  -p 9001:9001 \
  -v "$PWD/config:/mosquitto/config" \
  -v "$PWD/data:/mosquitto/data" \
  -v "$PWD/log:/mosquitto/log" \
  eclipse-mosquitto:2

docker logs -f mosquitto

# Tip: set "Paths for" to Docker so the file paths in the config match the container.

Auf einem Linux-Server anwenden (systemd)

shell
# Install the config
sudo cp mosquitto.conf /etc/mosquitto/mosquitto.conf

# Optional: run in the foreground to spot config errors (Ctrl+C to stop)
sudo systemctl stop mosquitto
sudo mosquitto -c /etc/mosquitto/mosquitto.conf -v

# Restart the service and follow its log
sudo systemctl restart mosquitto
sudo systemctl status mosquitto
sudo journalctl -u mosquitto -f

Der Nur-localhost-Standard von Mosquitto 2.0

Mosquitto 2.0 hat die Standardwerte so geändert, dass der Broker von Haus aus sicher ist. Enthält die Konfiguration keine listener-Zeile, bindet der Broker nur an localhost, und anonyme Clients werden abgewiesen, sofern du sie nicht ausdrücklich erlaubst. Deshalb klappt eine frische Installation oft mit mosquitto_sub auf demselben Rechner, lehnt aber jedes andere Gerät ab. Die Lösung: ein expliziter Listener plus eine Entscheidung zur Authentifizierung — genau das schreibt dieser Generator. Fängst du bei null an? Starte mit Mosquitto installieren.

Listener

Jede listener-Zeile öffnet einen Port und beginnt einen Block: Die folgenden Zeilen (Protokoll, Zertifikate, max_connections) gehören bis zum nächsten Listener zu diesem. Port 1883 ist reines MQTT, 8883 ist MQTT über TLS, und ein Listener mit protocol websockets bedient Browser-Clients — üblich ist 9001. Mit einer optionalen Bind-Adresse wie 127.0.0.1 bleibt ein Listener auf den Host beschränkt. Der Leitfaden zu MQTT-Ports und MQTT über WebSockets erklären die Konventionen.

TLS-Listener brauchen ein certfile und ein keyfile; mit Let’s Encrypt sind das fullchain.pem und privkey.pem. cafile ist nur nötig, wenn du require_certificate aktivierst, um Clients über eigene Zertifikate zu authentifizieren.

Authentifizierung und ACLs

allow_anonymous false zusammen mit einem password_file ist das Minimum für jeden Broker, der aus einem Netzwerk erreichbar ist. Leg die Datei mit mosquitto_passwd -c an — Achtung: -c überschreibt eine vorhandene Datei, lass es also beim Hinzufügen weiterer Benutzer weg. Ein acl_file legt dann fest, welche Topics jeder Benutzer lesen oder schreiben darf; das generierte Beispiel zeigt Benutzerregeln und pattern-Regeln mit den Platzhaltern %u und %c. Eine vollständige Anleitung findest du unter Mosquitto-Authentifizierung.

per_listener_settings muss vor den Listenern stehen. Lass es auf false für ein gemeinsames Regelwerk; setz es auf true, wenn zum Beispiel ein localhost-Listener anonym bleiben soll, während der öffentliche Passwörter verlangt.

Persistenz, Logging und Limits

Mit persistence true überstehen Retained Messages, dauerhafte Sessions und wartende QoS-1- und QoS-2-Nachrichten einen Neustart in mosquitto.db innerhalb von persistence_location (behalte den abschließenden Schrägstrich bei). Logge auf einem Server in eine Datei, in Docker nach stdout, damit docker logs alles zeigt. max_packet_size weist zu große Pakete ab und ersetzt das veraltete message_size_limit; max_connections begrenzt die Clients pro Listener.

Inbetriebnahme

Für Container stellst du die Pfade auf Docker um, damit sie zum Layout des offiziellen Images passen, und folgst dann Mosquitto in Docker betreiben. Auf einem Server testest du die Datei zuerst im Vordergrund mit mosquitto -c … -v, bevor du den Dienst neu startest. Läuft alles, verbinde dich mit dem Online-MQTT-Client über WebSockets und lies die MQTT-Security-Best-Practices, bevor du den Broker ins Internet stellst.

FAQ zur mosquitto.conf

Warum können sich Clients nicht von einem anderen Rechner mit Mosquitto 2.0 verbinden?

Seit Version 2.0 lauscht Mosquitto ohne listener-Direktive nur auf localhost und lehnt anonyme Clients ab. Füge einen expliziten Listener wie "listener 1883" hinzu und konfiguriere entweder ein password_file oder setze allow_anonymous true.

Wo liegt die mosquitto.conf?

Linux-Pakete installieren sie unter /etc/mosquitto/mosquitto.conf, Homebrew nutzt /opt/homebrew/etc/mosquitto/mosquitto.conf, und das offizielle Docker-Image liest /mosquitto/config/mosquitto.conf.

Was bewirkt per_listener_settings?

Steht es auf false (Standard), gelten allow_anonymous, password_file und acl_file für alle Listener. Bei true bekommt jeder Listener eigene Authentifizierungseinstellungen — zum Beispiel anonymer Zugriff auf einem reinen localhost-Port und Passwörter auf dem öffentlichen.

Muss ich Mosquitto nach dem Anlegen eines Benutzers neu starten?

Mosquitto liest die Passwort- und ACL-Dateien neu ein, wenn es SIGHUP erhält — systemctl reload mosquitto oder ein Neustart genügt also. Änderungen an Listenern erfordern immer einen vollständigen Neustart.

Von den Machern von TestMQTT

Keine Lust, einen eigenen Broker zu betreiben?

Öffentliche Test-Broker teilst du mit Tausenden Fremden. ConnectMQ gibt dir einen privaten MQTT-Broker, dem du echte Geräte anvertrauen kannst – in wenigen Minuten eingerichtet.

  • Dein eigener, isolierter Broker – niemand sonst kann deine Topics lesen
  • Authentifizierung per Benutzername / Passwort und Zugriffskontrolle pro Topic
  • TLS und sichere WebSockets, MQTT 3.1.1 und MQTT 5
  • Derselbe Client-Code vom ersten Test bis zur Produktion