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!