docker 가 우분투 ufw 같이 사용시 방화벽룰 무시하는 문제 해결하기

보통 docker 로 띄워서 서버내에서만 로컬서비스를 하고 싶은 경우가 있습니다. 일반적으로 서버는 방화벽을 켜서 필요한 포트만 열어두고 사용하기때문에 크게 문제 될 게 없습니다.

그래서 별 생각없이 docker 로 내부서비스용 데몬을 띄웠습니다. ufw 나 iptables 는 따로 손대지 않았다면 외부에서는 접속했을 때 무응답으로 Connection time out 이 나야 정상입니다.

하지만 이상하게 접속이 되더군요.

nc (넷캣: netcat) 명령어를 사용해 포트를 검사해 봅니다. nmap 을 사용하려니 맥북에는 기본으로 들어있지 않더라고요. nc 는 다행히 기본으로 탑재되어 있습니다.

> nc -z 서버아이피주소 포트번호
Connection to 서버아이피주소 port 포트번호 [...] succeeded!

이런식으로 성공 메시지가 나오면 포트가 열려 있는 것입니다. ㅡ.ㅡ;; ufw 설정에 허용한 사실이 없는 포트인데.. 이게 뭔일이래..

구글링으로 검색해본 결과 docker 가 직접 방화벽을 제어해서 ufw 룰을 무시하고 포트가 열려버립니다.

이를 방지하기 위해서는 아래와 같이 docker 설정파일에 iptables 옵션을 false 로 변경하면 됩니다. 우분투 18.04 기준 /etc/docker/damon.json 파일입니다.

{
"iptables": false
}

보통 다른 옵션이 있을 수 있습니다. 기존 옵션을 그대로 두고 , “itables”: false 만 추가로 json 포맷 형식에 맞게 입력하면 됩니다.

이렇게 수정하고 도커 서버스를 재시작하면 적용됩니다.

# systemctl restart docker

이제 nc 로 포트검사를 해보면 계속 무응답으로 멈춰있어 포트가 열려있지 않음을 확인할 수 있습니다.

만약 docker swarm 을 사용한다면 이것만 가지고는 해결이 되지 않는다고 하네요. 이런 경우 아래 링크를 확인해보시는게 좋습니다.

참고 : https://blog.kjwon15.net/2018/03/09/docker-ufw/