98..Etc/Etc...2008. 10. 20. 23:49
반응형

FTP 서버를 방화벽 내부에서 구동하려면 FTP connection type에 대한 이해가 필요하다.
이러한 원리를 이해하려면 TCP/IP, Firewall에 대한 사전 지식이 필요하다.

FTP connection의 두 type
1. active connection
2. passive connection
    - active mode
    - passive mode

1. active connection
control connection으로 command(명령) 전송시에 사용된다.
FTP client software에 의해 초기화 된다. 즉, client:X에서 server:ftp port 21번으로 접속이 이루어진다.
클라이언트:X -> 서버:ftp port 21번
여기서 X는 1023보다 큰 비사용 중인 포트를 말한다.

2. passive connection
data connection으로 data(파일) 전송시 사용된다.
active mode와 passive mode가 있으며, 일반적인 FTP server는 active mode로 data를 전송한다.

active mode 연결 진행 절차:
1) FTP client는 data 전송시 FTP server에게 passive mode를 사용하는지 여부를 요청하게 된다.
2) active mode를 사용한다면 FTP client는 server가 data 전송을 위해 접속하게 될 자신의 client port(Y라고 가정)를 서버에게 알려준다.
3) FTP 서버는 ftp-data port 20번을 통해 client가 알려준 포트로 접속 시도를 요청한다(syn packet 전송).  
4) 해당 client는 요청에 대한 수신 확인 및 허락을 전송한다(awk + syn packet 전송). 
5) server는 client가 보낸 packet에 대한 수신 확인을 전송한다(awk packet).  
6) 이로써 connection은 형성되고 data를 전송하게 된다.
즉, server:ftp-data port 20번 -> client:Y 형태로 연결된다.

이러한 이유로 방화벽 내부에 FTP server를 운영할 경우 command는 전달되나 실제 data가 전송되지 않는 문제가 발생한다.
또한 firewall 운영시 내부 네트웍에서 외부로 나가는 1023 이상의 포트를 모두 열여 주어야 하는 문제도 발생된다.

passive mode 연결 진행 절차:
1) FTP client는 data 전송시 FTP server에게 passive mode를 사용하는지 여부를 요청하게 된다.
2) passive mode를 사용한다면 FTP server는 client가 data 전송을 위해 Server에 접속할 1023 이상의 port를 알려준다.
3) 이때 사용할 포트를 N 이라고 정하며, N 값은 FTP server 마다 설정이 다르다. 즉, passive mode에서는 ftp-data port 20번를 사용하지 않는다.
4) FTP client는 Server가 알려준 port N으로 접속을 시도하기 위해 syn packet을 자신의 Z(1023 이상의 비사용 중인) port를 열어 전송한다.
5) FTP server는 awk + syn packet을 통해 수신 확인 및 연결을 허락하게 된다.
6) FTP client는 awk packet을 전송하여 수신 확인을 하고 connection을 맺은 후 data를 전송하게 된다.
즉, client:Z -> server:N 형태로 연결된다.

이러한 경우라면 방화벽에서 FTP server가 passive mode로 사용하게 될 port를 열어 정상적으로 data 전송이 가능하다.

3. FTP server를 passive mode로 운영하기 위한 설정
Linux에서 운영하는 대표적은 FTP server인 wu-ftpd와 proftpd에 대해서 언급한다.
설정 방법은 해당 파일에 passive port로 사용할 port 영역을 명시하게 된다. 2000번 이상의 port를 열 것을 권장하며 일반적으로10000번 이하의 포트를 사용한다.

wu-ftpd의 경우:
wu-ftpd에서 제공하는 /etc/ftpaccess 파일에 다음 내용을 추가한다.
passive ports 0.0.0.0/0 15000 17000
즉, wu-ftpd를 passive FTP로 운영하기 위해 15000~17000 포트를 사용하는 것으로 설정한 것이다.
standalone type server라면 반드시 restart한다.

proftpd의 경우:
proftpd에서 제공하는 /etc/proftpd/conf/proftpd.conf 파일에 다음 내용을 추가한다.
PassivePorts 60000 62000
즉, proftpd를 15000~17000 포트를 이용하여 passive FTP로 운영할 것을 설정한 것이다.
standalone type server라면 반드시 restart한다.

passive connect시 client에서 주의할 사항
일반적으로 server를 passive mode로 운영할 경우 client 또한 passive mode로 사용해야 한다. Netscape의 경우 특별한 문제가 발생하지 않으며, ncftp의 경우 접속 후 set passive on 명령어를 수행하면 된다. gftp를 사용한다면 FTP -> Options -> General -> "Passive file transfer" 를 설정기 바란다.



출처 : http://chunter.tistory.com/223

Posted by 1010