So everyone is talking about cloudflare tunnels and I decided to give it a shot.

However, I find the learning curve quite hard and would really appreciate a short introduction into how they work and how do I set them up…

In my current infrastructure I am running a reverse proxy with SSL and Authentik, but nothing is exposed outside. I access my network via a VPN but would like to try out and consider CF. Might be easier for the family.

How does authentication work? Is it really a secure way to expose internal services?

Thanks!

  • pz303@kbin.social
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

    @operator

    Cloudflared tunnels are great. No firewall ports to open.

    I installed the Cloudflared docker, which is headless, and fed it my API key. Then Cloudflared creates a VPN between your system and theirs. Then, think of Cloudflare as the reverse proxy, you just configure it on the CF site instead of locally. No need for a reverse proxy on your side.

    I’ve not done anything with auth on it as what I run I don’t mind being public. If you still want to run a local auth, you can set it to hit your local reverse proxy instead and do it that way.

    The benefits are you don’t need to open firewall ports and your local IP is irrelevant so no need for dynamic DNS.

    • Encrypt-Keeper@lemmy.world
      link
      fedilink
      arrow-up
      2
      arrow-down
      1
      ·
      1 year ago

      Just a side note that “not opening firewall ports” is not inherently a security benefit if you’re exposing the same service on the same port on the same host anyway via your reverse proxy setup.

      If you were to measure your level of “security” on having ports open or not alone, then using Cloudflare tunnels could be considered worse, since an outbound VPN connection to Cloudflare is essentially circumventing your firewall’s protection entirely, meaning you’re effectively opening all 65,535 TCP and UDP ports instead of one, albeit only to Cloudflare.

      There are benefits to using Cloudflare tunnels but “not opening firewall ports” is not one of them. And you could just as easily accomplish the same thing without Cloudflare by using a VPS and Tailscale with the selfhosted Headscale coordinator.

  • Meow.tar.gz@lemmy.goblackcat.com
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    In effect, Cloudflare would give protection against DDoS attacks before requests would even hit your servers. That much said you can implement mitigations on the reverse proxy itself. One example would be fail2ban.

    I’m sure there are additional steps that you can take. I’m not a fan of Cloudflare because their free offering has some caveats and violating these could be problematic. I have a cloud VPS with a WireGuard tunnel back to my server. I don’t have to do anything ugly like port forwarding. The cloud VPS runs NGINX as a reverse proxy. It’s a relatively simple and effective setup.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Thanks! How do you handle that with internal DNS? I suppose you’d need to setup the exact same proxies on the internal and external server, and local DNS handles which one my domain it’s being resolved to?

      • Meow.tar.gz@lemmy.goblackcat.com
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Right now the internal DNS I use has a TLD of .lan but that’s pretty much for my personal convenience. I access my websites by their FQDN internally with no issue. So I am not sure what your tring to achieve. Mind elaborating?

  • Sparking@lemm.ee
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    People are saying that it is a cloud managed reverse proxy, but I would not recommend using it like this. You should be running a reverse proxy on your own hardware, imo.

    It is still useful because you can use it as just a proxy. You can point your dns to your cloudflare tunnel endpoint and cloudflare will screen all traffic going to your server. I’ve actually stopped using it, but it is a decent way to auto feel all the random internet traffic pitfalls like portscanning bonnets. Also putting something between your server IP and your domain is nice.

  • Distributed@lemmy.ml
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    1 year ago

    Lol, decided to ask chatGPT this question, turned out pretty well:

    Alright, imagine you have a magic tunnel that can connect different places together. But this is not an ordinary tunnel that you can see or walk through. It’s a special tunnel that works with the internet!

    You know when you want to visit a website on your tablet or computer, you type its address in a web browser, right? Well, sometimes websites need extra protection to stay safe from bad things on the internet. That’s where Cloudflare Tunnel comes in!

    Cloudflare Tunnel is like a superhero that helps keep websites safe. It creates a secret passage between the website and Cloudflare’s special servers. When people try to visit the website, their requests go through this secret tunnel first.

    Now, imagine there are some bad guys who want to do bad things to the website. They try to find the website, but all they see is the secret tunnel. They can’t see the website or know where it is. It’s like the website is hiding!

    But good people, like you and me, can still find the website because we know the secret. We can use the magic tunnel to reach the website and see what’s there. Cloudflare Tunnel helps protect the website from the bad guys and lets the good people get through.

    So, Cloudflare Tunnel is like a special secret tunnel on the internet that keeps websites safe from bad guys and helps the good people find them.

  • scaredofplanes@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Essentially it IS a tunnel, just with cloudflare’s infrastructure in the middle handling auth and obscuring each end from the other.

    Auth is handled by cloudflare. That doesn’t mean cloudflare necessarily is the auth provider, though. Not likely in selfhosted, but one could set up some other auth provider, like azure, and cloudflare could give tunnel access to authorized users who actually provided credentials via azure.

    The service, port, whatever being accessed via the tunnel may also require auth, and cloudflare generally doesn’t handle that. For example, your cloudflare tunnel to your local sonarr instance requires auth at cloudflare first, to access the tunnel, then again at sonarr because your sonarr instance requires authentication.

    In a docker environment, you would either tunnel to the docker host or to individual Dockers. The latter is more sensible and generally a bit more secure, if only because least access = better. There’s probably some cloudflare tunnels docker out there that does half the setup for you, then you just stick it and the Dockers you want exposed through the tunnel all on the same docker network interface (which you create), but that’s just speculation.

    As far as setting tunnels up goes, the docs are really good at the step by step. Easiest way to learn it is to set up a VM similar to what you want and bang away at the steps until it does what you want. Some things are easy, like RDP. Other things are trickier.

    The basics of setup are that you use the cloudflared application at both ends: one server-side to expose what you want and one client-side to access the tunnel via cloudflare.

    Tailscale is the same kinda thing. I think it is way easier for a lot of people. There’s a lot less setup involved. Just install the apps and make a few choices.

    For personal use, I use wireguard to access my home server. Professionally I use cloudflare tunnels for a couple of things, but mostly an enterprise vpn.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Thank you for the detailed explanation. I am running Tailscale as a temporary solution to access some services, but I dislike that you have to set firewall rules basically twice (once in your local network and once in Tailscale). I suppose it would be similar for CF?

      • scaredofplanes@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Yeah, any solution is going to require at least egress rules for its traffic. Tailscale is a bit different since part of what it’s able to do is provide access to your LAN, if desired. Cloudflare just needs two ports, but it’s only providing a tunnel from the host.

  • CodaBool@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 year ago

    I used one to reach my qbittorrent selfhost. I found a cool docker image. It bundles a openVPN connection with qbittorrent so that I don’t need my home server to be on a VPN at all times. As well as ensures traffic always goes through VPN. I was running into an issue where I could not reach from my home network. But when I used a cloudflare tunnel it somehow worked. This was all until I realized there was an environment variable of LAN I needed to set which allowed connections from my home network 😮‍💨

    I would definitely recommend this setup for any torrenting. I’ve been using it for years and have verified that it always using the openVPN for traffic.

    EDIT: just realized the guy deleted the docker image for that based on a false positive. I reuploaded their same image to my docker account. Still works fine so, not sure why they took such a drastic measure.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 year ago

      What I’m doing is using a dedicated VPN Gateway container. The instances running delicate services have a static default route to the GW-container.

      This is an extra step, but allows me add easily route other services or clients or even whole networks through my VPN without additional setup or specialized containers bundling both.

      Wanna use it on the phone? Change the gateway address. Wanna use it from my Linux machine? Add a static default route. Etc…

  • lchapman@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    1 year ago

    Here’s how I do it: https://blog.lchapman.dev/self-hosting-foundations/

    Note: blog isn’t monetised, I just write things up to make them easier to share with people.

    Basically, I use a cloud VM as a gateway and reverse proxy to my services which are accessible via VPN. It’s not free, but it’s pretty cheap.

    I have a friend who is using Cloudflare for this. He has a domain and he can access his services at domain.tld:port. Not bad, and it’s free. He could have his tunnel pointed at Caddy like I do and use subdomains, but he hasn’t got that far yet.

    I prefer my method but both seem to get the basic functionality working.

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      Thanks for the write up! I’ll definately check out your blog as well. A cloud gateway is something I’ve considered as well (especially when the costs are around $5 monthly). How do you handle authentication?

      • lchapman@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Currently I don’t have an auth service sitting in front of my other services, it’s just whatever auth is built into each app and saved passwords.

        That said, I’ve deployed Authentik at a workplace and really enjoyed working with it, using it for SSO for a variety of services. I’ll implement it on my own platform soon.

  • JonDotG@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    I would also like to know this. Everyone talks about it but I have no idea how it’s different than anything I’m doing now. Is it like Tailscale?

    • operator@kbin.socialOP
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      One of the mysteries I am facing ^^ selfhost headscale? Tailscale? VPN? CF?

      Too many options :D

      • Distributed@lemmy.ml
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        Personally, I just wireguard in to my local net. No need to have CF snooping where they don’t need to.

        It all depends on your use cases and what you (or your users) need to access.

  • thatguy@lemmy.itsallbadsyntax.com
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    I use a VPS, not Cloudflair, but it’s the exact same concept.

    CF will have an exposed IP that you point your domains A record to. On your CF instance, you would then tunnel (I’m guessing they offer wireguard) into your home network, just like you are currently doing from your personal device.

    A big difference here is you will put a reverse proxy on CF that will authenticate SSL with users. The proxy then will pass unencrypted http down the tunnel for your web services to respond to.

    A couple days ago, someone asked (I think on this instance), “can you protect yourself from your VPS?”, which I think would be your next question.

    <Opinion>I pay for a VPS, because if it’s free, you or your data is some how the product. </Opinion>