방화벽에서 서버의 인바운드 포트만 열면 통신 되는 이유

클라이언트-서버 모델에서 통신이 가능하려면 서버는 서비스가 구축된 포트를 열어줘야 합니다. 반면 클라이언트는 특별히 방화벽 설정을 하지 않아도 됩니다.

방화벽 인바운드, 아웃바운드 규칙 차이

방화벽은 인바운드(inbound) 규칙과 아웃바운드(outbound) 규칙으로 나뉩니다.

 

인바운드는 내부로 들어오는(요청을 받는) 트래픽에 대한 허가 여부를 정하는 규칙입니다.

 

아웃바운드는 외부로 나가는(요청을 하는) 트래픽에 대한 규칙입니다. 윈도우 디펜더는 기본적으로 모든 아웃바운드 트래픽을 허용합니다.

 

단순하게 생각하면 인바운드는 들어오는 거고, 아웃바운드는 나가는 것입니다. 오해가 생길 수 있는 지점은 "요청 포트와 응답 포트가 같을 것"이라는 생각입니다.

클라이언트-서버 방화벽 오해 예시

예를 들어, 클라이언트에서 http://www.example.com:5000/service라는 url로 서버에 요청을 합니다. 서버는 5000 포트에서 서비스를 대기시켜 놓았기 때문에 페이지를 응답합니다.

 

이 경우 아래처럼 생각할지도 모릅니다.

  • 클라이언트의 아웃바운드 5000 포트와 서버의 인바운드 5000 포트가 모두 열려 있어야겠네?
  • 서버에서 5000 포트로 응답해줄테니, 클라이언트에서 인바운드 5000 포트를 열어줘야겠네?

 

그러나 이 생각은 오해입니다. 요청을 받는 쪽인 서버의 인바운드 규칙에만 5000 포트가 열려 있으면 통신이 됩니다. 

 

TCP 통신은 출발지 포트와 목적지 포트가 따로 존재합니다. 서버에 요청하는 포트는 목적지 포트인 5000입니다. 그러나 클라이언트에서 출발하는 포트는 5000이 아닌 임의의 값입니다. 서버에서 클라이언트에 응답을 해주는 포트 역시 임의의 값입니다.

 

컴퓨터의 포지션이 클라이언트든 서버든 관계 없이 인바운드 규칙은 서버로서의 요청을 제어한다고 이해하시면 될 거 같습니다. 사실 클라이언트 컴퓨터 따로 있고 서버 컴퓨터가 따로 있는 건 엄밀히 말하면 아니니까요.

예외 사례 : FTP

위에서 언급한 것과 다르게 클라이언트 측에서 방화벽 작업을 해줘야 하는 경우도 있습니다. ftp를 액티브 모드로 사용할 때 그렇습니다.

 

ftp 액티브 모드는 클라이언트가 21번 포트로 접속을 요청하면 서버가 20번 포트로 클라이언트에 다시 요청을 하는 특징이 있습니다. 역으로 서버가 클라이언트에 접속을 시도하는 것입니다. 그러니 클라이언트에서 인바운드 규칙에 20 포트를 열어줘야 합니다.

반응형

댓글

Designed by JB FACTORY