Sou novo no docker, atualmente quero configurar o docker no vps seguindo este 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/) então meu plano de configuração será assim: vps ubuntu 22.04, wireguard para vpn, ufw para firewall: gerenciador de proxy nginx (NPM) para lidar com http, https, certificado SSL (porta exposta 81) portainer para gerenciamento do docker (porta exposta 9443) fantasma, meu outro contêiner usará a rede docker e conversará diretamente com o gerenciador de proxy nginx como tutorial e mapeará para o subdomínio de acordo. Não gosto de expor a porta 81, 9443 ao público, então faço a regra ufw e permito apenas o ip vpn local que pode se conectar a essa porta. meu problema é que o contêiner docker parece ignorar a regra ufw e tornar a porta ainda acessível com ip público. Eu tentei [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) e corrige o problema do portainer e do NPM .. mas o fantasma e meu outro contêiner falharam para conectar-se ao gerenciador de proxy nginx se, de alguma forma, a caixa for reiniciada ou o contêiner for reiniciado. meu trabalho agora é expor o fantasma, outro contêiner para hospedar a porta e, em seguida, mapeá-lo para o NPM pelo endereço IP. funciona, mas parece errado porque, à medida que o número de contêineres aumenta, as necessidades de porto também aumentam. Qual é a solução limpa para isso? obrigado O Docker insere sua primeira regra bem cedo no iptables, em nat PREROUTING. Você pode visualizar as regras com: iptables -t nat -S O ufw geralmente coloca regras em INPUT, que está após PREROUTING e FORWARD! No entanto, existem dois lugares em PREROUTING que estão antes de nat! cru e mangle. Mangle pode fazer a maioria das coisas que o INPUT pode fazer de qualquer maneira, então você pode impedir que os pacotes que chegam à interface pública cheguem ao nat e muito menos à rede do docker, criando regras para a interface do pub, como: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j ACEITAR iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j ACEITAR # Para você não se trancar fora do ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACEITAR Em seguida, solte o restante do tcp após aceitar na interface do pub (não se esqueça do udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Para referência como com guias, uma regra equivalente para INPUT seria semelhante a: iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACEITAR supondo que o nome da sua interface pública seja eth0, é claro. Altere nas regras se necessário :) A alternativa é o que hypgn0sis sugeriu usando a cadeia DOCKER-USER. No entanto, isso será menos eficiente e os pacotes ainda chegarão à rede (incluindo as aceitações FORWARD). Além disso, o ufw e o firewalld interferirão nas regras do iptables, a menos que você os desative ou desinstale.