Bago ako sa docker, kasalukuyang gustong mag-setup ng docker sa vps sa pamamagitan ng pagsunod sa tutorial na ito [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/ ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/) kaya magiging ganito ang setup plan ko : vps ubuntu 22.04, wireguard para sa vpn, ufw para sa firewall : nginx proxy manager (NPM) para pangasiwaan ang http, https, ssl certificate (exposed port 81) portainer para sa pamamahala ng docker (nakalantad na port 9443) multo, ang iba kong lalagyan ay gagamit ng docker network at direktang makipag-usap sa nginx proxy manager tulad ng tutorial at pagmamapa sa subdomain nang naaayon. Hindi ko gustong ilantad ang port 81, 9443 sa publiko kaya gumawa ako ng panuntunan sa ufw at pinapayagan lamang ang lokal na vpn ip na maaaring kumonekta sa port na iyon. ang problema ko ay ang docker container ay tila binabalewala ang ufw rule at ginagawang accessible pa rin ang port sa public ip. Sinubukan ko ang [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) at naayos nito ang portainer at problema sa NPM.. ngunit nabigo ang multo, at ang aking ibang lalagyan upang kumonekta sa nginx proxy manager kung sa anumang paraan ay nag-restart ang kahon o nag-restart ang lalagyan. ang aking trabaho sa paligid ngayon ay nakalantad na multo, ibang lalagyan upang mag-host ng port at pagkatapos ay imapa ito sa NPM sa pamamagitan ng ip address. gumagana ito ngunit mali ang pakiramdam dahil habang lumalaki ang bilang ng lalagyan ay tataas din ang mga pangangailangan para sa port. Ano ang malinis na solusyon para dito? salamat Ipinapasok ng Docker ang unang panuntunan nito nang medyo maaga sa mga iptable, sa nat PREROUTING. Maaari mong tingnan ang mga panuntunan gamit ang: iptables -t nat -S Ang ufw ay madalas na naglalagay ng mga panuntunan sa INPUT na pagkatapos ng parehong PREROUTING at FORWARD! Mayroong dalawang lugar sa PREROUTING na bago ang nat gayunpaman! hilaw at mangle. Magagawa ni Mangle ang karamihan sa mga bagay na magagawa pa rin ng INPUT, para mapanatili mo ang mga packet na papasok sa pampublikong interface mula sa pag-abot sa network ng docker sa pamamagitan ng paggawa ng mga panuntunan para sa interface ng pub tulad ng: 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 # Para hindi mo mai-lock ang iyong sarili sa ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACCEPT Pagkatapos ay i-drop ang natitirang bahagi ng tcp pagkatapos mong tanggapin sa interface ng pub (huwag kalimutan ang udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Para sa sanggunian tulad ng sa mga gabay, ang isang katumbas na panuntunan para sa INPUT ay magiging ganito: iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT sa pag-aakalang ang pangalan ng iyong pampublikong interface ay eth0 siyempre. Baguhin ito sa mga patakaran kung kailangan :) Ang kahalili ay ang iminungkahi ng hypgn0sis sa pamamagitan ng paggamit ng DOCKER-USER chain. Gayunpaman iyon ay hindi gaanong mahusay at ang mga packet ay umaabot pa rin sa network (kabilang ang FORWARD na tumatanggap). Makakagambala din ang ufw at firewalld sa iyong mga panuntunan sa iptables maliban kung hindi mo pinagana o i-uninstall ang mga ito.