[GUIDE] Hur man SÄKERT får tillgång till dina lokalt värdbakade tjänster utanför [med Cloudflare Zero Trust]

Om du letar lite här, hade jag vissa… problem med Oracle molnhosting, så jag bestämde mig för att gå helt på plats, hem-lab självhosting. Men som du kan tänka dig, vill jag ha tillgång till vissa tjänster, som Jellyfin eller Zabbix från utsidan, inte bara från mitt eget nätverk.

Denna guide är resultatet av min sökning efter den bästa och säkraste lösningen på det problemet. Det är inte DEN BÄSTA, det är inte DEN MEST SÄKRA, som alltid bör du använda din egen bedömning. Men jag tycker för icke-kritiska applikationer, såsom självhostad Zabbix, borde vara mer än tillräckligt.

Vad som kommer att användas här är Cloudflare Zero Trust, vilket är tillgängligt gratis på Cloudflare-konto. Notering - Jag vet säkert att detta fungerar om du har domän registrerad via CF, inte säker och ingen möjlighet att kontrollera om det är möjligt med andra registratorer.

Så först - vad är det och hur fungerar det?
Jag kommer bara att förklara delar som är viktiga för denna guide. Så vi kommer att använda Zero Trust Tunnel och Zero Trust Application Access.

  1. Zero Trust Tunnel är i princip ett site-to-site VPN mellan ditt nätverk och Cloudflare Zero Trust-servrar. Det gör att CF kan komma åt dina resurser via lokal IP-adress, lösa dem och tilldela dem sin egen publika IP. Den tar dina lokala IP-adresser, skapar en CNAME för din domän, och dirigerar all trafik via CF:s publika IPv4 och IPv6 adresser via deras proxy till dina utsedda lokala IPv4 adresser. Om du gör en nslookup på ditt värdnamn, får du bara CF från deras IP-områden
  2. Zero Trust Application Access är ett sätt att säkra åtkomst till dina applikationer, i princip genom att tvinga genomloopar och krokar på CF-hostad autentiseringssida, innan du kan få åtkomst även till inloggningsskärmen för din tjänst

Låt oss skapa en Tunnel
Så sätts ZT Tunnel upp, du går från din Dashboard till Zero Trust → Nätverk → Tunnlar. Här kan du hitta detaljerad instruktion om hur du installerar och ansluter cloudflared daemon, som fungerar som en kopplare och gateway till ditt hemnätverk. Om du använder virtualisering, som Proxmox, rekommenderar jag att du sätter upp en liten VM/CT, för att fungera som din kopplare.
När detta är upprättat konfigurerar du det och lägger till Public Hostname. Här kan du lägga till lokala IP-adresser för dina tjänster. Och här är några varningar:

  1. Du vill välja HTTP, inte HTTPS. Cloudflare Zero Trust lägger till sin egen SSL/TLS omvända proxy, så i slutändan är dina tjänster bakom HTTPS. Om du bara har HTTPS (som med Proxmox) vill du välja HTTPS, och i TLS-inställningarna aktivera “No TLS Verify” och “HTTP2 connection”.
  2. Du MÅSTE ändra standardporten från 80 till något annat. Av någon anledning, om din tjänst är värdbaserad på port 80, lägger inte CF till sin egen SSL/TLS (exempelvis PiHole, där du enkelt kan ändra till något som 8100).

Nu kan du nå dina tjänster utifrån med värdnamn du ställt in, men det är fortfarande inte mycket säkert - om du kan komma åt dem, kan alla komma åt dem. Och ja, om du använder ett starkt, komplicerat, slumpmässigt lösenord minimeras risken, men det finns fortfarande exploateringar man kan använda. Så låt oss förstärka dem ytterligare.

Cloudflare Zero Trust Access - förvånansvärt kraftfullt verktyg

Vad Access är jag redan förklarade. Men vad jag inte specificerade, hur kraftfullt det faktiskt är. När du sätter upp det och skriver in din tjänste-URL, omdirigeras du till cloudflareaccess.com domänen, vilket kräver att du autentiserar dig. Som standard har du bara tillgång till OTP-autentisering via e-post - du skriver in din e-post, får en OTP, och först när du skriver in den, får du tillgång i flera minuter/timmar/dagar. Men, med ZT Access har du minst fyra eller fem nivåer av autentisering:

  1. Du kan ställa in flera autentiseringsmetoder: OTP, inloggning via flera sidor (Facebook, GitHub, LinkedIn), OAuth2 (Google, Azure, Google Workspaces), OneLogin, OpenID, med timeout från 1 minut till 1 månad
  2. Du kan begränsa vem som kan använda dessa autentiseringsmetoder, baserat på deras e-postadress, geolokalisering, IP-område, tjänstetoken
  3. Du kan kräva att användaren ger en motivering till varför de vill ha åtkomst till tjänsten, med manuell granskning och godkännande
  4. Du kan kräva att användaren använder WARP (Cloudflares egen “typ av VPN”, tillgänglig på 1.1.1.1) för att ens få åtkomst till dessa autentiseringsmetoder, och kan också kopplas till policyer och restriktioner från punkt 2
  5. Du kan ställa in flera WARP-klientrestriktioner, som: har användaren krypterad hårddisk, har en särskild fil med ett särskilt namn på en angiven plats på sin dator, använder WARP som det är, eller är inloggad i din Zero Trust organisation

Så du kan skapa något som “för att få åtkomst till min Zabbix, måste du ha WARP aktiverat och inloggad i organisationen, ha krypterad hårddisk, vara lokaliserad i Tyskland, din e-post måste vara på foo.bar, och du måste ha den här bilden av en apa som heter gibaccess.png på skrivbordet, då och bara då kan du be mig, med korrekt motivering, att använda ditt GitHub-konto för att autentisera din åtkomst, men bara för 1 timme”. Det är tillräckligt kraftfullt.

Men för vårt ändamål tycker jag OTP med restriktion att endast tillåta en enda e-postadress att ta emot koden räcker gott och väl. Jag kommer inte att beskriva hela processen, om du självhostar är du tillräckligt smart för att förstå vad som pågår. Det viktigaste - du vill skapa en ny Applikation, välj självhostad, lägg till domäner från dina Tunnel Public Hostnames, och konfigurera policyn - minsta möjliga är Inkludera - Alla, Kräv - E-post - endast din e-post.
När du har skapat applikationen måste du gå tillbaka till Tunnlar, och omkonfigurera varje Värdnamn, aktivera Access och välja applikationen du just skapade.

Och nu, när du skriver in din tjänste-URL, kommer du att kastas till Cloudflare Access-sidan, som kräver att du skriver in din e-post. Du kan skriva vilken e-post som helst, men om du har konfigurerat policyn rätt, kommer koden bara att skickas om du uppger din e-post. Den kommer att acceptera andra e-postadresser, men skicka inte koden.

Det är allt, hoppas du gillar det, och ha kul med det :slight_smile: