Ist ein Reverse Proxy mit Portfreigabe „sicher“?

Hallo Zusammen,

ich hoste gerne und viel. Paar Dienste davon würde ich gerne meiner Familie zur Verfügung stellen. Da viele der Familie technisch nicht versiert sind will ich es simple halten. Daher der Gedanke per CaddY gewisse Dienste per Portforwarding 443 freizugeben. Gesichert wird es rein mit Crowdsec und oder fail2ban.

Frage: Betreibt ihr es auch so oder ist es euch zu unsicher?

Sicher vor was? Ein Reverse Proxy wie Caddy sorgt zunächst einmal dafür, dass nur ein System aus dem Internet erreichbar sein muss. Gegen Schwachstellen in der dahinterliegenden Webanwendung schützt er aber nicht automatisch. Wenn ein gültiger HTTPS-Request einen Exploit für den internen Dienst enthält, wird Caddy ihn im Normalfall schlicht weiterreichen. Out of the Box ist Caddy keine WAF, entsprechende Funktionen lassen sich aber afaik über zusätzliche Komponenten bzw. Plugins ergänzen. CrowdSec oder fail2ban helfen eher gegen auffällige Clients, Brute-Force und ähnliche Muster.

Ob das „sicher“ ist, hängt daher vor allem davon ab, welche Dienste du veröffentlichst, wie gut sie gepflegt werden und vor welchem Angriffsszenario du dich schützen willst.

Was willst du denn hosten? Wäre die Nutzung von Client-Zertifikaten eine Option?

Würde gerne Immich, Paperless und ggf. Vaultwarden erreichbar machen. Immich damit meine ganze Familie eine Alternative zu Google Fotos im Ähnlichen Stil hat, Paperless für Dokumente und Vaultwarden für Passwörter. Letzteres bin ich mir noch am unsichersten.

Habe immich unter orbstock als Heimserver, abgesichert mit Nginx. Getestet mit ZAP.

Dann würde ich die drei Dienste auch unterschiedlich behandeln. Bei Immich kann man einen öffentlichen Zugriff über einen Reverse Proxy gut vertreten, sofern das System aktuell gehalten wird und die Benutzerkonten vernünftig abgesichert sind.

Bei Paperless wäre ich schon zurückhaltender, weil dort sehr persönliche Dokumente liegen können. Und bei Vaultwarden würde ich die Messlatte noch höher legen, weil dort letztlich die Zugangsdaten zu allen möglichen anderen Diensten liegen. Technisch kann man auch Vaultwarden hinter Caddy veröffentlichen, aber dann würde ich sehr genau auf Updates, starke Authentisierung, 2FA, Rate-Limiting und möglichst restriktive Zugriffsregeln achten. Bei Paperless und Vaultwarden würde ich daher durchaus überlegen, den Zugriff nur über ein VPN zu erlauben.

Ein Reverse Proxy selbst ändert daran wenig: Er ist der zentrale Einstiegspunkt, aber ein Exploit gegen Immich, Paperless oder Vaultwarden bleibt ein Exploit gegen den jeweiligen Dienst.

Wenn du Services öffentlich erreichbar machst, steigen die Ansprüche an die Sicherheit deutlich:

  • Kümmern um schnelles Einspielen von Sicherheitsupdates für das OS und alle Services. Wenn man der einzige Admin ist, kommt man um automatische Updates nicht drum herum, da man auch damit rechnen muss unpässlich zu sein.
  • Isolation der Services voneinander, um zu verhindern, dass ein gehackter Service auf andere übergreift
  • Automatisierte Ransomeware-sichere Backups
  • Isolation des Servers im Netzwerk, damit ein gehackter Service sich nicht im Heimnetz ausbreiten kann
  • Für sensible Daten Ende-zu-Ende-Verschlüsselung und/oder Zugang nur mit VPN oder Client-Zertifikaten
  • Beschäftigung mit der möglichst sicheren Konfiguration jedes Services

Würde Orbstack bei Nutzng der Funktion Kubernets - also z.B. Nginx auf einem PC - Immich auf einem zweiten PC - diese Voraussetzung erfüllen?

Reicht eine Überprüfung der Konfiguration, in diesem Fall als Heimanwender, mit dem Spider von ZAP aus? Würde man im Web verfügbare online Tools nutzen?

Wie wichtig ist es, ein Immich Update zu nutzen? Eher zu vernachlässigen?

Immich würde ich nur via Immich Public Proxy zugänglich machen.

Ich biete auch Dienste von zuhause aus an, z.B. mein Jellyfin. Aber dafür nutze ich keine Portfreigabe, sondern einen Reverse Tunnel via Pangolin auf meinem Hetzner Server.

Mein Heimnetz ist komplett dicht, keine offenen Ports, nicht mal ICMP.

Zwei Dienste auf unterschiedlichen Rechnern zu betreiben schafft zunächst einmal eine zusätzliche Isolation, allerdings nicht durch Kubernetes oder OrbStack an sich. Entscheidend ist, welche Netzwerkverbindungen zwischen den Hosts erlaubt sind und welche Rechte die jeweiligen Container bzw. Dienste auf ihren Hosts besitzen.

ZAP würde ich nicht als Prüfung einer sicheren Konfiguration verstehen. Der Spider dient zunächst der Erkennung der erreichbaren Webinhalte; auch ein aktiver Scan findet nur bestimmte Klassen von Web-Schwachstellen. Ob beispielsweise Container privilegiert laufen, unnötige Volumes oder Docker-Sockets eingebunden sind, Datenbanken aus anderen Netzen erreichbar sind oder Secrets vernünftig behandelt werden, beantwortet ZAP nicht.

Updates würde ich bei jedem öffentlich erreichbaren Server für ausgesprochen wichtig halten. Gerade eine solche Anwendung wie Immich hat eine große Angriffsfläche: Uploads, Bildverarbeitung, APIs, Authentisierung usw. Und es gab auch bereits relevante Sicherheitslücken in Immich. Auch wenn ich mich wiederhole: Ein Reverse Proxy kann eine Schwachstelle nicht kompensieren, wenn der dafür notwendige Request ganz regulär bis zur Anwendung durchgereicht wird.

Danke für den Tip. Kann der Besucher die Bilder herunterladen?

Ist Pangolin sicherer? Du veröffentlichst die Dienste ja trotzdem und diese sind für jeden zugänglich. Weil das ist doch das Risiko meine ich oder? :slight_smile:

Wenn man die Bilder anschauen kann, dann kann man sie logischerweise auch herunterladen. Verstehe also die Frage nicht ganz.

Die öffentliche Adresse meiner Dienste ist aber nicht meine eigene IP-Adresse, sondern die meines Servers. Die Verbindung wird aus meinem Heimnetz zum Server aufgebaut. Das bedeutet, mein Heimnetz ist weiterhin komplett unsichtbar.