Uncategorized

My homelab’s zero-trust edge: Cloudflare Access + Authentik + YubiKey + Cloudflared (PVE stays private via Tailscale)

My Homelab’s Zero-Trust Edge: A Deep Dive into Security and Simplicity

As someone who designs zero-trust security architectures for banks and agencies, I decided to create a similar setup for my homelab. The goal was to achieve military-grade security without sacrificing usability, all while using various free and open-source platforms. In this post, I’ll take you through my journey of setting up a zero-trust edge for my homelab, using Cloudflare Access, Authentik, YubiKey, Cloudflared, and Tailscale.

What is a Zero-Trust Edge?

A zero-trust edge is a security approach that assumes no device or user is trustworthy, regardless of whether they’re inside or outside the network. This means that every request, whether it’s from a public or private IP address, must be authenticated and authorized before it can access any application or service. In my homelab setup, I wanted to achieve this level of security while still making it easy to use and manage.

My Setup: Cloudflare Access, Authentik, YubiKey, and Cloudflared

I started by setting up Cloudflare Access, which provides a zero-trust edge for my homelab. I also set up Authentik as my identity provider (IdP), which enforces WebAuthn (YubiKey) for all public-facing applications. This means that anyone trying to access my public apps must first authenticate with their YubiKey, which provides an additional layer of security against phishing and credential stuffing attacks.

How it Works

