So, I have been playing with Nginx (and it’s pretty awesome).

My homelab has several VLANs, including a “management” VLAN where my networking equipment lives.

Mine (and my families) personal devices are mainly on our “LAN” VLAN, which can see everything by default, except only certain devices (my laptop and PC) are allowed to see the management network.

The problem I’ve run into, is that if I setup a proxy for, say my Pi Hole, then all devices on my LAN VLAN can access it, regardless of whether or not they are a part of my mgmt_approved alias (I guess this is a bit expected).

I am wondering what the best way to limit certain devices from accessing specific proxies may be. I see that you can limit them on the Nginx side like so , however I’d prefer to have access rules defined on my firewall (current rules for LAN VLAN).

It seems like once something is allowed to communicate with NGINX, it will be able to access whatever NGINX gives permissions to, and further firewall rules do not matter since traffic will then be going through the proxy.

  • Osayidan@social.vmdk.ca
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    1 year ago

    You’ll have to use nginx’s ACL feature. Like you’ve discovered once someone has access to the proxy itself, by its very nature it’s acting on behalf of the client making the request so firewall rules won’t help much there. You’d have to get into packet inspection, and deal with https man in the middle stuff and all that, likely not worth it.

    I’m not familiar with nginx proxy manager which you seem to be using but in the config files it’d look like this:

    nginx.conf

    location / {
    
        include /etc/nginx/acl_file_name.acl;
        deny all;
    
       # rest of location config
    
    }
    

    the deny all; at the end means everything that wasn’t listed in the ACL file is denied. You could alternatively put the deny all directly in the acl file at the end of the file.

    the acl file itself is just a list, i create it in a file for easy re-use, and made up the “.acl” extension because it makes sense.

    acl_file_name.acl

    allow 192.168.1.0/24;
    allow 192.168.2.101;
    
    • root@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      1 year ago

      Thanks for the reply! Yeah, I just tried the ACL in NGINX, and it seems to work fine. I can still ping the proxied services, but cannot connect to them. I guess I will maintain a seperate mgmt_allowed list there. Thanks again!

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

    This is an interesting problem and probably one I will run into when I eventually divide my LAN into multiple vlans.

    Unless traffic can be filtered based on hostname then the only solution I can think of is to run two instances of the proxy/ingress controller.

    • root@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Yeah, I think I will end up creating a new ACL on NGINX to only allow those mgmt_allowed IPs. I tested it, and it seems to work fine. Not ideal, as I’d like to manage everything from pfsense, but I guess it’s expected by the nature of proxies :P

  • Chungus@thechurchofmemes.com
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    If they are on the same l2 network then your options are basically either to use nginx ACLs or a local firewall on the nginx host since the traffic wont traverse the firewall.

    Something like iptables -I INPUT -s 1.2.3.0/24 -j DROP on the nginx host should work