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