Jestem nowy w dockerze, obecnie chcę skonfigurować dockera na vps, postępując zgodnie z tym samouczkiem [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/ ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/), więc mój plan instalacji będzie wyglądał następująco: vps ubuntu 22.04, wireguard dla vpn, ufw dla firewalla: nginx proxy manager (NPM) do obsługi certyfikatu http, https, ssl (odsłonięty port 81) portainer do zarządzania dokerami (odsłonięty port 9443) ghost, mój drugi kontener będzie korzystał z sieci dokerów i rozmawiał bezpośrednio z menedżerem proxy nginx, podobnie jak samouczek i odpowiednio mapowanie do subdomeny. Nie lubię ujawniać portu 81, 9443 publicznie, więc ustanawiam regułę ufw i zezwalam tylko na lokalne IP VPN, które mogą łączyć się z tym portem. mój problem polega na tym, że kontener dokera wydaje się ignorować regułę ufw i sprawia, że ​​port jest nadal dostępny z publicznym adresem IP. Próbowałem [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) i naprawiłem problem portainer i NPM .. ale duch i mój drugi kontener zawiodły aby połączyć się z menedżerem proxy nginx, jeśli w jakiś sposób skrzynka została ponownie uruchomiona lub kontener został ponownie uruchomiony. moja praca w tej chwili polega na odsłonięciu ducha, innego kontenera na port hosta, a następnie mapowaniu go na NPM według adresu IP. to działa, ale wydaje się błędne, ponieważ wraz ze wzrostem liczby kontenerów wzrośnie również zapotrzebowanie na port. Jakie jest na to czyste rozwiązanie? dzięki Docker wstawia swoją pierwszą regułę dość wcześnie w iptables, w nat PREROUTING. Możesz przeglądać zasady za pomocą: iptables -t nat -S ufw często umieszcza reguły w INPUT, które następuje zarówno po PREROUTING, jak i FORWARD! Istnieją jednak dwa miejsca w PREROUTING, które są przed nat! surowe i maglowane. Mangle i tak może zrobić większość rzeczy, które INPUT może zrobić, więc możesz powstrzymać pakiety przychodzące do interfejsu publicznego przed dotarciem do nat, nie mówiąc już o sieci dokera, ustanawiając reguły dla interfejsu pubowego, takie jak: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 9443 -j AKCEPTUJ iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 81 -j AKCEPTUJ # Więc nie zamykasz się na ssh: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j AKCEPTUJ Następnie upuść resztę tcp po zaakceptowaniu w interfejsie pubu (nie zapomnij o udp): iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP Dla odniesienia, podobnie jak w przypadku przewodników, równoważna reguła dla INPUT wyglądałaby następująco: iptables -A WEJŚCIE -i eth0 -p tcp --dport 22 -j AKCEPTUJ zakładając oczywiście, że nazwa twojego publicznego interfejsu to eth0. W razie potrzeby zmień to w regulaminie :) Alternatywą jest to, co zasugerował hypgn0sis, używając łańcucha DOCKER-USER. Jednak będzie to mniej wydajne, a pakiety nadal docierają do sieci (w tym akceptacje FORWARD). Również ufw i firewalld będą kolidować z twoimi regułami iptables, chyba że je wyłączysz lub odinstalujesz.