Vor ein paar Stunden hatte ich ein ganz einfaches Problem: Ich musste sicher vom Internet aus auf meinen lokalen Server zugreifen, ohne ihn für unerwünschte Zugriffe zu öffnen.
Auslöser dafür war meine eigene App „Free Your Photos“ – die holt dich aus der Google-Foto-Cloud heraus und hostet deine Fotos auf einem lokalen Server – SIE GEHÖREN DIR. Mit dieser Lösung kann ich meine Fotos jetzt auf jedem PC anzeigen – sogar ohne VPN.
Mein erster Gedanke war, ein VPN zu nutzen – doch dafür müsste das VPN auf der „Browserseite“ installiert sein, sodass ich von keinem anderen Computer oder Smartphone aus auf meine Seite zugreifen könnte.
Aber – wie wäre es, wenn ich von ÜBERALL auf meinen lokalen Server zugreifen könnte, ohne ein VPN einrichten zu müssen – und trotzdem sicher wäre?
Da kam mir die Idee, einen Reverse-Proxy mit Multi-Faktor-Authentifizierung (MFA) zu nutzen. Anstatt das gesamte Netzwerk wie bei einem VPN zu öffnen, könnte ein Reverse-Proxy als Torwächter fungieren und nur dem Server selbst sowie autorisierten Nutzern Zugriff gewähren. Ich habe es so eingerichtet, dass Google Authenticator erforderlich ist, sodass selbst wenn jemand den Anmeldebildschirm erreicht, er einen zeitbasierten Code benötigt, um weiterzukommen.
ChatGPT liefert ziemlich gute Anleitungen für alle Schritte, die bei HTTP sofort funktionierten. Aber um HTTPS zum Laufen zu bringen, musste ich ein paar Feinabstimmungen vornehmen:
Meine Konfiguration: Ich nutze Python mit Gunicorn und nginx auf Ubuntu.
Was ich speziell tun musste:
Domain-Registrierung
- Registriere eine Domain bei Cloudflare
- Stelle sicher, dass der Eintrag deinen Domainnamen enthält und als Ziel auf deinen Tunnel verweist, z. B. „345234-1420-4c4e-b8e4-86f8a885ba7a.cfargotunnel.com“
- Lade die Origin-Zertifikate herunter: SSL/TLS -> Origin Server – diese werden zur Authentifizierung des lokalen Servers gegenüber Cloudflare verwendet; speichere sie in einem Ordner, auf den der nginx-Webserver zugreifen kann.

Tunnel-Konfiguration
ZeroTrust – Konfiguration => Netzwerk => Tunnel => Cloudflared
Type: https, URL: localhost:443
TSL: NO TLS Verify
Nginx-Konfiguration
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <your domain name>;
ssl_certificate /etc/ssl/certs/cloudflare_cert.pem; # Path to your SSL certificate
ssl_certificate_key /etc/ssl/certs/cloudflare_key.pem; # Path to your private key
location / {
include proxy_params;
proxy_pass http://unix:/home/cneuhaus/FreeYourPhotos/fyp.sock;
}
}
Google-Authentifizierung
Der Zugriff sollte nur für mich selbst gelten, daher wollte ich Google als Authentifizierungsanbieter nutzen. Für einfache Schritte ist ChatGPT wieder dein Freund.
Aber ich wollte nur Zugriff für mich selbst – sonst könnte sich jeder mit einem Google-Konto anmelden. Dazu:
Zero Trust=>Settings=>Authentification=>Login Methods, enter App-ID and Client Secret.
Zero Trust=>Application (create new one) =>Policies=>Configure Rules=> add your full Gmail address here
