Loxone behind reverse proxy

Ein Reverse-Proxy ist ein Server, der vor Webservern sitzt und Anfragen von Clients (z. B. Webbrowsern) an diese Webserver weiterleitet. Reverse-Proxys werden gewöhnlich implementiert, um Sicherheit, Performance und Zuverlässigkeit zu erhöhen. Der Gen1 Miniserver kann keine verschlüsselten Verbindungen aufbauen, ein Reverse Proxy kann dabei behilflich sein.

Prerequisites

Installation

  • Wir starten mit der Installation des Docker Plugins -> https://wiki.loxberry.de/plugins/docker/start

  • Nach der Installation des Plugins das Webinterface von Portainer öffnen -> LoxberryIP:9443

  • Environment auswählen und einen neuen Stack erstellen (Stacks -> Add stack)

  • Name: Swag

  • Im web editor folgenden Code anpassen und einfügen

version: "2.1"
services:
  swag:
    image: lscr.io/linuxserver/swag
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Rome
      - URL=<eure_subdomain>.duckdns.org
      - SUBDOMAINS=wildcard
      - VALIDATION=duckdns
      - DUCKDNSTOKEN=<euer_duckdns_token>
      - DOCKER_MODS=linuxserver/mods:swag-dbip
    volumes:
      - /var/lib/docker/volumes/swag/_data:/config #Folder welcher an den container übergeben wird.
    ports:
      - 4431:443 #Der Loxberry Port 4431 wird an den Docker auf dem Port 443 gemapped
      #- 80:80 #optional
    restart: unless-stopped
  • Stack deployen (somit wäre der Reverse proxy eingerichtet)

  • Port forwarding auf euren Router einrichten. 0.0.0.0:443 -> loxberryIP:4431

  • Jetzt müssen wir noch Loxone konfigurieren. Verbindet euch via SSH (ssh loxberry@iploxberry) auf loxberry und gebt euch root Rechte via (su -)

  • Geht in den Ordner /var/lib/docker/volumes/swag/_data/nginx/proxy-confs und erstellt die Konfigurationsdatei loxone.subdomain.conf:

#SSL configuration
server {
  listen 443 ssl;
  server_name loxone.*;

  include /config/nginx/ssl.conf;

  client_max_body_size 0;

  # Improve HTTPS performance with session resumption
  ssl_session_cache shared:SSL:10m;

  # Disable SSLv3
  ssl_protocols TLSv1 TLSv1.1;

  # Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

  resolver 8.8.8.8 8.8.4.4 valid=300s;
  resolver_timeout 5s;

  location / {
    proxy_pass <loxone server ip>:80;
    proxy_set_header Host $host;
    proxy_redirect http:// https://;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
  }
}
  • Startet den Container neu

  • Testet die Konfiguration via mit einem Webbrowser von extern via https://loxone.eure_subdomain.duckdns.org

  • Sobald alles läuft könnt ihr euch um das hardening kümmern, z.B. Geoblocking -> https://virtualize.link/secure/

  • In der App und Loxone Config könnt ihr jetzt die Remote Adresse ersetzen in loxone.eure_subdomain.duckdns.org:443

Jetzt habt ihr Zugriff via SSL auf eure Loxone Instanz. Ihr könnt nun auch weitere Dienste in den Reverse Proxy hinterlegen. Im Ordner /var/lib/docker/volumes/swag/_data/nginx/proxy-confs findet ihr einige Beispielkonfigurationen.

Ich hoffe ich hab nichts vergessen... :)

Für Feedback oder eventuelle Fragen: https://www.loxforum.com/forum/projektforen/loxberry/allgemeines-aa/384810-loxone-behind-reverse-proxy