Docker 컨테이너, 방화벽 없이 데이터베이스를 노출하면?

by DD
2개월 전
조회수 16

개인이 운영하는 PostgreSQL 데이터베이스가 무단 접근(Unauthorized Access)으로 인해 데이터 유실 및 변조 피해를 입음

Docker 컨테이너의 기본 포트 설정(Default Port Configuration)과 UFW 방화벽 미설정으로 인해 데이터베이스 포트(Database Port)가 외부로 노출됨

Podman은 Docker와 달리 호스트 방화벽 설정을 변경하지 않지만, `--publish` 옵션 사용 시 방화벽 설정 우회(Firewall Bypass) 가능성이 존재함

커뮤니티에서는 Docker 컨테이너의 포트 설정 시 127.0.0.1(Localhost)을 명시하고, UFW 방화벽을 설치하여 불필요한 포트 차단(Port Blocking)을 권장함

Docker 컨테이너 포트 설정의 중요성

게시물 작성자는 Docker 컨테이너를 사용하면서, 포트 설정을 명시적으로 지정하지 않아 데이터베이스가 외부로 노출되는 문제를 겪었다. 특히, `docker-compose` 파일에서 포트를 `127.0.0.1:5432:5432`와 같이 로컬호스트(Localhost)로 설정하여 외부 접근을 차단하는 것이 중요하다고 강조한다. 이는 데이터 격리(Data Isolation)를 위한 기본적인 설정이며, 보안 사고를 예방하는 핵심적인 방법이다.

UFW 방화벽 설정 및 활용

게시물에서는 UFW(Uncomplicated Firewall)의 설치 및 설정을 통해 불필요한 포트를 차단하고, 필요한 포트만 열어두는 방법을 제시한다. UFW는 iptables를 간편하게 사용할 수 있도록 돕는 툴로, 포트 스캐닝(Port Scanning) 도구를 사용하여 열린 포트를 확인하고, 보안 설정을 점검하는 것이 중요하다. UFW를 통해 접근 제어(Access Control)를 강화하여 무단 접근을 방지할 수 있다.

Podman과 Docker의 방화벽 설정 차이점

댓글에서는 Podman이 Docker와 달리 호스트 방화벽 설정을 변경하지 않는다는 점을 언급하며, Podman 사용의 장점을 강조한다. 하지만, Podman의 `--publish` 옵션을 사용할 경우, firewalld 설정을 우회하여 보안 취약점이 발생할 수 있다는 점을 지적한다. 따라서, Podman 사용 시에도 정적 IP 할당(Static IP Assignment)StrictForwardPorts 설정을 통해 방화벽 설정을 관리해야 한다.

데이터베이스 보안을 위한 추가 조치

커뮤니티에서는 데이터베이스의 강력한 비밀번호 설정의 중요성을 강조하며, 데이터베이스가 외부로 노출되지 않더라도 강력한 인증(Strong Authentication) 설정을 통해 보안을 강화해야 한다고 조언한다. 또한, Docker 컨테이너 내부 네트워크를 활용하여 컨테이너 간의 통신을 설정하고, 불필요한 포트 노출을 최소화하는 방법을 제시한다. 이는 보안 사고(Security Incident) 발생 시 피해를 줄이는 데 기여한다.

My PostgreSQL database got nuked lol