보통 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 을 사용한다면 이것만 가지고는 해결이 되지 않는다고 하네요. 이런 경우 아래 링크를 확인해보시는게 좋습니다.
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.