시스템 관리/서버공통 설정

FTP (FTP mode, Active & Passive)

99iberty 2013. 11. 6. 14:37

http://guru4u.tistory.com/entry/FTP-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-PORT-Ftp-modeActive-Passive

 

 

 

Unix 서버에서 shell script로 FTP 를 접속하는 application.. 늘 잘 사용해 왔는데..
오늘따라..

425 No data connection
: A remote host did not respond within the timeout period.


라는 에러가 발생한다. 접속요청에 대한 서버의 응답이 없어서 발생하는 에러?

ftp 의 접속 모드의 차이때문이라는 추측과 함께.. passive 모드로 접속을 해보니 잘 사용된다..

현재 사용하고 있는 시스템은 DMZ 를 거치는 시스템이다. 중간에 요청했던 IP가 공인 ip로 전환이 된다.
따라서 실제 요청들어왔던 ip 정보가 변경됨에 따라 실제 돌려주어야 할 ip가 유실되는 것이다.
그래서 위와 같은 에러가 발생한 것이다.

좀 더 정확한 원인에 대한 내용을 찾던 중 좋은 정보가 있어 가져왔다..^^


FTP 서비스는, 일반적인 인터넷 서비스와 달리 2개의 포트를 사용한다.

명령어와 응답이 오가는 command포트(control 포트)
실제 데이터가 오가는 data포트구성된 TCP기반의 서비스.
흔히 알려진 21번 포트는, 서버에서 일반적으로 사용하는 command포트의 번호.


FTP 는 두가지 모드가 있다. 전통적인 방식이 Active Mode, 좀 더 최근에 나타난 방식이 Passive Mode 이다.

인터넷 사용자들이 가장 흔하게 접하는 웹 브라우저들은 일반적으로 Passive Mode 로 설정되어 있는데 반하여,
알FTP 나 WS-FTP, CuteFTP 같은 FTP 클라이언트 프로그램들은 일반적으로 Active Mode 가 기본값으로 설정되어 있다.

Active Mode 에서는 서버가 어떤 출력을 내보낼 때 (이를테면, ls 나 dir 과 같은 명령어에 대한 결과 또는 파일전송시)
반드시 현재 내가 사용중인 컴퓨터와 별도로 추가적인 TCP/IP 연결을 맺어야 한다.
이 때, 사용하는 포트가 FTP-Data 포트인 20 번 포트이다. (참고로 FTP 포트는 21 번이다)
이는 기존에 연결된 FTP 를 끊지않고 Data Connection 을 필터링 하는 것이 불가능 하다 것을 뜻하므로
방화벽이 설치되어 있는 경우 Active Mode 는 상당히 곤란한 환경이 된다.

반면 Passive Mode 에서는 FTP-Data 20 번 포트 대신 1024 ~ 65,536 번 포트중 시스템에서 예약해 놓지 않은 포트를
할당하여 데이터를 주고 받을 수 있다.

Passive Mode 를 끄고 접속하라는 것은 해당 FTP 서버가 Passive Mode 를 지원하지 않고,
Active Mode 로만 운영된다는 뜻이며 이러한 서버는 Passive Mode 로 접속하는 것이 불가능하다.


Active FTP
Active 모드의 FTP에서, 클라이언트는 사용되지 않는 랜덤한 포트 n(n>1023)을 통해 서버의 command 포트(21번)에 접속합니다. 이때, 포트번호 n에 1을 더한 즉, n+1번 포트의 정보를 서버에 전송하며, 클라이언트는 n+1번 포트를 청취(listening)하기 시작합니다.
FTP 서버의 data포트(20번)는 클라이언트에서 지정한 data포트(n+1)를 통해 클라이언트에 접속합니다. 서버에 설치된 방화벽의 입장에서 살펴보면, Active 모드의 FTP가 지원되려면, 다음의 통신채널이 열려있어야 합니다.

- FTP서버의 21번 포트 : 클라이언트에서 접속을 시도할 수 있는 command포트가 온전히 열려있어야 함
- FTP서버의 21번 포트 → 클라이언트의 n(n>1023)번 포트 : 서버에서 클라이언트의 command포트로 응답
- FTP서버의 20번 포트 → 클라이언트의 n+1(n>1023)번 포트 : 서버에서 클라이언트의 data포트로의 접속
- FTP서버의 20번 포트 ← 클라이언트의 n+1(n>1023)번 포트 : 클라이언트에서 서버의 data포트에 응답

FTP의 접속 연결을 도식화하면, 다음의 그림과 같습니다.

[ Active mode FTP connection ]



Passive FTP
서버가 클라이언트에 접속을 시도해야하는 문제점을 해결하기 위해, 다른 방식의 FTP 연결이 개발되었으며, 이를 passive모드 또는 PASV라고 부릅니다. 서버에 접속하기 위해 클라이언트의 명령이 전송되는 점은 같으나, 그 이후의 방식이 Passive모드의 특징이 됩니다.

Active모드를 이용할 때, 클라이언트에 설치된 방화벽이 FTP서버의 접속 시도를 외부의 침입으로 간주, 차단하는 문제가 있습니다. 이러한 문제를 해결하기 위해 Passive모드에서는 두개의 포트 모두, 클라이언트에서 서버에 접속을 합니다.

FTP연결을 위해, 클라이언트는 사용되지 않는 랜덤한 포트 n(n>1023)과 n+1포트를 열어둡니다. n포트는 서버의 command포트인 21번 포트에 접속합니다. 그러나, 클라이언트는 (서버로 하여금 클라이언트의 data포트에 연결을 허용하기 위해) PORT명령어를 호출하지 않고, PASV명령어를 호출합니다.
그 결과, 서버는 사용되지 않는 랜덤한 포트 p(p>1023)를 열어두고, 클라이언트에 해당 포트정보를 넘겨줍니다.
최종적으로, 클라이언트는 데이터 전송을 위해, 자신의 n+1포트와 서버의 p포트의 연결을 시도합니다.

서버에 설치된 방화벽의 입장에서 살펴보면, Passive 모드의 FTP가 지원되려면, 다음의 통신채널이 열려있어야 합니다.

- FTP 서버의 21번 포트 : 클라이언트에서 접속을 시도할 수 있는 command포트가 온전히 열려있어야 함
- FTP 서버의 21번 포트 → 클라이언트의 n(n>1023)번 포트 : 서버에서 클라이언트의 command포트로 응답
- FTP 서버의 p(p>1023)번 포트 : 클라이언트의 n+1(n>1023)번 포트에서 데이터 접속
- FTP 서버의 p(p>1023)번 포트 → 클라이언트의 n+1(n>1023)포트 : 클라이언트의 요청에 대한 응답 및 실제 데이터를 전송

FTP의 접속 연결을 도식화하면, 다음의 그림과 같습니다.

[ Passive mode(PASV) FTP connection ]




자세한 내용은 아래 블로그를 참고하면 좋은 정보가 많다.

[출처]
헷갈리는 FTP (Active FTP / Passive FTP)|작성자 지누