Schritt-für-Schritt-Anleitung für Cloudflare Tunnel auf Ubuntu mit cloudflared, sicherer Veröffentlichung lokaler Dienste und klaren Sicherheitstipps.
Anleitung personalisieren
Trage Hostname, lokalen Zielservice und Tunnel-Namen ein, damit die Beispiele direkt zu deinem Setup passen.
Cloudflare Tunnel ist eine elegante Möglichkeit, interne Dienste sicher ins Internet zu veröffentlichen, ohne auf deinem Server eingehende Ports öffnen zu müssen. Statt Portweiterleitungen, offenen Firewalls oder öffentlich sichtbaren Origin-IPs baut cloudflared eine ausgehende Verbindung zu Cloudflare auf.
Gerade für Admin-Tools, Dashboards, Uptime Kuma, Authentik, Paperless-ngx oder andere Self-Hosted-Webdienste ist das sehr praktisch. Du veröffentlichst nur die gewünschte Anwendung, behältst die eigentliche Server-IP verborgen und kannst zusätzlich Cloudflare Access als Login-Schutz davorschalten.
In dieser Anleitung richten wir einen Cloudflare Tunnel auf Ubuntu sauber ein, veröffentlichen einen lokalen Webdienst und schauen uns an, wie du das Setup möglichst sicher betreibst.
1. Voraussetzungen
Bevor du loslegst, solltest du Folgendes bereits haben:
- einen Ubuntu Server mit Internetzugang
- eine Domain, die bereits bei Cloudflare verwaltet wird
- einen lokal erreichbaren Webdienst, zum Beispiel
http://localhost:3000 - einen Cloudflare Account mit Zugriff auf die betreffende Zone
Wichtig: Cloudflare beschreibt in der aktuellen Dokumentation, dass zum Veröffentlichen eines Hostnamens eine Domain auf Cloudflare liegen muss. Genau das nutzen wir hier auch.
2. cloudflared auf Ubuntu installieren
Laut offizieller Cloudflare-Dokumentation installierst du cloudflared auf Debian und Ubuntu am saubersten über die offizielle APT-Quelle.
sudo mkdir -p --mode=0755 /usr/share/keyrings curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main" | sudo tee /etc/apt/sources.list.d/cloudflared.list sudo apt-get update sudo apt-get install cloudflared
Prüfe danach kurz, ob das Binary korrekt installiert wurde:
cloudflared --version
Wenn hier eine Versionsnummer erscheint, ist die Installation abgeschlossen.
3. Tunnel im Cloudflare Dashboard erstellen
Cloudflare empfiehlt inzwischen in vielen Fällen den Dashboard-Weg. Das ist für die meisten Setups auch der angenehmste Einstieg.
Gehe in Cloudflare zu Networking > Tunnels und erstelle einen neuen Tunnel. Vergib dabei einen sprechenden Namen, zum Beispiel:
my-app-tunnel
Wähle danach unter Setup Environment dein Linux-System aus. Cloudflare zeigt dir dann einen Installations- beziehungsweise Service-Befehl mit einem individuellen Tunnel-Token an.
Wichtig: Dieses Token ist geheim und gehört nicht in Screenshots, Git-Repositories oder öffentliche Dokumentationen.
4. Tunnel als Dienst installieren
Den von Cloudflare angezeigten Token-Befehl führst du direkt auf deinem Ubuntu Server aus. Er sieht sinngemäß so aus:
sudo cloudflared service install <DEIN_TUNNEL_TOKEN>
Dadurch richtet cloudflared einen Systemdienst ein, der den Tunnel dauerhaft aufrecht hält.
Prüfe danach den Dienststatus:
sudo systemctl status cloudflared
Wenn der Dienst sauber läuft, sollte dein Tunnel im Dashboard nach kurzer Zeit als Healthy erscheinen.
5. Öffentlichen Hostname mit lokalem Dienst verbinden
Jetzt legst du im Tunnel eine veröffentlichte Anwendung an. Laut Cloudflare besteht diese Route im Kern aus einem öffentlichen Hostnamen und einer lokalen Service-URL.
Ein typisches Beispiel wäre:
Hostname: app.example.com Service URL: http://localhost:3000
Im Dashboard gehst du dazu in deinen Tunnel und wählst unter Routes die Option Add route beziehungsweise Published application. Danach trägst du Hostname und internen Zielservice ein.
Das kann zum Beispiel sein:
http://localhost:3000für Uptime Kumahttp://localhost:8080für eine Web-Apphttps://localhost:443für interne HTTPS-Dienstehttp://192.168.1.50:8096für einen Dienst auf einem anderen Host im LAN
Wichtig ist nur, dass der Zielservice aus Sicht deines Ubuntu Servers erreichbar ist.
6. DNS-Eintrag und Aufruf testen
Cloudflare erstellt bei veröffentlichten Anwendungen die nötige Zuordnung zur Tunnel-Adresse im Hintergrund. Nach dem Speichern solltest du deinen Hostnamen also direkt testen können:
https://app.example.com
Wenn alles sauber eingerichtet ist, landet der Aufruf jetzt auf deinem lokalen Dienst, ohne dass du Port 80 oder 443 direkt auf deinem Server ins Internet öffnen musst.
Falls es nicht sofort funktioniert, prüfe zuerst:
- läuft der lokale Zielservice wirklich?
- ist die richtige interne URL eingetragen?
- steht der Tunnel im Dashboard auf Healthy?
- läuft
cloudflaredlokal sauber?
7. Tunnel lokal prüfen
Auch wenn du den Tunnel über das Dashboard erstellt hast, solltest du den lokalen Dienst kurz kontrollieren:
sudo systemctl status cloudflared sudo journalctl -u cloudflared -n 100 --no-pager
Gerade bei Tippfehlern in der Ziel-URL oder Netzwerkproblemen liefern die Journals sehr schnell einen Hinweis.
8. Optional: lokal verwaltete Tunnel per CLI
Cloudflare dokumentiert zusätzlich einen klassisch lokal verwalteten Weg per CLI. Falls du lieber mit Konfigurationsdateien arbeitest, sieht der Einstieg so aus:
cloudflared tunnel login cloudflared tunnel create my-app-tunnel cloudflared tunnel route dns my-app-tunnel app.example.com
Danach würdest du eine Konfigurationsdatei mit Tunnel-ID, Credentials-Datei und Zielservice anlegen und den Tunnel damit starten. Für viele kleine oder mittlere Setups ist die Dashboard-Variante heute aber einfacher und robuster.
9. So richtest du den Tunnel wirklich sicher ein
Ein Cloudflare Tunnel ist bereits deutlich sicherer als ein offen erreichbarer Origin mit Portweiterleitung. Für ein wirklich sauberes Setup würde ich zusätzlich diese Punkte beachten:
- öffne am Origin keine unnötigen eingehenden Ports
- veröffentliche nur den Dienst, den du wirklich brauchst
- schütze Admin-Oberflächen mit Cloudflare Access
- halte
cloudflaredaktuell - verwende keine Quick Tunnels für produktive Anwendungen
Cloudflare weist selbst darauf hin, dass veröffentlichte Hostnamen ohne Access prinzipiell öffentlich erreichbar sind. Wenn du also zum Beispiel ein internes Admin-Panel, Authentik, Portainer oder Paperless veröffentlichst, ist ein zusätzlicher Access-Schutz sehr empfehlenswert.
Für besonders sensible Dienste gilt außerdem: Verlasse dich nicht nur auf den Tunnel. Ergänze nach Möglichkeit einen Anmeldeschutz in der Anwendung selbst, starke Passwörter und wenn möglich 2FA.
10. Cloudflare Access davor schalten
Wenn du den veröffentlichten Dienst nicht für alle öffentlich zugänglich machen willst, kannst du in Cloudflare Zero Trust eine Self-hosted Application anlegen und darüber festlegen, wer überhaupt an die Anwendung kommt.
Ein typischer Schutz wäre zum Beispiel:
- nur bestimmte E-Mail-Adressen oder Domains dürfen sich anmelden
- nur du selbst oder ausgewählte Benutzer kommen an Admin-Oberflächen
- Sessions laufen nach einer bestimmten Zeit automatisch ab
Für interne Tools ist das oft einer der größten Sicherheitsgewinne überhaupt, weil die Anwendung dann nicht mehr einfach anonym im Internet erreichbar ist.
11. Updates und Wartung
Halte cloudflared regelmäßig aktuell:
sudo apt-get update sudo apt-get upgrade cloudflared
Prüfe nach Updates kurz den Dienst:
sudo systemctl status cloudflared
Wenn du später weitere Anwendungen veröffentlichen willst, musst du in der Regel keinen neuen Serverdienst aufsetzen. Oft reicht es, im bestehenden Tunnel eine weitere veröffentlichte Anwendung oder einen weiteren Hostnamen zu ergänzen.
12. Fazit
Mit Cloudflare Tunnel kannst du Webdienste auf Ubuntu elegant und deutlich sicherer veröffentlichen, ohne klassische Portfreigaben oder eine offen sichtbare Origin-IP. Gerade für Self-Hosting, Admin-Tools und private Webanwendungen ist das ein sehr starker Ansatz.
Die wichtigste Praxisregel lautet dabei: Nicht einfach nur veröffentlichen, sondern gezielt absichern. Für öffentliche Webseiten mag ein offener Hostname in Ordnung sein, für interne Tools oder Admin-Dienste würde ich fast immer zusätzlich Cloudflare Access aktivieren.
Tipp:
Wenn du bereits Uptime Kuma, Authentik, Paperless-ngx oder andere lokale Webdienste betreibst, ist Cloudflare Tunnel oft der sauberste Weg, sie ohne Portforwarding erreichbar zu machen.