Reverse Proxy

Aus DVBViewer
Wechseln zu: Navigation, Suche

Der Artikel beschreibt die Konfiguration eines Reverse Proxy um diesen vor dem Recording Service Webinterface zu verwenden z.B. um dieses per https (TLS) anzusprechen.

Recording Service Einstellungen[Bearbeiten]

Die Anleitung bezieht sich auf RS Version 1.33 oder neuer.

Voraussetzungen[Bearbeiten]

Wenn das Recording Service Webinterface aus dem über das Internet erreicht werden soll, muss in den Optionen Service - Web Einstellungen zumindest für einen Benutzer ein Passwort gesetzt sein. Und der haken bei "Zugriff aus dem Internet erlauben" muss bei dem Nutzer gesetzt sein.


Und aus Sicherheitsgründen kann es auch gut sein den Benutzernamen abzuwandeln (Standard Nutzer wie admin, root oder user sind aber eine schlechtere Idee).

Reverse Proxy Tweaks[Bearbeiten]

Damit der Recording Service besser mit dem Reverse Proxy zusammenarbeiten müssen zwei Einstellungen gesetzt werden die nur als Teweak verfügbar sind.


ReverseProxyIP[Bearbeiten]

Diese Einstellung aktiviert die Reverse Proxy-Unterstützung im Webserver. Sie gibt die Reverse Proxy IP an, so wie sie der Recording Service sieht. Typischerweise wird sich der Reverse Proxy auf dem selben PC wie der Recording Service befinden und damit die IP 127.0.0.1 haben. Wenn (und nur wenn) die empfangene Client IP der Reverse Proxy IP entspricht, verwendet der Recording Service die HTTP Header-Felder "x-real-ip" (mit Priorität) oder "x-forwarded-for", um die ursprüngliche Client IP zu ermitteln.


ReverseProxyURL[Bearbeiten]

Diese Einstellung ist nur wirksam, wenn Reverse Proxy-Support aktiviert ist (siehe vorherige Einstellung). Sie gibt die URL des Reverse Proxy an, so wie sie von außen verwendet wird, z.B. https://myhost. Der Recording Service benutzt diese Information, um absolute URLs mit Bezug auf den Webserver zu erzeugen, insbesondere in der Datei transcodedchannels.m3u. Wenn die Angabe fehlt, versucht der Recording Service, die Information den HTTP Header-Feldern x-forwarded-proto, x-forwarded-port, x-forwarded-path. und x-forwarded-host zu entnehmen.

Passwort Schutz im Proxy[Bearbeiten]

Wenn sich der Proxy um den Passwort Schutz kümmern soll müssen alle IP Adressen für die der Recording Service nicht nach dem Passwort fragen soll in der svcuserdata.xml in die TrustedIPs Liste eingetragen werden. Gegebenenfalls der gesamte IPv4 Bereich.

Wer das machen möchte sollte wissen was er macht. Und dann sollte das auch kein Problem sein.


Einen anderen Weg, die Passwort Abfrage für Clients die nicht aus dem LAN zugreifen gibt es absichtlich nicht.


Eine andere Möglichkeit wäre keine oder eine fehlerhafte ReverseProxyIP einzutragen. Davon ist aber abzuraten. Da der Recording Service dann die Proxy IP als Client IP ansieht. Und dann über den Proxy unter anderem nur ein Client zu einem Zeitpunkt auf streams zugreifen kann.

Reverse Proxy Einstellungen[Bearbeiten]

Caddy als Reverse Proxy[Bearbeiten]

Herzunterladen und Installieren[Bearbeiten]

Den Caddy Server gibt es auf caddyserver.com. Benötigt wird Caddy Core gegebenenfalls mit ipfilter (wenn der zugriff auf das Webinterface auch Basis von Client IPs beschränkt werden soll).


Das caddy_windows_*.zip entpacken und die caddy.exe in ein Verzeichnis verschieben in dem sie bleiben soll z.B. dem DVBViewer Verzeichnis, wenn der Server nur als Revers Proxy für den DVBViewer dienen soll.

Konfiguration[Bearbeiten]

Die Konfiguration wird in einer Textdatei Caddyfile (ohne Dateiendung) im gleichen Verzeichnis wie die caddy.exe gespeichert.


Eine Beschreibung aller Einstellmöglichkeiten findet sich unter https://caddyserver.com/docs

Automatisch Starten[Bearbeiten]

Wenn sicher gestellt ist das alles funktioniert, kann Caddy über die Windows Aufgabenplanung gestartet werden.

Über die Startmenü Suche die Aufgabenplanung starten:

Einfache Aufgabe erstellen...

Name: Caddy Webserver

Tigger: Beim Start des Computers

Aktion: Programm Start

Programm: ...\caddy.exe

(Argumente hinzufügen: -agree)


