UFW mit Docker und NPM
Hallo community,
ich bin in meinem Homlab setup mittlerweile so gut wie durch....Eine Sache stört mich da allerdings noch.
Aktuell habe ich auf der OPNsense ein Netz für meinen Ubuntu Homeserver und meine NAS, sowie u.a. ein Netz für meine trusted devices. Entsprechend, kann ich also hier Zugriffe auf den homeserver blocken. Auf dem homeserver ist docker installiert, entsprechend werden alle genutzen Services per Container implementiert unter anderem auch Nginx Proxy Manager. Die Idee ist alles Services nur über 443 und Nginx verfügbar zu machen. Bis auf wenige Ausnahmen z.B.: unifi klappt das auch alles hervorragend selbst mit self-signed certs im NPM.
Nun habe ich allerdings mittels Wireguard erfolgreich ein VPN (point-to.site) erstellen können. Für das VPN gibt es entsprechend auf der OPNsense ein eigenens Netz. Auch hier gebe ich lediglich die einzelnen VPN devices auf den homeserver bzw. auf den NGinx 443 frei.
So weit so gut...
Was mir nun allerdings insb. im VPN Netz fehlt ist, dass ich nicht alle Container erreichbar haben möchte, vielleicht auch nicht alle aus meinem trusted Netz. Auf OPNsense Seite kann ich da ja nicht weiter "filtern" da ich nur den NGinx Port 443 habe und keine weiteren "echten Server" mit eigener IP.
Nun bin ich am überlegen, wie ich die UFW für diese Filterung einrichten kann.
Grundlegend scheint die UFW den traffic zu den Containern ja mal direkt zu ignorieren. Dennoch muss ich routed auf allow stellen "sonst hagelt es blocks" im Log aus dem dem Docker Netz (eigenes bridge, nicht das default ding). Ich habe mir eigentlich gedacht, dass ich lediglich die 443 auf dem Docker Netz freigeben müsste, die 443 direkt auf dem Server aber nicht?
Bisher habe ich folgende Regeln.
20.10 ist der Ubuntu server
30 trusted
br-.... das Docker Interface
172. Docker Netzwerk
Was ich nun eigentlich möchte ist, dass ich den Zugriff auf einzelne Container für eine bestimmte IP (die aus dem VPN Netz) blockieren kann. Geht das mit UFW? Ich müsste doch eigentlich drei Dinge tun:
1. Grundlegend alle Zugriffe auf die COntainer durch UWF blockieren.
2. Aus trusted Netz oder für eingie IPs daraus Zugriff auf Container Zugriff erlauben
3. Aus VPN Netz ebenfalls nur einigen IPs Zugriff auf einige Container geben
Bei 2 und 3 weiß ich aber nicht wie ich das mit dem Nginx machen soll. Der ist ja meine zentrale Steuerung auf die COntainer, Container haben auch keine Ports publiziert. ACLS vom NPM sind für mich aktuell keine Lösung da ich nicht immer eine zusätzliche Authentifizierung machen kann. GIbt es evtl. im Docker Networking noch was , glaube Namespaces mit den ich evtl. sowas wie "erlauber space" / "nur vpn space" oder sowas einrichten kann?
Hoffe man versteht was ich suche . Zusammengefasst eine Möglichkeit Zugriff auf einzelne Container aus unterschiedlichen Netzen zu erlauben oder blokcieren.
Danke für eure Hilfe.
ich bin in meinem Homlab setup mittlerweile so gut wie durch....Eine Sache stört mich da allerdings noch.
Aktuell habe ich auf der OPNsense ein Netz für meinen Ubuntu Homeserver und meine NAS, sowie u.a. ein Netz für meine trusted devices. Entsprechend, kann ich also hier Zugriffe auf den homeserver blocken. Auf dem homeserver ist docker installiert, entsprechend werden alle genutzen Services per Container implementiert unter anderem auch Nginx Proxy Manager. Die Idee ist alles Services nur über 443 und Nginx verfügbar zu machen. Bis auf wenige Ausnahmen z.B.: unifi klappt das auch alles hervorragend selbst mit self-signed certs im NPM.
Nun habe ich allerdings mittels Wireguard erfolgreich ein VPN (point-to.site) erstellen können. Für das VPN gibt es entsprechend auf der OPNsense ein eigenens Netz. Auch hier gebe ich lediglich die einzelnen VPN devices auf den homeserver bzw. auf den NGinx 443 frei.
So weit so gut...
Was mir nun allerdings insb. im VPN Netz fehlt ist, dass ich nicht alle Container erreichbar haben möchte, vielleicht auch nicht alle aus meinem trusted Netz. Auf OPNsense Seite kann ich da ja nicht weiter "filtern" da ich nur den NGinx Port 443 habe und keine weiteren "echten Server" mit eigener IP.
Nun bin ich am überlegen, wie ich die UFW für diese Filterung einrichten kann.
Grundlegend scheint die UFW den traffic zu den Containern ja mal direkt zu ignorieren. Dennoch muss ich routed auf allow stellen "sonst hagelt es blocks" im Log aus dem dem Docker Netz (eigenes bridge, nicht das default ding). Ich habe mir eigentlich gedacht, dass ich lediglich die 443 auf dem Docker Netz freigeben müsste, die 443 direkt auf dem Server aber nicht?
Bisher habe ich folgende Regeln.
To Action From
-- ------ ----
192.168.20.10 22/tcp ALLOW IN 192.168.30.0/24
443 on br-b6555848f913 ALLOW IN 172.168.10.0/24
192.168.20.10 443/tcp ALLOW FWD 172.168.10.0/24
20.10 ist der Ubuntu server
30 trusted
br-.... das Docker Interface
172. Docker Netzwerk
Was ich nun eigentlich möchte ist, dass ich den Zugriff auf einzelne Container für eine bestimmte IP (die aus dem VPN Netz) blockieren kann. Geht das mit UFW? Ich müsste doch eigentlich drei Dinge tun:
1. Grundlegend alle Zugriffe auf die COntainer durch UWF blockieren.
2. Aus trusted Netz oder für eingie IPs daraus Zugriff auf Container Zugriff erlauben
3. Aus VPN Netz ebenfalls nur einigen IPs Zugriff auf einige Container geben
Bei 2 und 3 weiß ich aber nicht wie ich das mit dem Nginx machen soll. Der ist ja meine zentrale Steuerung auf die COntainer, Container haben auch keine Ports publiziert. ACLS vom NPM sind für mich aktuell keine Lösung da ich nicht immer eine zusätzliche Authentifizierung machen kann. GIbt es evtl. im Docker Networking noch was , glaube Namespaces mit den ich evtl. sowas wie "erlauber space" / "nur vpn space" oder sowas einrichten kann?
Hoffe man versteht was ich suche . Zusammengefasst eine Möglichkeit Zugriff auf einzelne Container aus unterschiedlichen Netzen zu erlauben oder blokcieren.
Danke für eure Hilfe.
Please also mark the comments that contributed to the solution of the article
Content-Key: 3990265544
Url: https://administrator.de/contentid/3990265544
Printed on: April 19, 2024 at 02:04 o'clock
3 Comments
Latest comment
Nun bin ich am überlegen, wie ich die UFW für diese Filterung einrichten kann.
Nein per Default nicht, UFW ist ja nur ein Frontend für iptables, und das unterstütz Matches auf Basis des SNI oder von Hostnames im Zertifikat der https Verbindung erst mittels zusätzlichem Add-On Filterhttps://github.com/Lochnair/xt_tls
Alternativ setze gleich auf dem nginx entsprechende allow und deny Regeln für die Subnetze in den Virtual Hosts.
Bsp.
allow 192.168.1.0/24;
allow 10.1.1.0/24;
deny all;
That's it.
Cheers
certguy