docker-compose ネットワークと 1 つの外部サーバー内で iptables を開きます。

docker-compose ネットワークと 1 つの外部サーバー内で iptables を開きます。

私は、MySQL サーバーを含む docker compose を使用してシステムをデプロイしようとしています。サーバーは同じネットワーク内の docker コンテナー間で共有されます。

ネットワーク内の特定の外部サーバーから MySQL データベースにアクセスする必要があるため、Docker Compose ファイル内で MySQL ポート (3306) を公開しました。

しかし、セキュリティ上の懸念から、このポートにアクセスしようとする他の IP をブロックしたいと思います。

多くの iptables ルールを試しましたが、それらはすべて docker-compose 内のコンテナをブロックするか、他のサーバーがポートにアクセスすることを許可していました。

ps: MySQL サーバー内のユーザー権限をすべて変更しますが、最初に行うことはポートをブロックすることです。

答え1

DOCKER-USER テーブルで iptables エントリを設定できます。これは docker の外部で行われます。たとえば、10.0.0.0/24 以外のネットワークからポート 3306 への eth0 インターフェイスへのリクエストが心配な場合は、次のようにします。

iptables -I DOCKER-USER -i eth0 ! -s 10.0.0.0/24 -p tcp \
  -m conntrack --ctorigdstport 3306 -j DROP

conntrackNAT ルールとポート マッピングを処理するには、通常の TCP ポート ルールではなく、conn トラックの元の宛先ポートが必要であることに注意してください。

関連情報