Sunt nou cu docker, în prezent vreau să configurez docker pe vps urmând acest tutorial [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/ ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/) deci planul meu de configurare va fi astfel: vps ubuntu 22.04, wireguard pentru vpn, ufw pentru firewall: Managerul proxy nginx (NPM) pentru a gestiona certificatul http, https, ssl (portul expus 81) portainer pentru gestionarea docker (portul expus 9443) fantomă, celălalt container al meu va folosi rețeaua docker și va vorbi direct cu managerul proxy nginx, cum ar fi tutorialul și maparea la subdomeniu în consecință. Nu-mi place să expun public portul 81, 9443, așa că fac regula ufw și am permis doar ip vpn local care se poate conecta la acel port. problema mea este că containerul docker pare să ignore regula ufw și să facă portul încă accesibil cu ip public. Am încercat [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) și a rezolvat problema portainer și NPM.. dar fantoma și celălalt container au eșuat pentru a vă conecta cu managerul proxy nginx dacă cumva caseta a repornit sau containerul a repornit. munca mea în prezent este fantomă expusă, alt container la portul gazdă și apoi mapa-l la NPM prin adresa IP. funcționează, dar se simte greșit, deoarece pe măsură ce numărul de containere crește și nevoia de port va crește. Care este soluția curată pentru asta? Mulțumiri Docker își inserează prima regulă destul de devreme în iptables, la nat PREROUTING. Puteți vizualiza regulile cu: iptables -t nat -S ufw pune adesea reguli în INPUT care este atât după PREROUTING cât și FORWARD! Există două locuri în PREROUTING care sunt înainte de nat totuși! crudă și stricată. Mangle poate face oricum majoritatea lucrurilor pe care INPUT le poate face, astfel încât să puteți împiedica pachetele care intră în interfața publică să nu ajungă la rețeaua docker, cu atât mai puțin, creând reguli pentru interfața pub, cum ar fi: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j ACCEPT iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j ACCEPT # Ca să nu te blochezi din ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACCEPT Apoi aruncați restul tcp după ce acceptă pe interfața pub (nu uitați udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Pentru referință, ca în ghiduri, o regulă echivalentă pentru INPUT ar arăta astfel: iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT presupunând că numele interfeței publice este eth0, desigur. Schimbați-l în reguli dacă este necesar :) Alternativa este ceea ce a sugerat hypgn0sis prin utilizarea lanțului DOCKER-USER. Cu toate acestea, acest lucru va fi mai puțin eficient și pachetele ajung în continuare în rețea (inclusiv acceptările FORWARD). De asemenea, ufw și firewalld vor interfera cu regulile iptables, dacă nu le dezactivați sau dezinstalați.