컨테이너의 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 선언을 제거합니다. 명시적인 포트 공개나 네트워크 접근을 차단하는 설정은 아닙니다.

참조