[docker] Docker와 Iptables

업데이트:     Updated:

카테고리:

태그:

🎯도커와 iptables

Linux에서 Docker는 iptables 규칙을 조작하여 네트워크 격리를 제공합니다.

Docker 규칙

Docker는 DOCKER-USER, DOCKER 라는 두 개의 사용자 지정 iptables 체인을 설치하고 Docker 호스트에 들어오는 모든 패킷은 항상 이 두 체인에서 먼저 확인되도록 합니다.

Docker의 모든 iptables 규칙은 DOCKER 체인에 추가됩니다. DOCKER 체인의 규칙보다 먼저 로드되는 규칙을 추가해야 하는 경우 DOCKER-USER 체인에 규칙을 추가합니다. 이 규칙은 Docker가 자동으로 생성하는 규칙보다 먼저 적용됩니다.

수동으로 또는 다른 iptables 기반의 방화벽에 의해 FORWARD 체인에 추가된 규칙은 Docker에서 추가한 두 가지 체인 이후에 평가됩니다. 만약 Docker를 통해 포트가 노출될 때 이러한 규칙이 먼저 적용되기를 원한다면 DOCKER-USER 체인에 규칙을 추가해야합니다.

Docker 호스트에 대한 연결 제한

기본적으로 모든 외부 소스 IP는 Docker 호스트에 연결할 수 있습니다. 특정 IP 또는 네트워크만 컨테이너에 액세스하도록 허용하려면 filter 테이블의 DOKCER-USER 체인 맨 위에 DROP 규칙을 추가해야합니다. 예를 들어 다음 규칙은 192.168.1.1 IP를 제외한 모든 IP 주소의 외부 액세스를 제한합니다. (ext_if: 외부 인터페이스)

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

Docker 호스트를 라우터로 사용

Docker 호스트가 라우터 역할도 하는 경우 Docker가 기본적으로 변경한 규칙에 의해 더 이상 트래픽을 전달하지 않습니다.(Docker는 FORWARD 체인에 대한 기본 정책을 DROP으로 변경합니다.) 시스템이 라우터로 계속 작동하도록 하려면 DOCKER-USER 체인에 다음과 같이 명시적인 규칙을 추가해야합니다. (src_if: 소스 인터페이스, dst_if: 목적지 인터페이스)

$ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

📌출처

Docker Docs


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

docker 카테고리 내 다른 글 보러가기

댓글남기기