web-dev-qa-db-ja.com

Docker:特定のIPアドレスへのアクセスを制限する正しい方法

ポート3306をインターネットに公開するDockerコンテナがあります。特定のパブリックIPアドレスへのアクセスを制限したいのですが。例として、1.2.3.4を使用してみましょう。

追加の条件として、Dockerデーモンの再起動とサーバーの再起動後もルールを存続させたいと思います。これにより、iptables-persistentiptables-save/iptables-restore)を使用して、dockerd起動による干渉を受けずに、サーバーの再起動時にルールを復元できます。

私は以下を試しました:

  1. FORWARDチェーンの変更:

    iptables -I FORWARD -p tcp --dport 3306 -j REJECT
    iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
    

    これは、Dockerデーモンの起動後に実行すると機能します。デーモンを再起動すると、Dockerはチェーンの先頭に追加のルールを挿入し、カスタムルールは無視されます。

  2. DOCKERチェーンの変更:

    iptables -N DOCKER # if chain does not yet exist
    iptables -I DOCKER -p tcp --dport 3306 -j REJECT
    iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
    

    これは、dockerdが再起動されるまで機能します。再起動時にdockerdDOCKERチェーンをクリアし、すべてのカスタムルールがなくなったようです。

  3. --iptables=falseを使用します。これは原則として機能しますが、このソリューションは標準のDocker転送機能を破り、転送​​ルールを手動で設定する必要があります。

これを行う適切な方法がない場合、私は驚きます。何か案は?

PS:私はいくつかの読書をしましたが、役に立ちませんでした(例 iptablesを使用して外部接続をdockerコンテナに制限するための手順?Docker-外部からアクセス可能な公開ポート-iptablesルールは無視されます 、しかし、これらの質問は再起動の問題を扱っていないようです。)

7
Peter Thomassen

dockersdは次のオプションで実行できます:

--iptables = false

手動で実行せずにサービスとして使用する場合は、構成ファイルに次の行を追加または変更するだけで十分です/ etc/docker/daemon.json

「iptables」:false、

より詳細なドキュメントを見つけることができます ここ

1
SteDf