In my home network, I’m currently hosting a public facing service and a number of private services (on their own subdomain resolved on my local DNS), all behind a reverse proxy acting as a “bouncer” that serves the public service on a subdomain on a port forward.

I am in the process of moving the network behind a hardware firewall and separating the network out and would like to move the reverse proxy into its own VLAN (DMZ). My initial plan was to host reverse proxy + authentication service in a VM in the DMZ, with firewall allow rules only port 80 to the services on my LAN and everything else blocked.

On closer look, this now seems like a single point of failure that could expose private services if something goes wrong with the reverse proxy. Alternatively, I could have a reverse proxy in the DMZ only for the public service and another reverse proxy on the LAN for internal services.

What is everyone doing in this situation? What are best practices? Thanks a bunch, as always!

  • @[email protected]OP
    link
    fedilink
    English
    3
    edit-2
    7 months ago

    This is exactly the type of answer I was looking for. Thanks a bunch.

    So but in that way, having a proxy on the LAN that knows about internal services, and another proxy that is exposed publicly but is only aware of public services does help by reducing firewall rule complexity. Would you say that statement is correct?

    • lemmyvore
      link
      fedilink
      English
      37 months ago

      Oh yes, if they’re completely separate and the internal proxy can’t be reached from port forward that’s fine.

      I was stuck thinking about two chained proxies for some reason.

      • @[email protected]OP
        link
        fedilink
        English
        27 months ago

        I never specified, I think, and probably wasn’t too clear on it myself. Thanks for your insights, I’ll try to take them to my configuration now.

    • @markstos
      link
      English
      27 months ago

      The comment above is accurate how domain names can be passed to Nginx that would resolve to private IP addresses. But that doesn’t mean they need to exposed. Nginx has a listen directive that specifies what IPs are listened on. So If your Reserve Proxy has both a public IP and private IP. then the private services can have a a listen directive like this:

      server {
        # Whatever your proxy's private IP is
        listen 10.0.0.1;
        server_name my-private-service;
      }
      

      No matter what hostname is passed in, Nginx would only reply to requests that can reach the Nginx host at it’s private IP address.