본문 바로가기
개발 공부

[FTP, SFTP] feat. SSH

by 도됐좋 2023. 6. 1.

 

순서
1. FTP
2. SFTP
3. SSH

✅ FTP(File Transfer Protocol)

- 원격 서버와 파일을 주고 받을 때 사용하는 통신 규약

- 암호화를 하지 않기 때문에 정보 노출 위험🛑

- 전송 제어를 위한 신호를 주고받는 21번 기본 포트(변경 가능)

- 실제 데이터를 주고받는 20번 포트(변경 가능)

- 능동(active) 모드수동(passive) 모드 존재

 

 능동(active) 모드

- 서버가 클라이언트에게 접속하는 모드

- 아래 그림에서 클라이언트 방화벽에 20번 포트가 차단되어 있으면 연결 불가능

  => 서버 20번 포트는 아웃바운드 허용, 클라이언트는 인바운드 허용 설정 필요

 

 수동(passive) 모드

- 클라이언트가 서버에게 접속하는 모드

- 20번 아닌 임의의 포트 사용(1024~65535)

  => 임의의 포트를 사용하기 때문에, 클라이언트는 인바운드 모두 허용 설정이 필요한데,

       서버 측에서 특정 범위의 포트를 지정해주면 어느정도 문제 해결


SFTP(Secure File Transfer Protocol)

- SSH 방식으로 데이터를 암호화하여 통신하는 FTP

- 22번 기본 포트 사용(변경 가능)

 


 SSH(Secure Shell Protocol)

- 공개키, 개인키를 사용하여 안전한 채널을 구성한 뒤 정보를 교환하는 통신 프로토콜

- 데이터 전송(ex. 깃허브)과 원격 제어(ex. AWS) 등을 수행할 때 사용

- 비대칭키를 통해 서버와 사용자를 인증하고, 대칭키를 통해 데이터를 암호화

**비대칭키 방식 : 다른 키값으로 암호화, 복호화 하는 것

**대칭키 방식 : 같은 키값으로 암호화, 복호화 하는 것

**암호화 : 데이터를 암호처럼 만드는 것

**복호화 : 암호화된 데이터를 원래대로 만드는 것

 

서버 인증

① 서버 내부에 공개키, 개인키 생성됨

② 접속을 시도한 클라이언트에게 공개키 전달

③ 클라이언트는 난수값을 생성하고 특정 해시함수로 난수값에 대한 해시값을 생성

④ 클라이언트가 전달받은 공개키로 난수값을 암호화하여 서버에게 전달

⑤ 서버는 가지고 있던 개인키로 복호화하여 원래 난수값 확인 

⑥ 서버가 동일한 해시함수로 난수값에 대한 해시값 생성하고 클라이언트에게 전달

클라이언트는 자신의 해시값과 서버의 해시값을 비교하여 서버 인증 마무리

**사용자 인증은 클라이언트와 서버의 역할을 바꿔서 똑같이 수행

 

데이터 암호화

- 인증 과정에서 생성한 대칭키(=세션키)를 이용하여 데이터를 암호화, 복호화하며 통신

- 통신(SSH 세션)이 종료되면 대칭키 폐기하고, 접속할 때마다 새로운 대칭키 생성