UFW + DOCKER 제대로 방화벽에 적용되지 않는 문제

CloudJun·2022년 2월 11일
0

나는백엔드

목록 보기
4/5

개요

Docker는 Iptables의 UFW INPUT 체인의 정책을 거치지 않고 그대로 Forward 체인을 거치기 때문에 Input 체인에 정책을 걸어도 정상적으로 방화벽을 작동시키기 어렵다.
국내에서는 제대로 정리된 문서가 없었고 모두 UFW 쓴다하면 iptables을 바꿔버리라는 게시글이 많았는데 이러면 inputNetwork 막히는 문제가 있다. (나도 처음에는 그렇게 문서를 썼다) 또한 Iptables을 만지기 보다는 UFW를 그대로 쓰면서 Docker에 적용되는 방법을 원했다.

가장 쉬운 방법

외부 방화벽을 하나 설치해서 그걸로 포트를 관리한다

하지만 이걸 원한다면 이 게시글을 들어오지 않으셨을테니 아래를 잘 읽어주시면 해결 하실 수 있습니다.


해결 방법

여기 아래에 eth0 부분은 활성화된 기본 네트워크로 적용 시켜야하기 때문에

echo $(ip route get 8.8.8.8 | awk -- '{printf $5}')

여기에 나오는 기본값을 가져온다

/etc/ufw/after.rules

# Put Docker behind UFW
*filter
:DOCKER-USER - [0:0]
:ufw-user-input - [0:0]

-A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A DOCKER-USER -m conntrack --ctstate INVALID -j DROP
-A DOCKER-USER -i eth0 -j ufw-user-input
-A DOCKER-USER -i eth0 -j DROP
COMMIT

eth0 -> 아까전 나온 기본값 네트워크로 네이밍 변경
이거 적용시키고 ufw , docker 순차 재시작을 진행한다

주의할점

docker 내부 포트를 UFW로 지정해줘야한다.

CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS        PORTS                                       NAMES
38419223aa3a   testimage         "docker-entrypoint.s…"   8 seconds ago   Up 1 second   0.0.0.0:4001->3000/tcp, :::4001->3000/tcp   server
131bd8bc5c59   testimage          "docker-entrypoint.s…"   2 hours ago     Up 2 hours    0.0.0.0:4002->3000/tcp, :::4002->3000/tcp   testimage
024f8a896fd1   neo/testimage:0.28.1   "docker-entrypoint.s…"   5 days ago      Up 2 hours    0.0.0.0:5101->5101/tcp, :::5101->5101/tcp   testimage.28.1
7d2e5d0e0bb2   neo/testimage:0.28.1    "docker-entrypoint.s…"   5 days ago      Up 2 hours    0.0.0.0:5102->5102/tcp, :::5102->5102/tcp   testimage.28.1

이런 서비스가 있다면 UFW 포트는 3000번을 열어줘야 웹에서는 4001 , 4002 포트로 접속이 가능하다.

추가 참조

https://stackoverflow.com/questions/30383845/what-is-the-best-practice-of-docker-ufw-under-ubuntu

profile
짧고 굵게 살아가는 백엔드 개발자

0개의 댓글