私は docker を初めて使用します。現在、このチュートリアル [https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/] に従って、vps で docker をセットアップしたいと考えています。 ](https://www.howtoforge.com/how-to-install-and-use-nginx-proxy-manager/) したがって、私のセットアップ計画は次のようになります。 vps ubuntu 22.04、vpn 用のワイヤーガード、ファイアウォール用の ufw : http、https、ssl 証明書を処理する nginx プロキシ マネージャー (NPM) (ポート 81 を公開) docker 管理用 porttainer (ポート 9443 を公開) ゴースト、私の他のコンテナはドッカーネットワークを使用し、チュートリアルのようにnginxプロキシマネージャーと直接話し、それに応じてサブドメインにマッピングします。 ポート 81、9443 を公開したくないので、ufw ルールを作成し、そのポートに接続できるローカル vpn ip のみを許可しました。 私の問題は、docker コンテナーが ufw ルールを無視し、パブリック IP で引き続きポートにアクセスできるようにすることです。 [https://github.com/chaifeng/ufw-docker](https://github.com/chaifeng/ufw-docker) を試してみたところ、ポーテナーと NPM の問題は修正されましたが、ゴーストが発生し、他のコンテナーが失敗しましたボックスが再起動したり、コンテナが再起動した場合に、nginx プロキシ マネージャーに接続します。 私の現在の回避策は、ゴースト、他のコンテナーをホストポートに公開し、それを IP アドレスで NPM にマップすることです。機能しますが、コンテナの数が増えるとポートの必要性も増えるため、気分が悪くなります。 これに対するクリーンな解決策は何ですか?ありがとう Docker は、最初のルールを iptables のかなり早い段階で、nat PREROUTING に挿入します。次の方法でルールを表示できます。 iptables -t nat -S ufw は、PREROUTING と FORWARD の両方の後にある INPUT にルールを入れることがよくあります。 ただし、PREROUTING には nat の前にある場所が 2 つあります。生とマングル。とにかく、Mangle は INPUT ができるほとんどのことを実行できるので、次のようなパブ インターフェイスのルールを作成することで、パブリック インターフェイスに着信するパケットが nat に到達しないようにすることができます。 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 # ssh からロックアウトされないようにするには: iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 22 -j ACCEPT 次に、pub インターフェイスで受け入れた後、残りの tcp をドロップします (udp を忘れないでください)。 iptables -t mangle -A PREROUTING -i eth0 -p tcp -j DROP ガイドと同様に参考として、INPUT の同等のルールは次のようになります。 iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT もちろん、パブリック インターフェイス名が eth0 であると仮定します。必要に応じてルールを変更してください:) 代替手段は、DOCKER-USER チェーンを使用して hypgn0sis が提案したものです。ただし、これは効率が悪く、パケットは引き続きネットワークに到達します (FORWARD 受け入れを含む)。また、ufw と firewalld は、無効にするかアンインストールしない限り、iptables ルールに干渉します。