Um was geht es?

Jahrelang habe ich die Applikationen in meinem Heimnetzwerk, via VPN oder Port Forwarding für die Aussenwelt erreichbar gemacht. Einmal war VPN die bevorzugte Lösung, das nächste Mal Port Forwarding. Wobei VPN meiner Meinung nach, die sicherere Lösung war. Mit der Zeit ging mir das ständige Öffnen der OpenVPN App auf den Senkel. Immer wieder stellte ich mir die Frage:
Gibt es für dieses Problem keine bessere Lösung?

Cloudflare

Einige kennen Cloudflare vielleicht von deren schnell und sicheren DNS Service (1.1.1.1) oder CDN (Content Delivery Network). Cloudflare bietet zudem Services im Sicherheitsbereich an. Um diese Dienste geht es in diesem Beitrag, genau genommen um zwei. 

Cloudflare Access

Der erste Service, der mir bei der Lösung meines Problems geholfen hat, ist Cloudflare Access. Dieser Service erlaubt es, Zugriff auf Ressourcen zu sichern und eine Authentifizierung durchzuführen. Auch die Tatsache, dass sich der Zugriff auf Ressourcen überwachen lässt, überzeugt mich. Bei jedem Zugriff wird ein Ereigniseintrag im JSON Format erstellt. In diesem Fall durch mich nachträglich anonymisiert:  
cloudflare access log
Cloudflare Access -Ereigniseintrag

Der Zugriff auf die konfigurierten Ressourcen, geschieht via Identitätsanbieter: 

Access Basic und Access Premium Abo:
    • Facebook
    • Google
    • Github
    • Yandex
    • One-Time Pin

Access Premium Abo:
    • Okta
    • OneLogin
    • Centrify
    • Microsoft AzureAD
    • GSuite

Die Preise für Cloudflare Access sind angemessen, für das Basic Abo mit bis zu fünf Benutzer werden keine Kosten fällig. Jeder zusätzliche Benutzer im Basic Abo, kostet $3 pro Monat. Im Premium Abo sind es $5 pro Monat. Genaugenommen, fungiert Cloudflare Access als Reverse Proxy mit Anbindung an einen Identitätsanbieter. Mit dem zweiten Produkt wird die Sicherheit und Funktionalität von Cloudflare Access noch einmal gesteigert. 

Cloudflare Argo

Kürzere Ladezeiten, erhöhte Zuverlässigkeit, integrierte Sicherheit und Reduzierte Kosten, all das tut Argo. In meinem Anwendungsfall spielt nur die integrierte Sicherheit eine Rolle. Argo versteckt die IP Adresse meines Routers und schützt die Infrastruktur meines Providers vor DDos Attacken. Auch das Port Forwarding fällt weg, auf dem Server läuft ein Agent, der einen Tunnel zum nächsten gelegenen Datacenter aufbaut. In der Schweiz hat Cloudflare zwei Datacenter Standorte, Zürich und Genf. 
cloudflare argo
Cloudflare Argo - Funktionsweise

Für die Verwendung von Argo, muss Cloudflare zudem als DNS Provider verwendet werden. Am besten holt man sich dafür bei Namecheap eine billige Domain. Xyz. Domains gibt es dort bereits ab $1 pro Jahr.

Die Konfiguration des Agents auf dem Server gestaltet sich simpel. In meinem Fall verwende ich Ubuntu als Server Betriebssystem: Cloudflared herunterladen:
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
Cloudflared installieren:
sudo dpkig -i cloudflared-stable-linux-amd64.deb
Einloggen in den Cloudflare Account, es öffnet sich ein Browser Tab:
cloudflared tunnel login
Sobald man eingeloggt ist, ist eine Liste mit den verbundenen Domains sichtbar. Die zu konfigurierende Domain muss ausgewählt werden, Cloudflared installiert nun die nötigen Zertifikate. Dieser Schritt ist notwendig, damit der Server im Cloudflare Netzwerk authentifiziert werden kann. Schlägt die automatisierte Installation fehl, kann man die Zertifikate auch manuell an den richtigen Ort verschieben:
mv cert.pem ~/.cloudflared/cert.pem
Damit der Agent nach einem Neustart des Servers automatisch startet, erstellt man am besten ein Service File:
sudo nano /etc/systemd/system/cloudflared-domain.service
Der Inhalt des Files, auch einsehbar auf meinem Gist:
[Unit]
Description=Argo Tunnel
After=network.target
[Service]
TimeoutStartSec=0
Type=notify
ExecStart=/usr/local/bin/cloudflared --config /etc/cloudflared/config.yml --origincert /etc/cloudflared/cert.pem --no-autoupdate
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target “

