[파일] FTP 에서 Active 와 Passive 모드
요즘 해킹을 많이 당해서 시스템에 Firewall을 걸면서 몇가지 문제점이 발
생했습니다.
System자체에 Firewall을 경우는 LINUX인 경우는 ipchain을 사용하고
FreeBSD는 ipfw를 사용
합니다. (FreeBSD인 경우는 차후에 문서를 만들어서 배포예정)
그럼.. Active와 Passive차이가 뭐냐….
Active,Passive를 결정하는 것은 Server쪽이아니구 Client Program에서 합
니다.(주의)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
Active는 Client에서 Data 전송 Port를 정하는 거구 Passive는 Server에
서 Port를 정하는
겁니다.
FTP Client와 FTP Server간의 통신할 때, 보통 21번Port만 알고 있는 데,
실제로는 20번Port도
사용합니다.
21번 Port는 Command Port라고 해서, 보통 명령어를 보내는 Port입니다.
예를 들면,
ftp> ls
ftp> cd /pub
20번 Port는 Data Port라고 해서, 명령어를 21번 Port를 통해서 서버에 보
내면 20번 Port를
통해서 보통 Client에게 전달됩니다.(Active Mode인 경우)
ftp>ls <—- Server에게 21번 Port를 통해서 전달
>200 PORT command successful.
서버로 부터 >150 Opening ASCII mode data connection for file list.
전달된 >system
메시지 >welcome.msg
(20번 Port >pub
통해서) >226 Transfer complete.
ftp>
Active Mode인 경우만 20번 Port를 통해서 Client에게 Data를 전송합니
다.
그림으로 보면,
1> Client ———————–> Server
Port: 2000 Port : 21
2> Client ———————–> Server
Port: 2000 Port: 21 <- Command Port
Port: 2001 ——————-> Port: 21
Port: 2001 <——————- Port: 20 <- Data Port
Connection
위 그림을 보면 Client는 Server의 Command Port인 21번 Port로 접속하고
Client의 Data Port가 2001번 Port라는 것을 Server의 Command Port를 통
해알려
주면 Server의 Data Port인 20번 Port와 Client의 Data Port인 2001번
Port와
연결한 후 Data를 전송한다.
Passive Mode인 경우는..
1> Client ———————–> Server
Port: 2000 Port : 21
2> Client <———————- Server
Port: 2000 Port: 21 <- Command Port
Port: 2000 <——————- Port: 3000 <- Data Port
Port: 2001 ——————-> Port: 3000
Connection
Port: 2001 <——————- Port: 3000 <- Data Flow
위 그림을 보면 Server에서 3000번 Port를 생성해서 Client에게 3000번
Port에서
Data를 전송한다고 Client 2000번 Port를 통해 알려주면 Client는 2001번
Port를
생성해서 Server의 3000번 Port에 연결한다. 연결이 성공하면 Server는
Client에
게 Data를 전송한다.
일반 FTP Client프로그램은 Active Mode로 되어있으므로 문제가 없는 데,
FreeBSD에서 접속을
하는 경우 Default가 PASSIVE MODE로 되어있어 문제가 있습니다..
FreeBSD에서 Default값을 바꾸시려면,
Bash인 경우 : export FTP_PASSIVE_MODE=’NO’
Csh인 경우 : setenv FTP_PASSIVE_MODE NO
위 내용은 .bashrc나 .cshrc에 넣어 두시면 되겠네요.