Saya baru dengan docker, pada masa ini mahu menyediakan docker pada vps dengan mengikuti tutorial ini [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/ ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/) jadi pelan persediaan saya akan menjadi seperti ini : vps ubuntu 22.04, wireguard untuk vpn, ufw untuk firewall : pengurus proksi nginx (NPM) untuk mengendalikan sijil http, https, ssl (port terdedah 81) portaier untuk pengurusan docker (port 9443 terdedah) hantu, bekas saya yang lain akan menggunakan rangkaian docker dan bercakap terus dengan pengurus proksi nginx seperti tutorial dan pemetaan ke subdomain dengan sewajarnya. Saya tidak suka mendedahkan port 81, 9443 kepada umum jadi saya membuat peraturan ufw dan membenarkan hanya ip vpn tempatan yang boleh menyambung ke port itu. masalah saya ialah bekas docker nampaknya mengabaikan peraturan ufw dan menjadikan port masih boleh diakses dengan ip awam. Saya telah mencuba [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) dan ia membetulkan masalah portainer dan NPM.. tetapi hantu, dan bekas saya yang lain gagal untuk berhubung dengan pengurus proksi nginx jika entah bagaimana kotak dimulakan semula atau bekas dimulakan semula. kerja saya sekarang ialah hantu terdedah, bekas lain untuk menjadi hos port dan kemudian memetakannya ke NPM melalui alamat ip. ia berfungsi tetapi terasa salah kerana apabila bilangan kontena bertambah, keperluan untuk pelabuhan juga akan meningkat. Apakah penyelesaian bersih untuk ini? terima kasih Docker memasukkan peraturan pertamanya agak awal dalam iptables, di nat PREROUTING. Anda boleh melihat peraturan dengan: iptables -t nat -S ufw sering meletakkan peraturan dalam INPUT iaitu selepas PREROUTING dan FORWARD! Terdapat dua tempat dalam PREROUTING yang sebelum nat bagaimanapun! mentah dan mangle. Mangle boleh melakukan kebanyakan perkara yang boleh dilakukan oleh INPUT, jadi anda boleh memastikan paket masuk ke antara muka awam daripada mencapai nat apatah lagi rangkaian docker sama sekali dengan membuat peraturan untuk antara muka pub seperti: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j TERIMA iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j TERIMA # Jadi anda tidak mengunci diri anda daripada ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j TERIMA Kemudian lepaskan baki tcp selepas anda menerima pada antara muka pub (jangan lupa udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Untuk rujukan seperti dengan panduan, peraturan yang setara untuk INPUT akan kelihatan seperti: iptables -A INPUT -i eth0 -p tcp --dport 22 -j TERIMA dengan mengandaikan nama antara muka awam anda ialah eth0 sudah tentu. Tukar dalam peraturan jika perlu :) Alternatifnya ialah apa yang dicadangkan oleh hypgn0sis dengan menggunakan rantai DOCKER-USER. Walau bagaimanapun itu akan menjadi kurang cekap dan paket masih mencapai rangkaian (termasuk FORWARD menerima). Juga ufw dan firewalld akan mengganggu peraturan iptables anda melainkan anda melumpuhkan atau menyahpasangnya.