コンテナーの SSH ポート宣言の確認

必要なサービスポートだけを宣言し、実際のポート公開と SSH アクセスは別途制限してください。

説明

Dockerfile の EXPOSE 22 は、イメージがそのポートを使うことを示すメタデータです。SSH サーバーの起動やホスト側のポート公開は行いません。ただし、-P などの自動公開機能は EXPOSE の情報を使用できます。

SSH サービスが実際に動作し外部から到達できる場合は、認証とアクセス範囲を確認してください。EXPOSE を削除しても、明示的なポートマッピングや他のネットワーク経路は遮断されません。

想定される影響

  • 不要なポート宣言と自動公開が組み合わさると、意図しないアクセス経路ができる場合があります。
  • 到達可能な SSH サービスの認証やソフトウェアに弱点があると、コンテナーが侵害されるおそれがあります。

対処方法

  • 不要な EXPOSE 22 を削除し、稼働サービス、実際のポートマッピング、ファイアウォールを併せて確認してください。
  • 管理にはアクセス制御されたコマンド実行・ログ機能を検討してください。SSH が必要な場合は、信頼できる管理経路と強固な認証に限定してください。

例

ポート宣言だけを比較します。EXPOSE 22 を追加しても、Nginx イメージに SSH サーバーが作られるわけではありません。

変更前

dockerfile
FROM nginx:1.27-alpine

EXPOSE 80 22
CMD ["nginx", "-g", "daemon off;"]

変更後

dockerfile
FROM nginx:1.27-alpine

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

補足:

  • 変更前: 80 と 22 を宣言します。実際の公開とサービスの稼働は別の設定によります。
  • 変更後: 22 の宣言を削除します。明示的なポート公開やネットワークアクセスを遮断する設定ではありません。

参考資料