Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

DS's TechBlog

[Docker] Docker + ufw 적용 안되는 문제 본문

Tools

[Docker] Docker + ufw 적용 안되는 문제

dsjo 2025. 1. 12. 15:14

Docker를 사용했을 때, Ubunt에서 ufw를 이용하여 특정 포트로의 접속을 막지 못하는 문제가 발생하였습니다. 이에 대한 해결방법을 공유하고자 글을 작성하였습니다.

문제 상황

클라이언트가 도메인을 입력했을 때, http와 https의 기본 포트인 80, 443을 통하여 API 서버를 접근할 수 있도록 구성했습니다. 하지만, "서. 버. 주. 소:8000"로 직접 접근이 되는 문제가 발생했습니다. 현재 Nginx를 이용하여 https를 구성하고 있는데, 이렇게 되면 http로 서버로의 접근이 가능하므로 보안 문제가 발생할 수 있습니다.

 

ufw로 해결?

Linuxufw로 특정 포트로의 접근을 막으려 했습니다.

sudo ufw deny 8000
sudo ufw deny 8000/tcp
sudo ufw status verbose

위와 같이 설정함으로써 접근이 차단되기를 기대했습니다.

하지만, 8000번 포트로의 접근이 여전히 가능했습니다!

ufw로 8000번 포트를 차단했다고 생각했는데, 이게 어떻게 된 일 일까요?

 

docker docs

When you publish a container's ports using Docker, traffic to and from that container gets diverted before it goes through the ufw firewall settings. Docker routes container traffic in the nat table, which means that packets are diverted before it reaches the INPUT and OUTPUT chains that ufw uses. Packets are routed before the firewall rules can be applied, effectively ignoring your firewall configuration.

(출처: https://docs.docker.com/engine/network/packet-filtering-firewalls/)

Docker의 공식문서에서는 위와 같이 안내하고 있습니다.

Docker를 사용하여 컨테이너의 포트를 게시하면 해당 컨테이너와의 트래픽이 ufw 방화벽 설정을 거치기 전에 전환된다고 합니다. 이를 해결하기 위해 많은 블로그에서 루프백 주소를 활용하거나 iptables의 추가 규칙을 적용하는 방법을 소개하고 있습니다.

 

해결 방법

기본적인 외부 접근 차단을 위해서 공유기의 포트 포워드 설정을 삭제하여 문제를 해결했습니다.

  1. 192.168.0.1 접속
  2. 고급 설정 -> NAT/라우터 관리 -> 포트 포워드 설정
  3. 해당 포트의 포트 포워딩 설정 삭제

위와 같이 포트 포워딩 설정을 삭제하면, 해당 포트로의 외부 접근을 차단할 수 있습니다.

만약 여기에 더해서, 내부 네트워크 내에서의 접근 제어까지 관리하고 싶다면 iptables를 사용해야 합니다.

 

이번 글에서는 Docker를 사용할 때 ufw가 특정 포트를 차단하지 못하는 문제에 대해 살펴보았습니다. Docker의 네트워킹 구조가 ufw의 방화벽 설정을 우회한다는 점을 이해하고, 공유기에서 포트 포워딩 설정을 삭제하여 외부 접근을 차단하는 방법에 대해서 알아보았습니다. 읽어주셔서 감사합니다.