Cloudflare Tunnel sicher einrichten

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:3000 für Uptime Kuma
  • http://localhost:8080 für eine Web-App
  • https://localhost:443 für interne HTTPS-Dienste
  • http://192.168.1.50:8096 fü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 cloudflared lokal 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 cloudflared aktuell
  • 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.