Here’s a high-level overview of how my setup works:

  • A user tries to access a public app (e.g., Pi-hole) by visiting its URL (e.g., https://pihole.mydomain.com).
  • Cloudflare Access evaluates the request and challenges the user to authenticate with Authentik.
  • Authentik prompts the user to authenticate with their YubiKey (or OTP as a fallback).
  • Once authenticated, Authentik returns a token to Cloudflare Access, which then injects a session and forwards the request to the internal service (e.g., Pi-hole) via Cloudflared Tunnel.
  • The internal service responds over the tunnel, and the user’s browser never sees the internal IP address.

Admin-Only Apps: Tailscale and Private PKI

For admin-only apps (e.g., Proxmox VE, Proxmox Backup), I use Tailscale to provide a private overlay network. This means that these apps are not published via the Cloudflared Tunnel and are only accessible via Tailscale. I also use a private PKI (step-ca) to issue internal server certificates, which are then used by Caddy (a reverse proxy) to terminate TLS connections.

Benefits of this Setup

This setup provides several benefits, including:

  • Zero-trust at the edge: every public request must prove identity before it can access an app.
  • Hardware-backed auth: YubiKey provides an additional layer of security against phishing and credential stuffing attacks.
  • No open inbound ports: everything uses an outbound tunnel (Cloudflared) or a private overlay (Tailscale).
  • Simple to operate: as few moving parts as possible for a single-operator lab.

Trade-Offs and Future Improvements

While this setup works well for me, there are some trade-offs and potential improvements to consider. For example, I didn’t implement mTLS at the edge due to plan/feature limitations, but I may add it in the future. I also considered adding an origin JWT check for defense-in-depth, but it’s not currently implemented.

Conclusion

In conclusion, my homelab’s zero-trust edge setup using Cloudflare Access, Authentik, YubiKey, Cloudflared, and Tailscale provides a secure and simple way to manage access to my public and admin-only apps. By separating public and admin planes, enforcing hardware-backed auth, and using internal TLS, I’ve achieved a high level of security without sacrificing usability. If you’re building a similar setup, I hope this post has provided some useful insights and inspiration.

Moja Krawędź Homelab Zero-Trust: Głębokie Zanurzenie w Bezpieczeństwie i Prostocie

Jako osoba, która projektuje architektury bezpieczeństwa zero-trust dla banków i agencji, postanowiłem stworzyć podobny zestaw dla mojego homelabu. Celem było osiągnięcie wojskowego poziomu bezpieczeństwa bez poświęcania użyteczności, wszystko przy użyciu różnych platform open-source. W tym poście, opowiem o mojej podróży tworzenia krawędzi zero-trust dla mojego homelabu, korzystając z Cloudflare Access, Authentik, YubiKey, Cloudflared i Tailscale.

Co to Jest Krawędź Zero-Trust?

Krawędź zero-trust to podejście bezpieczeństwa, które zakłada, że żadne urządzenie ani użytkownik nie jest godny zaufania, niezależnie od tego, czy znajduje się wewnątrz czy na zewnątrz sieci. Oznacza to, że każdy żądanie, niezależnie od tego, czy pochodzi z publicznego czy prywatnego adresu IP, musi być uwierzytelnione i autoryzowane przed dostępem do jakiejkolwiek aplikacji lub usługi. W moim zestawie homelabu chciałem osiągnąć ten poziom bezpieczeństwa, jednocześnie utrzymując łatwość użytkowania.

Mój Zestaw: Cloudflare Access, Authentik, YubiKey i Cloudflared

Zacząłem od konfiguracji Cloudflare Access, który zapewnia krawędź zero-trust dla mojego homelabu. Ustawiam również Authentik jako mojego dostawcę tożsamości (IdP), który wymusza WebAuthn (YubiKey) dla wszystkich publicznie dostępnych aplikacji. Oznacza to, że każdy, kto próbuje uzyskać dostęp do moich publicznych aplikacji, musi najpierw uwierzytelnić się przy użyciu swojego YubiKey, co zapewnia dodatkową warstwę bezpieczeństwa przed atakami phishingowymi i kradzieżą poświadczeń.

Jak to Działa

Oto ogólny przegląd, jak działa mój zestaw:

  • Użytkownik próbuje uzyskać dostęp do publicznej aplikacji (np. Pi-hole) odwiedzając jej adres URL (np. https://pihole.moja-domena.pl).
  • Cloudflare Access ocenia żądanie i wyzywa użytkownika do uwierzytelnienia się w Authentik.
  • Authentik prosi użytkownika o uwierzytelnienie się przy użyciu swojego YubiKey (lub OTP jako fallback).
  • Po pomyślnym uwierzytelnieniu, Authentik zwraca token Cloudflare Access, który następnie wstrzykuje sesję i przekazuje żądanie do wewnętrznej usługi (np. Pi-hole) za pomocą tunelu Cloudflared.
  • Wewnętrzna usługa odpowiada przez tunel, a przeglądarka użytkownika nie widzi wewnętrznego adresu IP.

Aplikacje Tylko dla Administratorów: Tailscale i Prywatny PKI

Dla aplikacji tylko dla administratorów (np. Proxmox VE, Proxmox Backup) używam Tailscale, aby zapewnić prywatną sieć nakładania. Oznacza to, że te aplikacje nie są publikowane za pomocą tunelu Cloudflared i są dostępne tylko za pomocą Tailscale. Używam również prywatnego PKI (step-ca), aby wydawać wewnętrzne certyfikaty serwerowe, które są następnie używane przez Caddy (odwrotny serwer proxy), aby zakończyć połączenia TLS.

Korzyści z tego Zestawu

Ten zestaw zapewnia kilka korzyści, w tym:

  • Zero-trust na krawędzi: każde publiczne żądanie musi udowodnić tożsamość, zanim będzie mogło uzyskać dostęp do aplikacji.
  • Autoryzacja oparta na sprzęcie: YubiKey zapewnia dodatkową warstwę bezpieczeństwa przed atakami phishingowymi i kradzieżą poświadczeń.
  • Brak otwartych portów wejściowych: wszystko używa tunelu wychodzącego (Cloudflared) lub prywatnej sieci nakładania (Tailscale).
  • Łatwy w obsłudze: jak najmniej ruchomych części dla pojedynczego operatora laboratorium.

Kompromisy i Przyszłe Ulepszenia

Chociaż ten zestaw działa dobrze dla mnie, istnieją pewne kompromisy i potencjalne ulepszenia, które należy rozważyć. Na przykład, nie wdrożyłem mTLS na krawędzi z powodu ograniczeń planu/funkcji, ale mogę dodać ją w przyszłości. Rozważałem również dodanie sprawdzenia pochodzenia JWT dla głębszej obrony, ale nie jest to jeszcze wdrożone.

Podsumowanie

Podsumowując, mój zestaw krawędzi zero-trust dla homelabu, korzystający z Cloudflare Access, Authentik, YubiKey, Cloudflared i Tailscale, zapewnia bezpieczny i prosty sposób zarządzania dostępem do moich publicznych i aplikacji tylko dla administratorów. Poprzez oddzielenie publicznych i administratora płaszczyzn, egzekwowanie autoryzacji opartej na sprzęcie i korzystanie z wewnętrznego TLS, osiągnąłem wysoki poziom bezpieczeństwa bez poświęcania użyteczności. Jeśli budujesz podobny zestaw, mam nadzieję, że ten post dostarczył ci przydatnych informacji i inspiracji.

Leave a Reply

Your email address will not be published. Required fields are marked *

WordPress Appliance - Powered by TurnKey Linux