ポート3306をインターネットに公開するDockerコンテナがあります。特定のパブリックIPアドレスへのアクセスを制限したいのですが。例として、1.2.3.4を使用してみましょう。
追加の条件として、Dockerデーモンの再起動とサーバーの再起動後もルールを存続させたいと思います。これにより、iptables-persistent
(iptables-save
/iptables-restore
)を使用して、dockerd
起動による干渉を受けずに、サーバーの再起動時にルールを復元できます。
私は以下を試しました:
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はチェーンの先頭に追加のルールを挿入し、カスタムルールは無視されます。
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
が再起動されるまで機能します。再起動時にdockerd
がDOCKER
チェーンをクリアし、すべてのカスタムルールがなくなったようです。
--iptables=false
を使用します。これは原則として機能しますが、このソリューションは標準のDocker転送機能を破り、転送ルールを手動で設定する必要があります。
これを行う適切な方法がない場合、私は驚きます。何か案は?
PS:私はいくつかの読書をしましたが、役に立ちませんでした(例 iptablesを使用して外部接続をdockerコンテナに制限するための手順? 、 Docker-外部からアクセス可能な公開ポート-iptablesルールは無視されます 、しかし、これらの質問は再起動の問題を扱っていないようです。)
dockersdは次のオプションで実行できます:
--iptables = false
手動で実行せずにサービスとして使用する場合は、構成ファイルに次の行を追加または変更するだけで十分です/ etc/docker/daemon.json:
「iptables」:false、
より詳細なドキュメントを見つけることができます ここ