반응형
ி 개요
TCP/IP
환경에서 서버와 클라이언트 사이의 파일 전달
을 위한 프로토콜이다.FTP 서버에 파일을 올리면 사용자들이 접속해서 다운로드할 수 있다.
많은 사람이 웹 브라우저를 FTP로 이용하기도 한다.
ி 특징
①
FTP는 로그인 기능이 있다.FTP는 로그인 정보가 평문으로 노출돼서 인증에 취약하다.
그에 따라 패킷을 암호화하여 통신하는 sftp(ssh ftp)가 나왔다.
하지만 모든 패킷을 암호화하므로 ftp보다 속도가 떨어진다.
②
두 가지의 모드가 존재한다. 전송 모드(Active Mode)
, 수동 모드(Passive Mode)
( 사용 여부는 서버가 아닌 클라이언트가 결정하며 둘의 차이점은 전송 방향에 대한 부분이다. )
ftp 클라이언트 프로그램
은 모드 기본값이 Active
, 웹 브라우저 ftp
는 passive
이다. ③
일반 서비스와 달리 포트를 2개 사용한다. 접속을 위한 포트인 제어 포트
(21번) 데이터 전송을 위한 포트인 데이터 포트
(모드에 따라 바뀜) 데이터 포트
( Active - 20번
, Passive - FTP 서버가 결정
) Active 모드
클라이언트
는 자신이 랜덤으로 생성한 데이터 포트를 서버
에게 전달하고 서버
는 수신한 데이터 포트로 접속한다. 즉, 클라이언트 입장에서는 서버가 능동적으로 내 데이터 채널에 직접 접속해주는 모드이다.
통신 과정
①
(제어 채널 생성)클라이언트는
사용하지 않는 랜덤한 포트
(1024-65535)를 통해서 서버의 제어 포트(21)에 접속한다. ②
(데이터 포트 생성) 랜덤으로 정해진 포트 번호에 1을 더한 포트 번호
를 서버에 전송하며, 클라이언트는 해당 포트를 Listening한다.
③
(데이터 채널 접속)서버의 데이터 포트(20)가
클라이언트의 데이터 포트로 접속
한다.클라이언트가 데이터를 요청하면 서버는 연결된 데이터 포트를 통해서 파일을 전송한다.
➽ 예시
클라이언트가 서버에 접속할 때 5000번 포트를 이용하여
접속 요청을 보낼 때 추가로 +1 더한 5001번 포트의 정보를 같이 서버에 보낸다
즉,
접속 요청을 보낼 때 추가로 +1 더한 5001번 포트의 정보를 같이 서버에 보낸다
서버의 제어 포트(21)
에서 해당 클라이언트의 요청을 수락하고 같은 종류의 포트와 연결한다.
즉,
제어 포트(21)
는 클라이언트의 제어 포트(5000), 데이터 포트(20)
는 클라이언트의 데이터 포트(5001)와 연결한다..
문제는 서버가 클라이언트로 접속할 때
클라이언트에서 시스템 침입으로 간주하여 방화벽에 의해 차단될 수가 있다.
정상 서비스를 하려면 클라이언트 방화벽에서 20,21번 포트를 연다.
Passive 모드
Active는 서버가 클라이언트 포트에 직접 접속했지만
Passive는 두 개의 포트가 모두 클라이언트에서 서버에 접속한다.
Passive에서는 서버가 데이터 포트를 결정하고 클라이언트에게 알려주는 방법을 사용하는데,
문제는
Passive 모드의 지원 여부
와 서버에 많은 포트
가 있어야 하는 점이다.해당 포트에 클라이언트가 접속할 수 있게 일정 범위의 포트를 열어 주어야 하는데,
대량 접속 시 네트워크 자원이 부족해질 수 있어서 FTP 서버가 사용할 포트 범위를 직접 지정하는 것이 좋다.
통신 과정
①
(데이터 포트 질의)클라이언트가 서버의 제어 포트(21)에 접속하고
PASV 명령
을 호출한다. ②
(데이터 포트 생성) 서버가 데이터 포트를 결정
하고 클라이언트에게 해당 포트를 알려준다. ③
(데이터 채널 접속)클라이언트는 전달받은 서버의 포트 번호로 접속하여
클라이언트가 서버에서 데이터를 가져온다.
➽ 예시
Active와 마찬가지로 서로 포트를 교환한다.
서버의 제어 포트(21)에서 해당 클라이언트의 요청을 수락하고
서버의 제어 포트(21)에서 해당 클라이언트의 요청을 수락하고
제어 포트(21)
는 클라이언트의 제어 포트(5000) 서버 측의 데이터 포트(1024~65535)
는 클라이언트의 데이터 포트(5001)와 연결한다.
위 내용을 표로 정리하면 다음과 같다.
포트 | Active | Passive |
클라이언트 제어 포트 | 랜덤 | |
클라이언트 데이터 포트 | 클라이언트 제어 포트 + 1 | |
서버 제어포트 | 21 | |
서버 데이터 포트 | 20 | 랜덤 |
통신 기록 캡처
다음 사진은 특정 FTP 서버에 로그인하여 PASV(Passive) 모드를 통해 파일을 다운받은 기록이다.
[FTP 로그인]
[Wireshark 캡처]
➽ 패킷 해석
1 FTP 접속 문구
2~5 로그인
16-17 Passive 모드 설정
18 파일 복사
19 데이터 연결 - 파일 상태 양호
20 데이터 연결 닫힘 - 파일 전송 완료
21-22 로그아웃
2~5 로그인
16-17 Passive 모드 설정
18 파일 복사
19 데이터 연결 - 파일 상태 양호
20 데이터 연결 닫힘 - 파일 전송 완료
21-22 로그아웃
17번 패킷
에 Entering Passive Mode 인자에는 ip 주소와 연결될 포트번호
가 들어간다.예를 들어 Entering Passive Mode (10.10.10.15,8,126) 이면
ip
- 10.10.10.15
, port
- (8 * 256 + 126) = 2174
가 된다.ி FTP 명령어
cd
- remote 시스템의 디렉토리를 변경한다.(cd 디렉토리명) ascii
- 전송 모드를 ascii 모드로 설정한다. binary
- 전송 모드를 binary 모드로 설정한다. bye
- ftp 접속을 종료 후 빠져나간다. cdup
- remote 시스템에서 한 단계 상위 디렉토리로 이동한다. chmod
- remote 시스템의 파일 퍼미션을 변경한다.(chmod 755 index.html) CWD
- 디렉토리를 변경한다. delete
- remote 시스템의 파일을 삭제한다.(delete index.old) dir
- remote 시스템의 디렉토리 내용을 디스플레이한다. DIRS
- 디렉토리 목록과 관련된 모든 명령 disconnect
- ftp 접속을 종료한다. exit
- ftp 접속을 종료하고 빠져나간다. get
- 지정된 파일하나를 가져온다.(get index.html) hash
- 파일전송 도중에 "#"표시를 하여 전송중임을 나타낸다. help
- ftp 명령어 도움말을 볼 수 있다. lcd
- local 시스템의 디렉토리를 변경한다. ls
- remote 시스템의 디렉토리 내용을 디스플레이한다. LOGIN
- 서버에 연결하거나 로그인을 제한할 경우 mdelete
- 여러 개의 파일을 한꺼번에 지울 때 사용한다. ( mdelete *.old) mget
- 여러 개의 파일을 한꺼번에 가져오려할 때 사용한다. ( mget *.gz) MKD
- 새로운 디렉토리를 만들 경우 mput
- 한꺼번에 여러 개의 파일을 remote 시스템에 올린다. (mput *.html) open
- ftp접속을 시도한다. (open 168.126.72.51또는 open ftp.kornet.net) prompt
- 파일전송시에 확인과정을 거친다. on/off 토글 put
- 하나의 파일을 remote 시스템에 올린다. (put index.html) pwd
- remote 시스템의 현재 작업 디렉토리를 표시한다. quit
- ftp 접속을 종료하고 빠져나간다. READ
- 파일 읽기와 관련된 모든 FTP 명령 rstatus
- remote 시스템의 상황 (version, 어디서, 접속ID등)을 표시한다. rename
- remote 시스템의 파일명을 바꾼다. (remote 현재파일명 바꿀파일명) RETR
- 서버에서 클라이언트로 파일을 전송할 경우 rmdir
- remote 시스템의 디렉토리를 삭제한다. (rmdir 디렉토리명) RMD
- 디렉토리를 삭제할 경우 RNFR,RNTO
- 디렉토리의 이름을 바꿀 경우 size
- remote 시스템에 있는 파일의 크기를 byte단위로 표시한다. (size index.html) status
- 현재 연결된 ftp 세션 모드에 대한 설정을 보여준다. STOR
- 클라이언트에서 서버로 파일을 전송할 경우 type
- 전송 모드를 설정한다. WRITE
- 파일 또는 디렉토리 쓰기, 생성, 삭제와 관련된 FTP 명령 bell
- 명령어 완료 시 벨소리를 나게 한다. literal argument [...]
- 임의의 ftp 명령어를 보낸다.➽ 참고 자료
반응형
'네트워크' 카테고리의 다른 글
GRE 터널링 구성하기 (0) | 2020.04.05 |
---|---|
메일 송수신 및 보안 프로토콜 - SMTP, POP3, IMAP4, PGP, PEM, S/MIME (0) | 2019.10.15 |
네트워크 접근 제어 NAC(Network Access Control) (2) | 2019.10.10 |
침입 탐지/차단 시스템(IDS/IPS) (0) | 2019.10.09 |
ipsec(Internet Protocol Security) (0) | 2019.09.30 |