FTP에서 passive mode와 active mode에 관한좋은글이 있어서 퍼왔습니다.
출처는 관련링크로 적수네에 올라온글입니다.
FTP 서버를 방화벽 내부에서 구동하려면 FTP connection type에 대한 이해가 필요합니다. 이러한 원리를 이해하시려면 tcp/ip, firewall 에 대한 사전 지식이 필요합니다. 그럴 경우 너무 방대해지므로 간략하게 설명드리겠습니다.
active connection vs. passive connection
FTP에서 사용되어지는 connection type은 2가지로 나눕니다.
첫번째가 control connection으로서 FTP client software에 의해 초기화(접속시도)됩니다. 이것은 client:X 에서 server:ftp (port 21)로 접속이 이루어지며 command 전송시 사용되어 집니다.
클라이언트:X -> 서버:ftp
여기서 X 는 1023보다 큰 비사용중인 포트를 말합니다.
두번째는 data connection으로서 이것은 active mode와 passive mode로 나누어지며 data(실제 전송될 파일) 전송시 사용되어 집니다. 이때 일반적인 FTP server는 active mode로 data를 전송합니다.
active mode는 다음과 같은 절차로 연결을 진행하게 됩니다.
- FTP client는 data 전송시 passive connection을 사용하는지 요청하게 되고 그렇지 않을 경우 FTP server가 data 전송을 위해 접속하게될 client 자신의 port(Y라고 가정)를 서버에게 알려줍니다.
- FTP 서버는 ftp-data port(20번)를 통해 client가 알려준 포트로 접속을 시도를 요청합니다. (syn packet 전송)
- 해당 client는 요청에 대한 수신 확인 및 허락을 전송합니다.(awk+syn packet 전송)
- server는 client가 보낸 packet에 대한 수신 확인을 전송합니다.(awk packet)
- 이로서 connection은 형성되고 data를 전송하게 됩니다. (자세한 내용은 RFC 문서를 참고하시기 바랍니다)
즉 server:ftp-data -> client:Y 형태로 연결됩니다.
이러한 이유로 방화벽내부에 FTP server를 운영할 경우 command는 전달되나 실제 data가 전송되지 않는 문제가 발생합니다. (ipchains로 설정할 경우, iptables의 경우라면 전송되는 flag에 따라 섬세하게 설정 가능)
또한 firewall 운영시 내부네트웍에서 외부로 나가는 1023 이상의 포트를 모두 열여 주어야 하는 문제도 발생됩니다. (firewall 제품 active mode에 대해 지원하기도 하고 그렇지 않은 제품도 있습니다)
passive mode는 다음과 같은 연결을 진행하게 됩니다.
- FTP client가 data 전송시 FTP server에게 passive connection를 사용하는지 여부를 요청하게 됩니다.
- passive connection를 사용한다면 FTP server는 client가 data 전송을 위해 Server에 접속할 1023이상의 port를 알려주게 됩니다. (이때 사용할 포트를 N 이라고 정하며, N 값은 FTP server 마다 설정이 다릅니다. 즉 active connection에서 사용하는 ftp-data(20번) port를 사용하지 않습니다.)
- FTP client는 Server가 알려준 port N으로 접속을 시도하기 위해 syn packet을 자신의 Z(1023이상의 비사용 중인) port을 열어 전송합니다.
- FTP server는 awk+syn packet을 통해 수신 확인 및 연결을 허락하게 됩니다.
- FTP client는 awk packet을 전송하여 수신 확인을 하고 connection을 맺은 후 data를 전송하게 됩니다.
즉 client:Z -> server:N 의 형태로 연결됩니다.
이러한 경우라면 방화벽에서 FTP server가 passive connection에서 사용하게 될 port를 열어 정상적으로 data 전송이 가능합니다.
FTP server를 passive connection으로 운영하기 위한 설정
Linux에서 운영하는 대표적은 FTP server인 wu-ftpd와 proftpd에 대해서만 언급하겠습니다.
설정 방법은 해당 파일에 passive port로 사용할 port 영역을 명시하게 됩니다. 2000개 이상의 port를 열것을 권장하며, 일반적으로10000번 이하의 포트를 사용합니다.
wu-ftpd의 경우
wu-ftpd에서 제공하는 /etc/ftpaccess 파일에 다음 내용을 추가합니다. standalone type server라면 반드시 restart 합니다.
passive ports 0.0.0.0/0 15000 17000
즉 wu-ftpd를 passive FTP로 운영하기 위해 15000~17000 포트를 사용하는 것으로 설정한 것입니다.
proftpd의 경우
proftpd에서 제공하는 /etc/proftpd/conf/proftpd.conf 파일에 다음 내용을 추가합니다. standalone type server라면 반드시 restart 합니다.
PassivePorts 60000 62000
즉 proftpd를 15000~17000 포트를 이용하여 passive FTP로 운영할 것을 설정한 것입니다.
passive connect시 client에서 주의할 사항
일반적으로 server를 passive connection으로 운영할 경우 client 또한 passive mode 로 사용하여야 합니다. Netscape의 경우 특별한 문제가 발생하지 않으며, ncftp의 경우 접속후 set passive on 명령어를 수행하시면 됩니다. gftp를 사용하신다면 FTP -> Options -> General -> "Passive file transfer" 를 설정하시기 바랍니다
출처 : http://blog.naver.com/cresper/20032969093
FTP 프로그램에서의 Active 모드와 Passive 모드 포럼 회원들 주에 FTP가 무엇인지 모르는 사람은 설마 없겠지요? - 사실 의외로 FTP 모르는 사람들이 있더군요. 그런것을 보면 요즘 세상은 극과 극인것 같아염. 아는 넘은 무지 많이 알고 모르는 넘은.. 거의 백지 이구… ㅡㅡ; 오늘 쓸 글은 일반적인 사람들은 그다지 겪어 보기 힘든 경우 인데, FTP 를 구성하는데 있어서 라우터 안쪽의 환경과 같이 가상 아이피를 사용하는 컴퓨터의 FTP 구성입니다. 집에서 FTP 서버를 필요할때만 가동시키시는 분들은 별로 해당사항 없고염, 회사나 학교에서 보안의 이유로 라우터를 이용하여 내부 아이피를 사용하여 관리자가 허가한 기본 포트를 제외한 모든 포트가 막힌 경우의 이야기지염. 일단 이러한 환경에서 ftp 서버를 만드려면, 쉽지가 않습니다. 대부분 네트워크 관리자들은 서버의 부하를 고려하여 ftp 기본 포트인 21번은 막아 둡니다. 뿐만아니라.. 거의 대부분의 포트를 다 막아 두지염. 그렇게 포트를 막으면, 인터넷은 어떻게 하냐라고 궁금해 하실지 모르지만, 인터넷하고는 아무상관이 없습니다. 대게의 경우 인터넷 포트는 열어둘 뿐더러, 여러분이 직접 어떠한 종류의 서버를 구축하지 않는 이상, 그렇게 큰 불편은 못느끼 실것입니다. 외부에 있는 각종 서버를 접속하는 데는 별문제가 없지요. 문제는 여러분들이 서버를 구축하여 외부에서 그 여러분의 서버를 찾아 들어오는것이 상당히 어렵다는 것입니다. 아마도, 일부 내트워크 프로그램이 작동안하는 경우가 생기는게 대부분이지요. 메신져 프로그램이나 당나귀 같은 네트워크 프로그램이 포트가 막혀서 접속이 안되던지, Low ID 현상을 일으킬것입니다. 포트가 막혀있기 때문에 메신져가 쓰는 포트나 당나귀가 쓰는 포트를 쓸수가 없는 것이지요. 메신져 중에서 내부 아이피에 가장 강한 프로그램이 MSN 이라고 그러더군요. 그외의 나머지 메신져 중에는.. 내부 아이피 일경우 아예 접속이 안되는 것도 많지요.. 이와같이 가상아이피을 경우 걔발자 입장에서도 무척 성가시고 골치아프기 때문에 모든 버그를 해결하기는 어렵습니다. 우선은 여러분들의 원활한 FTP 서버운영을 위해서는 여러분의 컴퓨터에 한해서 FTP 포트인 21번 포트를 열기위한 네트워크 관리자 로비가 필요합니다. 여러분의 내부 아이피에 한하여 21번 포트가 열려야 하고, 이럴경우 외부에서는 ftp 접속시에는 네트워크 상의 외부 공인 아이피를 찍고 들어오면, 여러분이 만든 서버에 접속할수가 있지요.. 그런데 이러한 방법은 말처럼 쉬운일이 아닙니다. 왜냐면, 인터넷을 하기위한 외부 공인 아이피는 그 네트워크 에서 몇개 안됩니다. 대게 소규모의 네트워크 라면 하나 정도의 공인 아이피로 모두 커버하는 경우도 있지요. 그런데 그러한 공인 아이피의 가장 유용하다 할수 있는 21번 포트를 당신에게 내어 줄 네트워크 운영자는 그리 많이 있지 않다는 것이지요. 차선의 방법은 임의의 포트를 열어 달라는 것입니다. 어차피 숫자이니 만큼 기존 예약 되어진 포트가 아닌 임의의 포트를 하나 열어 달라고 하여, 그 포트를 이용해서 ftp 를 구축하는 것입니다. 이러한 방법은 라우터 안에 혹은 아이피 공유기 안에 복수의 컴퓨터로 복수의 ftp를 구축할 경우도 해당이되는 내용입니다. 이미 21번을 다른 서버에서 사용하고 있거나, 21번을 못쓰는 경우를 말합니다. 내부 아이피를 가지고 비정규포트를 사용해서 ftp 를 구성하는 경우 간과해선 안되는 부분이 우리가 많이 알고 있는 패시브 모드와 액티브 모드라는 것입니다. 패시브 모드라는 건 ftp 를 사용하는 사람이라면 익숙하실것입니다. 패시브 옵션에 체크를 해야 접속이 잘 안되는 ftp 서버에 접속이 된다는 정도 겠지요. FTP 에 관한 지식중에 틀리기 쉬운 부분이 2개가 있는데, 하나는 ftp 서버가 포트를 하나만 쓴다는 것과, 패시브 모드와 액티브 모드가 FTP 서버에서 설정되어진다 라는 것입니다. ftp서버가 사용하는 포트는 2개 입니다. 하나는 로그인과 디랙토리 검색 따위의 정보 포트와 실제적으로 데이터를 다운 받고 업하는데 쓰는 데이터 포트입니다. FTP 서버의 포트가 정규포트 (21번) 일경우에는 데이터 포트는 20번입니다. 그런데 비정규 포트인 경우 데이터 포트 역시 정해져 있지 않기 때문에, 데이터 포트 역시 따로 설정을 해야 합니다. 접속 주소를 적어 본사람은 알겠지만, 어디에서 데이터 포트를 입력하는곳은 없지요. 따라서 어디에선가 이 데이터 포트를 지정을 해줘야 합니다. 패시브 모드라하는것은 이러한 데이터 포트를 사용자가 즉 클라이언트에서 지정하겠다는 것이고, 액티브 모드는 서버에서 데이터포트를 지정하는 것입니다. 이것은 서버의 설정과는 아무 상관이 없으며 클라이언트 프로그램에서 결정을 하는 것이지요. 우리가 주로 패시브 모드로 접속을 하는 것은, 접속환경이 주로 서버측은 공인 아이피이고, 접속자는 즉 클라이언트는 유동아이피이거나 가상아이피가 많기 때문입니다. 클라이언트 측이 공인 아이피이거나 유동아이피인경우는 별상관없지만, 라우터 따위로 내부 내트워크에 속한 사설 아이피인경우, 서버측에서 지정하는 포트가 막혔을 가능성이 높기 때문이죠. 그래서 데이터 포트를 포트의 제약이 심한 클라이언트 쪽에서 정하게 하여 연결을 하는 것입니다. 이와 반대로 액티브 모드는 데이터 포트를 클라이 언트에서 지정하는 것이 아니고 서버 측에서 지정을 합니다. 접속자 포트의 제약이 없는 반면에 서버가 라우터 및 IP 공유기에 의해 내부 아이피로 존재 사용 되어 집니다. 데이터 포트에 대한 제약이 서버측에 있기 때문에, 클라이언트 쪽에서 임의로 데이터 포트를 결정하는 경우 포트가 막혀 있을 확률이 높기 때문에 포트 결정을 서버 쪽에서 하는 것입니다. 결론적으로 내부 아이피를 가진 ftp 서버는 지정 포트가 21번이 아닐때에는 패시브 모드로는 외부에서 접속이 불가능 합니다. ( 당연하겠지만, 같은 내부의 컴퓨터들끼리는 액티브든 패시브든 상관없이 접속이 가능합니다. ) 21번 포트의 서버가 따로 있고 그외의 다른 포트를 이용해서 ftp 서버를 만들면, 외부의 접속자는 클라이언트 프로그램의 옵션에서 액티브모드로 변경을 해줘야 하지요. 또 하나 사람들이 오해하기 쉬운 것은, 저 같은 경우도 간단한 자료 전송은 ftp 를 이용해서 상대측으로 부터 익스플러에 ftp://주소/파일 이런식으로 링크를 걸어 두는데, 익스플러의 ftp 전송모드는 기본이 액티브 모드가 아닌 패시브 모드입니다. 그래서 패시브 모드로는 접속이 안되는 내부 아이피 ftp 서버는 익스플러에서 접속이 불가능합니다. 마지막으로 ftp 규약에서 응답부호에 대한 설명을 올립니다. ftp 에 접속하다보면 오른쪽 아래 창에 숫자로 시작하는 메세지가 마구 뜨는데, ftp 접속 프로그램을 만들경우, 주로 그 3자리 숫자를 인식해서, 서버의 상태를 알아 옵니다. 일반 사람들에게는 별 필요 없을지도 모르지만, 참고로 보시라고 올립니다. 출처 http://www.nforum.org/forum/viewtopic.php?t=863 |
IIS기반 FTP 서비스는 패시브모드(Passive-mode)와 액티브모드(Active-mode) 2가지를 지원합니다.
Active-mode 는 클라이언트 기반 접속입니다. 그래서 웹서버쪽에 20,21 번이 열린 FTP를 접속시 클라이언트에서는 포트가 랜덤포트를 이용하나 서버 포트는 변함이 없습니다. 클라이언트는 서버쪽에 port 명령어를 보냅니다.
Passive-mode 는 서버쪽 21번 포트로 접속시, 클라이언트의 랜덤포트가 아니라 서버쪽 랜덤포트를 이용하게 됩니다. 서버는 클라언트에게 pasv 명령어를 보내며, 클라이언트는 승인하게 됩니다.
문제는, 패시브모드의 경우 서버쪽에 1024 에서 65535 포트 사이를 랜덤하게 할당하며, 네트워크 세션이 있을때마다 신규포트를 이용하게 됩니다. 이때, 서버쪽에 방화벽을 운영하거나 대량접속서비스가 운영중일때는 네트워크 자원이 부족하게 되어 접속장애가 있을수 있습니다.
패시브모드에서의 서버쪽 랜덤 포트범위를 조정하므로써, 이를 해결할 수 있습니다.
Windows 2000 Server 및 Windows Server 2003 모두 PassivePortRange 값을 이용하여 조정이 가능합니다.
Windows Server 2003 의 경우
1. 메타베이스를 수정하는 방법입니다.
(메타베이스를 수정할려면, IIS MMC에서 메타베이스 직접수정 허용 설정이 되어 있어야 합니다.)
2. ADSUTIL을 이용하는 방법입니다.
Adsutil.vbs set /MSFTPSVC/PassivePortRange "5500-5700"
Windows 2000 Server 의 경우는 레지스트리 값을 추가해야 합니다.
HKEY_LOCAL_MACHINESystemCurrentControlSetServicesMsftpsvcParameters
에서 REG_SZ 타입의 PassivePortRange 값 이름을 추가합니다.
패시브 모드 포트 범위 가 5001 에서 65535까지 설정됩니다.
위 2경우 모두 설정후 FTP 서비스를 재시작 해야 적용되며, 위와 같이 범위 또는 특정포트값을 설정해도 됩니다.