netzer2021
Goto Top

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 face-smile . Zusammengefasst eine Möglichkeit Zugriff auf einzelne Container aus unterschiedlichen Netzen zu erlauben oder blokcieren.

Danke für eure Hilfe.

Content-Key: 3990265544

Url: https://administrator.de/contentid/3990265544

Printed on: February 2, 2023 at 00:02 o'clock

Mitglied: 3803037559
Solution 3803037559 Sep 20, 2022 updated at 06:31:06 (UTC)
Goto Top
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 Filter
https://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.
http://nginx.org/en/docs/http/ngx_http_access_module.html

That's it.

Cheers
certguy
Member: Dani
Dani Sep 20, 2022 at 17:16:51 (UTC)
Goto Top
Moin,
hilft dir UFW Docker vllt. weiter?!


Gruß,
Dani
Member: netzer2021
netzer2021 Sep 22, 2022 updated at 14:40:41 (UTC)
Goto Top
Danke für den Hinweise mit den ACLs auf IP basis hat es funktioniert. Allerdings habe ich mir dabei scheinbar irgendwie den NPM zerschosse und es ging gar nichts mehr, aber gleich mal restore getestet.

Lass es jetzt erstmal so wie ich eingestellt habe. Ich habe keine Ports der Container public, sondern nur die vom NPM. Läuft dieser nicht erreiche ich auch keinen Container mehr. Zeigt mir ja, dass der WEg über den NPM funktioniert. Zusätzlich lasse ich durch die OPNsense eh nur ausgewählte Geräte auf die Container Services. Die Services sind dann auch alle selber eben durch die Authentifizierung vom Service versehen, dass passt denke ich schon. Da aktuell auch nur mein iOS device VPN nutzt, reicht das.

Deg UFW Docker link hatte ich bereits mal geprüft und probiert, brachte aber keinen Erfolg. Evtl. habe ich aber auch etwas falsch gemacht oder nicht richtig nachgedacht und Ergebnise falsch interpretiert.