Hi zusammen,
vor einiger Zeit hab ich dank eurer Hilfe hier im Forum mein Heimnetzwerk mit meinen betriebenen Services via SSL / https abgesichert. Dank dem certbotgodaddy Image kann ich mir darüber vie DNS Challenge über meine eigene Domain gültige SSL Zertifikate beziehen und im Heimnetz nutzen.
Da ich etwas Smarthome betreibe (Openhab als Abstraktion zur Nutzung verschiedener Gerätschaften und Node-RED zur Automatisierung), möchte ich gerne Eclipse Mosquitto (MQTT Broker) nutzen, um von mancher Hardware wie Funkschaltern, welche per MQTT kommunizieren können, entsprechend Nachrichten zu empfangen und weiter zu verteilen.
Nun hab ich hier die Herausforderung, bzw. den Wunsch, den Datenverkehr über MQTT ebenfalls abzusichern. Teils habe ich dazu ein paar Snippets im Netz gefunden, aber irgendwie hab ich es noch nicht richtig lauffähig bekommen. Daher hab ich die Hoffnung, dass sich hier jemand damit schon einmal erfolgreich beschäftigt hat, oder berichten kann, wie man mqtt alternativ absichern kann.
Ich nutze, wie oben beschrieben, Traefik nicht dafür SSL Zertifikate zu beziehen, sondern diese werden über ein Volume Mount bereitgestellt.
Optimal wäre es, wenn ich zu meinen Adressen wie openhab.mydomain.de eine mqtt.mydomain.de nutzen kann, so dass über den Proxy die Anfragen entsprechend weitergeleitet werden.
Hier meine Portainer Stacks (docker compose):
Traefik
Mosquitto
Zum ersten Test nutze ich einen MQTT Client, um überhaupt eine Verbindung zum Broker aufzubauen. Dabei habe ich die Adresse mqtt.mydomain.de mit dem Port 8883 genutzt. Die Verbindung kann nicht aufgebaut werden.
Im Traefik Log hab ich lediglich:
Grundlegend müsste Traefik passend reagiert haben, aber der Broker (wird wohl hier mit backend gemeint sein?) hat die Anfrage dann verweigert, oder?
Auf jeden Fall schon mal vielen Dank für eure Unterstützung!
vor einiger Zeit hab ich dank eurer Hilfe hier im Forum mein Heimnetzwerk mit meinen betriebenen Services via SSL / https abgesichert. Dank dem certbotgodaddy Image kann ich mir darüber vie DNS Challenge über meine eigene Domain gültige SSL Zertifikate beziehen und im Heimnetz nutzen.
Da ich etwas Smarthome betreibe (Openhab als Abstraktion zur Nutzung verschiedener Gerätschaften und Node-RED zur Automatisierung), möchte ich gerne Eclipse Mosquitto (MQTT Broker) nutzen, um von mancher Hardware wie Funkschaltern, welche per MQTT kommunizieren können, entsprechend Nachrichten zu empfangen und weiter zu verteilen.
Nun hab ich hier die Herausforderung, bzw. den Wunsch, den Datenverkehr über MQTT ebenfalls abzusichern. Teils habe ich dazu ein paar Snippets im Netz gefunden, aber irgendwie hab ich es noch nicht richtig lauffähig bekommen. Daher hab ich die Hoffnung, dass sich hier jemand damit schon einmal erfolgreich beschäftigt hat, oder berichten kann, wie man mqtt alternativ absichern kann.
Ich nutze, wie oben beschrieben, Traefik nicht dafür SSL Zertifikate zu beziehen, sondern diese werden über ein Volume Mount bereitgestellt.
Optimal wäre es, wenn ich zu meinen Adressen wie openhab.mydomain.de eine mqtt.mydomain.de nutzen kann, so dass über den Proxy die Anfragen entsprechend weitergeleitet werden.
Hier meine Portainer Stacks (docker compose):
Traefik
Code:
version: '3.9'
services:
traefik:
image: traefik:v2.9.6
container_name: traefik
restart: always
# Enables the web UI and tells Traefik to listen to docker
command:
- "--providers.docker=true"
- "--providers.file.directory=/etc/traefik/dynamic"
- "--providers.docker.exposedbydefault=false"
# Entrypoints
- "--entrypoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entrypoints.mqtt.address=:8883"
# Redirections
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
# Common
- "--log=true"
- "--log.level=INFO"
- "--accesslog=false"
- "--accesslog.format=json"
ports:
# The HTTP port
- 80:80
# The HTTPS / TLS port
- 443:443
# The MQTT Secured port
- 8883:8883
# The Web UI (enabled by --api.insecure=true)
- 8080:8080
labels:
# Wenn dieses Label nicht hinterlegt wird, kommt es zu einem 504 Gateway I/O Timeout
- "--providers.docker.network=jarvis-proxy-network"
networks:
- jarvis-proxy-network
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik-volume:/etc/traefik
- traefik-cert-config-volume:/etc/traefik/dynamic
- certbot-letsencrypt-volume:/etc/certs:ro
volumes:
traefik-volume:
external: true
traefik-cert-config-volume:
external: true
certbot-letsencrypt-volume:
external: true
networks:
jarvis-proxy-network:
name: jarvis-proxy-network
Mosquitto
Code:
version: '3.9'
services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.mqtt.rule=Host(`mqtt.mydomain.de`)"
- "traefik.http.routers.mqtt.entrypoints=websecure"
- "traefik.http.services.mqtt.loadbalancer.server.port=9001"
- "traefik.tcp.routers.mqtt.rule=HostSNI(`*`)"
- "traefik.tcp.services.mqtt.loadbalancer.server.port=8883"
- "traefik.tcp.routers.mqtt.entrypoints=mqtt"
volumes:
- mosquitto-data-volume:/mosquitto/data
- mosquitto-config-volume:/mosquitto/config
- mosquitto-log-volume:/mosquitto/log
networks:
- jarvis-proxy-network
networks:
jarvis-proxy-network:
name: jarvis-proxy-network
volumes:
mosquitto-data-volume:
external: true
mosquitto-config-volume:
external: true
mosquitto-log-volume:
external: true
Zum ersten Test nutze ich einen MQTT Client, um überhaupt eine Verbindung zum Broker aufzubauen. Dabei habe ich die Adresse mqtt.mydomain.de mit dem Port 8883 genutzt. Die Verbindung kann nicht aufgebaut werden.
Im Traefik Log hab ich lediglich:
entdeckt.time="2023-04-17T09:00:41Z" level=error msg="Error while connecting to backend: dial tcp 172.29.4.3:8883: connect: connection refused"
time="2023-04-17T09:00:42Z" level=error msg="Error while connecting to backend: dial tcp 172.29.4.3:8883: connect: connection refused"
time="2023-04-17T09:00:43Z" level=error msg="Error while connecting to backend: dial tcp 172.29.4.3:8883: connect: connection refused"
time="2023-04-17T09:00:44Z" level=error msg="Error while connecting to backend: dial tcp 172.29.4.3:8883: connect: connection refused"
Grundlegend müsste Traefik passend reagiert haben, aber der Broker (wird wohl hier mit backend gemeint sein?) hat die Anfrage dann verweigert, oder?
Auf jeden Fall schon mal vielen Dank für eure Unterstützung!