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.
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 workThis 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.