Etwas fehlt nun noch das Konfigurationsfile für Cloudflared:
sudo nano /etc/cloudflared/config.yml

Der Inhalt, auch hier ein Gist:
hostname: server1.com
loglevel: warn
url: http://server1.com
logfile: /var/log/cloudflared.log

Der Hostname sowie die URL müssen mit den eigenen Angaben ersetzt werden. Service starten:
sudo systemctl start cloudflared-domain.service
Service überprüfen:
sudo systemctl status cloudflared-domain.service
Das Aufbauen des Tunnels benötigt einen Augenblick. Nach erfolgreichem Aufbau, ist der Tunnel im Cloudflare Dashboard ersichtlich. In meinem Fall sind es drei Tunnel, da ich auch drei Applikationen produktiv verwende. 
Cloudflare Dashboard - Argo Tunnel
Cloudflare Dashboard - Argo Tunnel

Argo lässt sich auch zum lokalen Entwickeln und Testen einer Webapplikation einsetzen. Cloudflared lässt sich ebenso auf macOS oder Windows installieren. Dadurch kann die Webapplikation kurzzeitig und schnell über das Internet erreichbar gemacht werden. Die Verwendungskosten für Argo belaufen sich auf $5 pro Monat je Domain. Das erste Gigabyte ist kostenfrei, jedes weitere Gigabyte kostet $0.1. Seit ich mit der Verwendung von Argo begonnen habe, waren meine Kosten nie mehr als $5.2. 

Sicherheit

Mir ist vollkommen bewusst, dass der über Cloudflare laufende Netzwerkverkehr, durch Cloudflare eingesehen werden kann. Das Cloudflare ein amerikanisches Unternehmen ist, sollte einem auch bewusst sein. Trotzdem gewinnt die Cloudflare Lösung für mich, da die UX (User Experience) genial ist. Faktisch fügen Argo und Access mehrere Sicherheitsebenen hinzu:
  • DDos Protection
  • Schutz vor Man in the Middle Attacken
  • Rate Limiting beim Login
  • ACLs (Access Control Rules) lassen sich konfigurieren, beispielsweise Länder Blockaden.
  • Verschleierung der IP Adresse

Fazit

Cloudflare Argo und Access sind für mich zwei geniale Produkte, de ich gerne verwende. Es erlaubt mir, Grafana, Influxdb und Home Assistant sicher aus dem Internet erreichbar zu machen und das ohne Port Forwarding oder VPN. Die Applikationen sind natürlich nebst der Authentifizierung via Identitätsanbieter, mit einer zusätzlichen Authentifizierung abgesichert.  Lass mich via Twitter  wissen, wie du die Applikationen in deinem Heimnetzwerk für die Aussenwelt erreichbar machst?

Blog Monitoring – worldPing und Grafana

Ein Blog ist schön und gut, doch was wenn der Blogger nicht bemerkt, dass sein Blog seit Tagen nicht mehr läuft. Die Hintergründe des Ausfalles interessieren den Blog Leser wenig.…


0 4 Minuten

Traceroute Monitoring – MTR

Du interessierst dich für die Anzahl an Hops. die ein IP Paket zu einem gewissen Target Host traversieren muss. Das Resultat davon willst du visualisieren und in einer Datenbank…


0 2 Minuten

Viele Apps sind mühsam – Wetter in Home Assistant

Ich bin kein Freund von vielen Apps, darum habe ich auch nur die Nötigsten auf meinem Smartphone. Wenn ich eine App länger nicht verwende, so deinstalliere ich diese ziemlich…


0 4 Minuten