コンテナーのポート公開範囲が広い

公開ポートをサービスに必要なホストインターフェースに限定してください。

説明

7000:8000 のようにポートを指定すると、デフォルトではホストのすべてのネットワークインターフェースから接続できる場合があります。

開発用や内部専用のサービスでは、127.0.0.1 など必要なインターフェースだけに公開すると露出を減らせます。そうしないと、意図しない外部アクセス経路が残るおそれがあります。

想定される影響

  • 内部専用サービスが外部ネットワークに公開される可能性があります。
  • ポートスキャンや不正な接続試行が届きやすくなります。
  • サービスごとのネットワーク公開範囲を管理しにくくなります。

対処方法

  • ports にホスト IP を指定し、必要なインターフェースだけにバインドしてください。
  • 外部公開が不要なサービスは 127.0.0.1 などのローカルインターフェースに限定してください。
  • 公開サービスと内部サービスを Compose で分け、公開方針を明確にしてください。

例

実際のサービスがコンテナーのポート 8000 で待ち受ける必要があります。別ホストからの接続が必要なら、ループバックではなく承認済みインターフェースとファイアウォールルールを使ってください。

変更前

yaml
services:
  webapp:
    image: sample/webapp:latest
    ports:
      - "7000:8000"

変更後

yaml
services:
  webapp:
    image: sample/webapp:latest
    ports:
      - "127.0.0.1:7000:8000"

補足:

  • 変更前: すべてのホストインターフェースにバインドされ、想定より広く公開される場合があります。
  • 変更後: ホストのループバックアドレスにバインドし、この公開ポートを通じたリモートアクセスを制限します。アプリケーション認証やコンテナー間アクセスは別途管理してください。

参考資料