티스토리 뷰


FTP - 엑티브 (port) 모드? 패시브 (pasv) 모드?





간단히 말하면 데이터 전송용 커넥션을 누가 (서버 또는 클라이언트) 결정할 것인지의 차이라고   있다


엑티브 모드 (PORT 모드)


결론부터 예기하자면 클라이언트 인바운드 포트가 랜덤하게 변한다 (+1 씩 증가함)


클라이언트에서는...


[FTP 접근 및 인증]

출발지 포트 : 1024번 이상 포트 (5000 ~ 10000번 제외)

목적지 포트 : 21번 포트로 접근


[FTP 파일 목록 리스팅]

출발지 포트 : 최초 출발지 포트 + 1

목적지 포트 : 20번 포트로 통신 (서버 --> 클라이언트 역으로 연결이 맺어진다)


[FTP 계속 통신 및 파일전송이 일어나게 되면]

출발지 포트 : 최초 랜덤한 포트에서 계속 + 1 이 되면서 증가하면서 데이터 전송이 일어남

목적지 포트 : 20번과 21번이 번갈아 가면서 사용된다.


FTP 서버에서 생각해보자면

정확히 예기하면  TCP 21번 포트만 열려 있다.  TCP 20번은 열려있지 않다. 

(하지만 서버측의 방화벽에는 인바운드 21번 아웃바운드 20번을 열어줘야 한다) STATEFUL 방화벽 기준으로 



netstat 명령어로 확인가능하다 (FTP 서버측의 파일목록이 리스팅이 되지 않을때 서버측의 NETSTAT 상태)



tcp        0      0 서버아이디:21             클라이언트:21589          ESTABLISHED 10569/vsftpd        

tcp        0      1 서버아이디:20             클라이언트:21590          SYN_SENT    10569/vsftpd        



FTP 서버가 클라이언트로 소스포트 : 20 목적지포트 : 21590 으로 SYN 패킷을 보냈다. 라는 의미 위 상태는 응답을 계속 받지 못하는 상태이다.



FTP 엑티브 모드 사용시 접속이 잘 안되는 증상은 아래와 같다.


FTP 인증이나 접속까지는 되는데 파일목록이 출력되지 않는다.

어떤곳에서는 접속되고 또 다른 PC 나 다른 장소에서는 접속이 되지 않는다.


1. FTP 클라이언트 PC의 공유기 환경에서의 문제


PC 클라이언트 --> 공유기 --> 인터넷 으로 나간 패킷 (SYN)에 대한 패킷은 기억하며 (당연히 돌아오는 패킷 ACK) 알아서 주소변환된다.

PC 클라이언트 <-- 겅유기 <-- 인터넷 으로 들어오는 패킷은 공유기가 이 패킷이 누구것인지 알지 못한다


21번으로 로그인한뒤 뜬금없이 서버쪽에서 내 PC쪽으로 최초포트에서 +1 된 포트번호로 SYN 을 보내는데 당연히 공유기는 이 패킷이 누구것이며 어디로 분배해야 하는지 알지 못한다.

--> 패시브 모드로 접속하거나 공유기에 포트포워딩 기능이나 공유기 공인아이피를 PC가 그대로 이용하는 기능등을 이용하면 될듯하다.


2. 방화벽 문제


엑티브 모드에서는 FTP 서버 방화벽에는 (인바운드 TCP 21번, 아웃바운드 TCP 20번) 만 오픈되어 있으면 문제 없다.

엑티브 모드에서는 FTP 클라이언트 방화벽에는 (아웃바운드 TCP 21번, 인바운드 TCP (+1) 포트가 열려 있어야 한다)


대략 포트는 10000번대를 이용하는거 같긴 한데 (그렇다고 10000~20000 이런식으로 무작정 여는것은 보안상 좋지 못하다)


--> 윈도우 방화벽, 기타 방화벽을 비활성화 하거나 10000번 대 포트를 임의적으로 열어주면 된다. 

--> 윈도우 방화벽에는 특정 응용프로그램을 방화벽 허용시키는 기능이 있다 FTP 클라이언트 프로그램을 무조건 허용으로 등록하면 문제는 해결

--> 아니면 소스포트 TCP 20번 / FTP 서버아이피로 들어오는 모든 패킷을 허용해주면 된다.



패시브 모드 (PASV 모드)

FTP 서버쪽 인바운드 포트가 랜덤하게 변한다


클라이언트는 랜덤포트를 이용하고 서버쪽으로 21번으로 접근한다

디렉토리 리스팅은 클라이언트 최초 랜덤포트 + 1 이 되고 서버는 랜덤한 포트로 선정된다.


[FTP 접근 및 인증]

출발지 포트 : 1024번 이상 포트 (5000 ~ 10000번 제외) 

목적지 포트 : 21번 포트로 접근


[FTP 파일 목록 리스팅]

출발지 포트 : 최초 출발지 포트 + 1

목적지 포트 : 랜덤한 포트로 지정 (1024 ~ 65535)


[FTP 계속 통신 및 파일전송이 일어나게 되면]

출발지 포트 : 최초 랜덤한 포트에서 계속 + 1 이 되면서 증가하면서 데이터 전송이 일어남

목적지 포트 : 랜덤한 포트와 21번이 번갈아 가면서 사용된다.



사실상 클라이언트에서는 패시브 모드에서의 문제점을 잘 나타나지 않는다.

서버쪽에 랜덤포트가 계속 열려야 하기 때문에 방화벽에서는 해당 클라이언트 아이피로 모두 허용하던지 아니면 패시브 포트를 고정하는 방법이 사용된다. 패시브 포트를 고정시키고 (50000 ~ 50010) 방화벽에서 해당 포트만 열어주면 문제는 해결된다.

하지만 많은 사용자가 여러 파일을 업로드 다운로드 받는 상황이라면 지정한 패시브 포트는 넉넉하게 잡아주는게 좋을것이다.



출처 및 참고사이트

http://blog.naver.com/misman95?Redirect=Log&logNo=80035150425

댓글
댓글쓰기 폼