2

Docker 컨테이너 간의 서비스 포트 관리를 단순화하기 위해 포함 된 HTTP 서비스가 HTTP의 기본 TCP 포트 80에서 해당 컨테이너의 IP 주소를 수신 할 수있게하고 싶습니다.컨테이너가 포트 80에서 수신 대기하는 부작용

1025 이하의 포트 번호를 듣는 것은 전통적으로 root과 같은 특별한 권한을 가진 사용자로 제한됩니다. 그 이유는 내가 이해하는 한 다중 사용자 시스템에서 비 특권 사용자가 전체 시스템에 대해 신뢰할 수있는 HTTP 서비스로 작동하는 것을 금지하기 위해서입니다.

최신 Linux 버전에서는 Linux 커널 기능 CAP_NET_BIND_SERVICE을 적용하여 특정 실행 파일을 허용 할 수도 있습니다. Docker 컨테이너에서이 작업을 수행하려면 Docker 클라이언트의 --add-cap 플래그 또는 Docker-Compose cap_add 섹션을 통해이 기능을 Docker 컨테이너 자체에 적용해야하는 것 같습니다.

리눅스 커널의 네트워크 네임 스페이스가 컨테이너 내의 프로세스 만 자신의 고유 한 고유 한 IP 주소로 바인드 할 수 있기 때문에 이론상이 포트 번호 제한의 이유는 더 이상 사용되지 않습니다.

여기에 대해 심각한 문제가있는 경우 제 질문이 생깁니다. 이게 아니면 내 방식으로는 보안 문제가되지 않을까? 아니면 이것에 관한 다른 문제가 있습니까?

답변

1

이렇게하는 과정에서 문제가 없습니다.

"뚜껑 추가"를 사용하여 보안 구멍을 노출시킬 수는 있지만 포트 80을 사용할 수있게하는 것은 문제가되지 않습니다. 이것은 소프트웨어가 청취하는 TCP/IP 포트 일 뿐이며 보안 측면에서 다른 임의의 포트 번호와 다르지 않습니다.

0

잠시 다른 포트에 바인딩하는 것이 좋습니다. 하나는 항상 컨테이너를 만들 때 다른 포트로 전달합니다. 보안 문제로 엉망이되고 컨테이너에 불필요한 권한을 남겨두면 특정 포트에 내부적으로 바인딩하는 것이 너무 어려워집니다.

+0

어떤 기준으로 권장합니까? 이것을 통해 열리는 공격 시나리오가 있습니까? – aef