Eksponer en intern tjeneste med Cloudflare Tunnel og Cloudflare Access

Portforwarding og dynamisk DNS er den vanlige måten å gjøre en intern tjeneste tilgjengelig utenfra, for eksempel en tjeneste i et LXC. Det gir en åpen port mot internett og en synlig hjemme-IP. Åpne porter skannes kontinuerlig og automatisk.

Utgående forbindelse i stedet for åpen port

Diagram som viser hvordan cloudflared-agenten på innsiden holder en utgående forbindelse til Cloudflare, slik at brukere når tjenesten uten åpne innkommende porter

Med Cloudflare Tunnel kobler du ut til Cloudflare, og internett kobler ikke inn til deg. Agenten cloudflared kjører på innsiden og holder en utgående forbindelse åpen. All trafikk til tjenesten kommer inn den veien. Du har ingen innkommende porter og ingen synlig IP.

Cloudflare terminerer HTTPS. Du trenger ikke egne sertifikater eller Let’s Encrypt-fornying på innsiden. Tjenesten snakker vanlig HTTP lokalt, og Cloudflare håndterer TLS utad.

Oppsett

Installer cloudflared på serveren som når den interne tjenesten. Autentiser mot kontoen og opprett en tunnel.

cloudflared tunnel login
cloudflared tunnel create min-tjeneste
Rut et vertsnavn til den interne HTTP-tjenesten. Her peker et subdomene mot en tjeneste som kjører lokalt.

# config.yml
tunnel: min-tjeneste
credentials-file: /etc/cloudflared/<tunnel-id>.json

ingress:
- hostname: tjeneste.eksempel.no
service: http://192.168.x.x:8080
- service: http_status:404
Opprett DNS-oppføringen. Det blir en CNAME som peker mot tunnelen.

cloudflared tunnel route dns min-tjeneste tjeneste.eksempel.noKjør tunnelen som en tjeneste, så den starter igjen etter omstart.

Skjematisk flyt som viser at Cloudflare Access sjekker hver forespørsel og krever godkjent innlogging før trafikken slipper videre til den interne tjenesten

cloudflared service install
systemctl enable --now cloudflared
En tunnel beskytter ikke tjenestenEn tunnel gjør tjenesten tilgjengelig, men beskytter den ikke. Uten noe foran er tjenesten åpen for hele internett, bare bak et domenenavn i stedet for en IP. Har den svak pålogging eller et kjent hull i en gammel versjon, er den like eksponert som med portforwarding.

Legg en Access-policy foran tunnelen. Cloudflare Access sjekker hver forespørsel før den når tjenesten. Du kan kreve innlogging, et bestemt e-postdomene eller et service-token for maskiner som kommuniserer uten et menneske involvert.

# Access-policy (eksempel)
Application: tjeneste.eksempel.no
Policy: Allow
Include: emails ending in @dittfirma.no
En bruker må nå godkjennes av Cloudflare før forespørselen slipper videre. Uautoriserte brukere ser ikke engang forsiden av applikasjonen.