Ik ben nieuw met docker, wil momenteel docker instellen op vps door deze tutorial te volgen [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/ ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/) dus mijn installatieplan zal er als volgt uitzien: vps ubuntu 22.04, wireguard voor vpn, ufw voor firewall: nginx proxy manager (NPM) voor het afhandelen van http, https, ssl-certificaat (blootgestelde poort 81) drager voor dockerbeheer (blootgestelde poort 9443) geest, mijn andere container zal het docker-netwerk gebruiken en rechtstreeks praten met de nginx-proxymanager, zoals een tutorial en dienovereenkomstig in kaart brengen naar het subdomein. Ik hou er niet van om poort 81, 9443 openbaar te maken, dus ik maak een ufw-regel en sta alleen lokale vpn ip toe die verbinding kan maken met die poort. mijn probleem is dat de docker-container de ufw-regel lijkt te negeren en de poort nog steeds toegankelijk maakt met een openbaar IP-adres. Ik heb geprobeerd [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) en het repareerde het probleem met portainer en NPM... maar ghost en mijn andere container faalden om verbinding te maken met nginx proxy manager als de box op de een of andere manier opnieuw is opgestart of de container opnieuw is opgestart. mijn werk op dit moment is blootgestelde geest, andere container naar hostpoort en vervolgens toewijzen aan NPM op ip-adres. het werkt maar voelt verkeerd, want naarmate het aantal containers groeit, zal de behoefte aan haven ook toenemen. Wat is hiervoor de schone oplossing? Met dank Docker voegt zijn eerste regel vrij vroeg in iptables in, bij nat PREROUTING. U kunt de regels bekijken met: iptables -t nat -S ufw plaatst vaak regels in INPUT die zowel achter PREROUTING als FORWARD staat! Er zijn echter twee plaatsen in PREROUTING die vóór nat zijn! rauw en mangel. Mangel kan de meeste dingen die INPUT sowieso kan doen, dus je kunt voorkomen dat pakketten die binnenkomen via de openbare interface nat worden, laat staan ​​het netwerk van docker, door regels te maken voor de pub-interface, zoals: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j ACCEPTEREN iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j ACCEPTEREN # Zodat je jezelf niet buitensluit van ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACCEPTEREN Laat vervolgens de rest van tcp vallen nadat je accepteert op de pub-interface (vergeet udp niet): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Ter referentie zoals bij gidsen zou een equivalente regel voor INPUT er als volgt uitzien: iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPTEREN ervan uitgaande dat de naam van uw openbare interface natuurlijk eth0 is. Verander het indien nodig in de regels :) Het alternatief is wat hypgn0sis suggereerde door de DOCKER-USER-keten te gebruiken. Dat zal echter minder efficiënt zijn en pakketten bereiken nog steeds het netwerk (inclusief FORWARD accepteert). Ook ufw en firewalld zullen uw iptables-regels verstoren, tenzij u ze uitschakelt of verwijdert.