Limiting NGINX Proxy Access on VLAN

root@lemmy.world to Selfhosted@lemmy.world – 9 points –

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.

7

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;

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 like so

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

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.

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