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

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 loginRut et vertsnavn til den interne HTTP-tjenesten. Her peker et subdomene mot en tjeneste som kjører lokalt.
cloudflared tunnel create min-tjeneste
# config.ymlOpprett DNS-oppføringen. Det blir en CNAME som peker mot tunnelen.
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
cloudflared tunnel route dns min-tjeneste tjeneste.eksempel.noKjør tunnelen som en tjeneste, så den starter igjen etter omstart.

cloudflared service installEn 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.
systemctl enable --now cloudflared
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)En bruker må nå godkjennes av Cloudflare før forespørselen slipper videre. Uautoriserte brukere ser ikke engang forsiden av applikasjonen.
Application: tjeneste.eksempel.no
Policy: Allow
Include: emails ending in @dittfirma.no