Die Grade erstellte Aufgabe öffnen und "Unabhängig von der Benutzeranmeldung ausführen" und "Kennwort nicht Speichern". Gegebenenfalls unter Einstellungen noch das beenden nach 3 Tagen deaktivieren.

Caddyfile[Bearbeiten]

Eine ganz einfach Konfiguration, wenn der Recording Service auf dem gleichen PC läuft wäre:

:80

proxy / 127.0.0.1:8089 {
  proxy_header Host {host}
  proxy_header X-Real-IP {remote}
}

(wobei die ReverseProxyURL im Recording Service gesetzt sein muss und das Webinterface ohne extra Port Angabe über jeder IP von dem PC zu erreichen ist Proxy)


Let's Encrypt[Bearbeiten]

Und hier ein deutlich aufwendigeres Beispiel. Mit .log Dateien die automatisch ab einer bestimmten Größe gelöscht werden. Und einem automatisch erzeugten Zertifikat für example.com. Das geschieht über Let's Encrypt. (Wobei zu beachten ist dass das derzeit leider für die meisten [ https://de.wikipedia.org/wiki/Dynamisches_DNSDDNS] Adressen nicht möglich ist) https://caddyserver.com/docs/automatic-https

http://localhost, https://example.com 

proxy / 127.0.0.1:8089 {
  proxy_header Host {host}
  proxy_header X-Real-IP {remote}
  proxy_header X-Forwarded-Host {host}
  proxy_header X-Forwarded-Proto {scheme}
}

gzip

tls me@example.com
 
#Das zugrifslog wird im DVBViewer Konfigurationsverzeichnis gespeichert
log C:\ProgramData\CMUV\DVBViewer\caddy-access.log {
    rotate {
		size 25 # Rotate after 25 MB
               age  30 # Keep rotated files for 30 days
		keep 2  # Keep at most 2 log files
	}
}

#Das Errorlog wird im DVBViewer Konfigurationsverzeichnis gespeichert
errors {
	log C:\ProgramData\CMUV\DVBViewer\caddy-error.log {
		size 50 # Rotate after 50 MB
		age  30 # Keep rotated files for 30 days
		keep 5  # Keep at most 5 log files
	}
}

Achtung bei tls me@example.com durch irgendeine E-Mail Adresse ersetzen auf die man zugriff hat. Die wird bei der Let's Encrypt Anmeldung verwendet.

(beim automatischen Starten des Servers muss der Parameter -agree mitgegeben werden)

Eigenes Zertifikat verwenden[Bearbeiten]

Und noch ein Beispiel mit angepasstem Log Format und mit einem schon vorhandenen Zertifikat.

Wobei zu beachten ist das nicht alle Clients ohne weitere mit Self-Signed Certificates umgehen können.

http://localhost, https://localhost, https://example.com, https://www.example.com

proxy / 127.0.0.1:8089 {
  proxy_header Host {host}
  proxy_header X-Real-IP {remote}
  proxy_header X-Forwarded-Host {host}
  proxy_header X-Forwarded-Proto {scheme}
}

gzip

tls certs\cert.pem certs\key.pem

log / caddy-access.log "{when} Client:{remote} {proto} {method} Request: {scheme}://{host}{uri} Status:{status} Size:{size}"

Die Konfiguration geht davon aus, das sich cert.pem und key.pem im Unterordner certs im Verzeichnis wo sich die caddy.exe befinden.

Selbes Signiertes Zertifikat erstellen[Bearbeiten]

Die aktuelle OpenSSL 1.0.2 Version herunterladen (https://wiki.openssl.org/index.php/Binaries der erste Eintrag mit Setup ist einfacher) und installieren.

Eine allgemeine OpenSSL ist da zu finden: https://openssl.org/docs/manmaster/apps/openssl.html


Unter C:\Users\Public\Documents (oder sonst wo wo der Nutzer Schreibrechte hat) einen Ordner certs erstellen. Die Shift-Taste gedrückt hallten und einen rechts klick auf den Ordner mit der openssl.exe machen und Eingabeaufforderung hier öffnen auswählen.

Mit folgendem Befehl wird der Private Schlüssel erzeugt:

openssl genrsa -out "C:\Users\Public\Documents\certs\key.pem" 4096

Und der Befehl erzeugt ein zwei Jahre gültiges Selbstsignierte Zertifikat für localhost (das ist eine Zeile, nur wegen der Übersichtlichkeit aufgeteilt)

openssl req -key "C:\Users\Public\Documents\certs\key.pem" -sha512 -x509 -new -days 730 
-out "C:\Users\Public\Documents\certs\cert.pem" -subj "/C=DE/ST=Berlin/L=Berlin/O=DVB/CN=localhost"

Wobei CN= an die Tatsächlich verwendeten Adressen angepasst werden muss.