FTP 서버를 구축하려고 보면 패시브에 대한 설정과 포트 옵션이 보입니다. 그리고 FTP 클라이언트를 사용하려고 보면 역시 패시브 모드라는 것이 있고 체크박스로 체크하게 되어있는데 그렇다면 FTP에서 액티브(Active) 모드와 패시브(Passive) 모드는 무엇이며 어떤 차이가 있는지 알아보겠습니다.

FTP 액티브(Active)모드

 

ftp_theory_diagram_active
이미지:넥스트라인

액티브 모드는 간략하게 위와 같은 다이어그램으로 나타낼수 있습니다. 다이어그램을 좀더 풀어보면

  1. 클라이언트가 FTP 프로그램으로 서버에 접속을 합니다. 이때 FTP 서버는 기본값인 21번 포트를 사용합니다.
  2. 클라이언트는 5151번 포트로 데이터를 받는다는 응답을 서버에게 보냅니다. 이때 FTP 서버에 접속하는 클라이언트의 포트는 5150 입니다.
  3. 서버는 5151번 포트로 데이터를 전송한다고 응답합니다.
  4. 클라이언트가 응답하고 데이터를 받습니다.

ftp_theory_active_firewall

서버와 클라이언트의 통신을 풀어 보면 중요한 점은  서버가 클라이언트의 해당 포트에 접속해 데이터를 보내준다는 것 입니다. 우리가 알고있는 상식과는 좀 다르죠. 클라이언트가 서버에 접속해서 사용하는데 서버가 클라이언트에 접속한다니.

이런 구조때문에 클라이언트에서는 방화벽에 해당 포트를 열어서 사용하거나 NAT 환경에 있는 네트워크라면 포트포워딩을 해줘야 하는 결과가 생깁니다.

그리고 클라이언트쪽에서 사용하는 포트를 별도로 설정할수 있다면 문제가 없지만 일반적으로 사용자들이 FTP를 사용하면서 클라이언트 단에서 사용할 포트를 지정해서 사용하지 않기 때문에 사용하는 포트 범위 또한 랜덤해서 초보자들이 직접 FTP 서버를 구축하고 클라이언트로 연결하려 했을때 문제점을 눈치채기 어렵다는 점입니다.

그리고 상용서비스(ex 웹호스팅)을 사용할때 액티브 모드로 접속하게 되면 모든 유저가 FTP에 대한 지식을 알고 있는것이 아니므로 접속에 차질이 생기게 됩니다.

이렇게 서버가 클라이언트를 접속하는 구조를 개선한 것이 패시브 모드입니다.

FTP 패시브(Passive) 모드

ftp_theory_diagram_passive
이미지:넥스트라인
  1. 클라이언트가 서버에 접속
  2. 서버에서 데이터 전송을 위한 포트를 클라이언트에게 알려줌
  3. 클라이언트는 데이터 전송을 위한 포트에 데이터 요청
  4. 서버의 응답과 함께 클라이언트는 서버측의 포트로 데이터를 넘겨받음

액티브 모드의 개선판이 패시브 모드로 클라이언트는 서버측에서 알려준 데이터 포트를 통해 서버에서 데이터를 내려 받습니다.

이때 클라이언트는 서버측의 데이터 포트를 사용하기 때문에 당연하게 클라이언트의 방화벽이나 네트워크 구조에 신경을 쓸 필요가 없습니다.

이처럼 실제적으로 FTP 서버가 21번 포트를 사용하더라도 이 21번 포트는 명령어를 위한 포트일 뿐 실제적인 데이터 전송은 다른 포트에서 이뤄지고 있습니다.

서버측에서 20번 포트를 통해 클라이언트에 접속하느냐, 서버측에서 알려준 데이터 포트를 통해 클라이언트에서 접속하느냐에 따라 액티브 모드와 패시브 모드의 차이가 생깁니다.

연관 글

6 댓글이 있습니다.

  1. 패시브와 액티브 모드는 이해하겠습니다. 헌데 서버또한 공유기 안에 있어 포트포워딩을 하고 있다고 합시다.
    이때 패시브 포트 범위 마저 포트포워딩을 해줘야 당연할꺼라 생각되는데 제가 갖고 있는 IPTIME공유기에서는
    이상하게도 패시브 포트 포트포워딩을 해주지 않았는데도 패시브모드로 접속을 하여 데이터를 주고 받는데
    문제가 없는 이유가 뭘까요? DMZ설정은 하지 않았습니다.

    • 포트포워딩을 설정하지 않았는데 외부에서 접속할때 문제가 없다면 UPNP가 작동해서 그런것 같은데요.

      사용하는 FTP 서버 데몬(프로그램)이 어떤것인가요?

      • 시놀로지 NAS를 사용합니다. 내장된 FTP서버를 열었구요. IPTIME UPNP 목록에는 지금 전송중인 포트가 보이지 않더라구요. 업데이트가 안되서 그런지. UPNP가 작동됬는지 여부를 알수있을까요?

        • 질문 보고 찾아봤는데 아이피타임 같은 경우 포트별 사용 모니터링이 불가능한것 같고 시놀로지 또한 별도의 포트 모니터링 기능이 없는것 같습니다.

  2. 그리고 한가지 더 궁금한것은 액티브 모드의 단점을 극복하려고 패시브 모드를 만들었는데 이때 20번 포트는 사용하지 않는데 이것을 Listen포트가 되는 것은 문제가 있다 판단한것일까요? 왜 굳이 신규로 랜덤하게 포트를 생성하는것을 택했을까요? 랜덤하지 않으면 포트포워딩도 쉬울텐데… 같이 포트20을쓰게 되면 액티브모드와 패시브모드 공존할수 없나요?

    • 이 부분은 제가 네트워크 전문가가 아니라 제대로된 답변은 못해드립니다. ^^;

      모드의 차이를 구분짓기 위해서 일수도 있고 노출된 포트보다는 스니핑에 좀더 대응할수 있어서 이지 않을까 싶네요.

댓글이 없습니다.

댓글을 입력해 주세요.
이름