Sono nuovo con docker, attualmente voglio configurare docker su vps seguendo questo 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/) quindi il mio piano di installazione sarà così: vps ubuntu 22.04, wireguard per vpn, ufw per firewall: nginx proxy manager (NPM) per gestire http, https, certificato ssl (porta esposta 81) portainer per la gestione del docker (porta esposta 9443) fantasma, il mio altro contenitore utilizzerà la rete docker e parlerà direttamente con il gestore proxy nginx come tutorial e mappatura al sottodominio di conseguenza. Non mi piace esporre la porta 81, 9443 al pubblico, quindi stabilisco la regola ufw e consento solo IP VPN locale che può connettersi a quella porta. il mio problema è che il contenitore docker sembra ignorare la regola ufw e rendere la porta ancora accessibile con IP pubblico. Ho provato [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) e ha risolto il problema di portainer e NPM .. ma ghost e l'altro mio contenitore non sono riusciti per connettersi con il gestore proxy nginx se in qualche modo la casella è stata riavviata o il contenitore è stato riavviato. il mio lavoro in questo momento è esposto fantasma, altro contenitore per ospitare la porta e quindi mapparlo su NPM tramite indirizzo IP. funziona ma sembra sbagliato perché con l'aumentare del numero di container aumenterà anche il fabbisogno di porti. Qual è la soluzione pulita per questo? Grazie Docker inserisce la sua prima regola abbastanza presto in iptables, in nat PREROUTING. Puoi visualizzare le regole con: iptables -t nat -S ufw spesso mette le regole in INPUT che è dopo sia PREROUTING che FORWARD! Tuttavia, ci sono due posti in PREROUTING che sono prima di nat! crudo e straziato. Mangle può fare la maggior parte delle cose che INPUT può fare comunque, quindi potresti impedire ai pacchetti in arrivo sull'interfaccia pubblica di raggiungere nat e tanto meno la rete docker stabilendo regole per l'interfaccia pub come: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j ACCETTA iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j ACCEPT # Quindi non ti chiudi fuori da ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACCETTA Quindi rilascia il resto di tcp dopo aver accettato sull'interfaccia pub (non dimenticare udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Per riferimento come con le guide, una regola equivalente per INPUT sarebbe simile a: iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCETTA supponendo che il nome della tua interfaccia pubblica sia ovviamente eth0. Cambialo nelle regole se necessario :) L'alternativa è quella suggerita da hypgn0sis utilizzando la catena DOCKER-USER. Tuttavia ciò sarà meno efficiente e i pacchetti raggiungeranno comunque la rete (incluse le accettazioni FORWARD). Anche ufw e firewalld interferiranno con le tue regole iptables a meno che tu non li disabiliti o li disinstalli.