FTP Passive mode
FTP 서버의 Passive 모드는 명령어 연결(Control connection)과 데이터 연결(Data Connection)을 분리해서 접속하는 방식이다.
연결 과정
1. FTP 서버 IP xxx.xxx.xxx.xxx 포트 21 번으로 접속
2. FTP 서버의 21 포트 -> 클라이언트 1023(n) 이상의 포트 (서버에서 클라이언트의 Command 포트로 응답)
3. FTP 서버의 20번 포트 -> 클라이언트 n+1 번 포트 (서버에서 클라이언트의 data포트로 접속)
4. FTP 서버의 20번 포트 <- 클라이언트 n+1 번 포트 (클라이언트에서 서버의 data포트로 응답)

연결 과정에 있어서 클라이언트는 서버에 접속할때 PORT xxx,xxx,xxx,xxx,yy,nn 이런식의 메세지를 전달한다. 여기서 xxx 는 IP Address를 나타내고 포트는 마지막 부분
yy,nn 부분이다 포트번호는 (yy * 256) + nn 으로 결정이 되어 클라이언트의 포트를 서버에알려준다.
연결과정
1. FTP 서버 IP xxx.xxx.xxx.xxx 포트 21번에 접속
2. FTP 서버의 21포트 -> 클라이언트 1023(n) 이상의 포트(서버에서 클라이언트의 Command 포트로 응답)
3. FTP 서버의 Passive 설정된 범위의 포트 -> 클라이언트 n+1 포트(클라이언트에서 접속)
4. FTP 서버의 Passive 설정된 범위의 포트 -> 클라이언트 n+1 포트(클라이언트에서의 데이터 전송)

proftpd
/etc/proftpd/conf/proftpd.conf
PassivePorts 시작 끝
vsftpd
/etc/vsftpd/vsftpd.conf
pasv_enable=YES
pasv_min_port=시작
pasv_max_port=끝
* 리눅스 서버의 Passive 모드 설정할때는 ip_conntrack 모듈이 필요하다. 이 모듈은 열려있는 포트가 몇번 포트에 의해서 연결이 되었는지 정보를 담고 있다.
그 정보를 담고 있는 부분은 /proc/net/ip_contrack 에 존재한다. 커널 모듈을 등록시켜줘야 한다.
modprobe ip_conntrack
modprobe ip_conntrack_ftp
Iptable 설정
/etc/sysconfig/iptable-config 파일 내의 IPTABLES_MODULES 항목을 추가 하거나 주석을 제거한다.
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"
iptables -A INPUT -p tcp --sport 1024:65535 --dport [포트시작]:[포트끝] -m state --state ESTABLISHED,RELATED -j ACCEPT
Windows 서버
1. 시작 - 제어판 - 관리도구 - 인터넷정보서비스 - 로컬컴퓨터 - 속성 - 메타베이스 직접 편집 허용 체크
2. C:\%SystemRoot%\system32\inetsrv\metabase.xml 열기
3. PassivePortRange="시작-끝" 으로 수정
4. metabase.xml 저장
5. IIS 재시작
6. Ipsec, 또는 방화벽에 설정한 포트 번호 추가
* Windows 2000 에서는 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msftpsvc\Parameters\ 에 REG_SZ 값으로 PassivePortRange 값을 추가한다.
Posted by 근원e
Trackback URL : http://www.lovelgw.com/Blog/trackback/73