파일 전송 프로토콜(FTP)은 데이터를 전송하는 데 널리 사용되는 방법 중 하나이며, 다양한 상황에서 활용될 수 있습니다.
FTP에는 FTPS와 SFTP라는 보안 강화 버전이 존재하며, 이들은 작동 방식에 있어 약간의 차이점을 가지고 있습니다. 이러한 차이점은 데이터 교환 방식, 보안 수준, 통신 유형, 그리고 방화벽 설정과 관련되어 있습니다.
이러한 프로토콜들의 작동 원리와 주요 전송 방식 간의 차이점을 이해하는 것은 사용자의 요구 사항에 가장 적합한 프로토콜을 선택하는 데 도움을 줄 것입니다.
FTP
FTP는 RFC 114에서 처음 제안된 오래된 파일 전송 프로토콜로, 시간이 지나면서 RFC 959로 발전하여 오늘날의 표준이 되었습니다.
FTP는 데이터 교환을 위해 두 개의 채널을 사용합니다. 하나는 명령을 위한 채널이고, 다른 하나는 데이터를 위한 채널입니다. FTP가 정상적으로 작동하려면 이 두 채널에 각각 포트가 필요합니다.
명령 채널은 포트 21에서 작동하며, 클라이언트 연결을 수락하고 명령 전달을 처리합니다. 이 채널은 클라이언트가 QUIT 명령을 보내거나 서버가 연결을 강제로 종료할 때까지 열려 있습니다.
데이터 채널은 서버(수동 모드) 또는 클라이언트(능동 모드)에서 동적으로 할당된 임시 포트를 사용합니다. 이 채널은 디렉토리 목록이나 파일 전송 형태로 서버와 클라이언트 간에 실제 데이터를 공유하는 역할을 합니다.
명령 채널과는 달리, 데이터 채널은 파일 전송이 진행되는 동안만 열려 있으며, 완료되는 즉시 닫힙니다. 여러 파일이나 디렉토리 목록을 동시에 전송하려면 여러 개의 데이터 채널 포트가 필요합니다.

FTP는 명령 채널과 데이터 채널 모두 암호화되지 않은 형태로 정보를 전송하기 때문에 본질적으로 보안에 취약합니다. 이는 메시지 가로채기 공격에 쉽게 노출될 수 있다는 것을 의미합니다.
FTP는 명령 채널의 경우 서버 측에서 포트 21/tcp에 대한 인바운드 연결을 요구합니다. 수동 모드 포트 범위는 파일 전송 및 디렉토리 목록에 사용되며, 인바운드 연결을 허용합니다. 이 정의 과정은 사용 중인 FTP 서버에 따라 달라질 수 있으며, 자세한 내용은 해당 설명서를 참조해야 합니다. 클라이언트 측에서는 서버에 정의된 수동 포트 범위와 함께 포트 21/tcp에 대한 아웃바운드 연결이 허용되어야 합니다.
FTP 인증 방식
FTP 인증 정보는 초기 연결 설정 시 명령 채널을 통해 전달됩니다. FTP는 사용자 이름과 암호를 사용하여 인증을 하거나, 익명으로 접속하여 누구나 서버에 로그인하고 접근할 수 있도록 허용합니다.
능동 및 수동 FTP 모드
FTP는 연결 설정을 위해 능동 모드와 수동 모드를 사용합니다.
능동 모드에서 사용자는 FTP 클라이언트의 임의 포트에서 서버의 FTP 포트 21/tcp로 연결하고, PORT 명령을 보내 서버가 연결해야 하는 클라이언트 포트를 지정합니다. 이 포트는 데이터 채널에 사용됩니다.
그러면 서버는 포트 20/tcp에서 클라이언트가 PORT 명령으로 지정한 클라이언트 포트로 연결합니다. 이 데이터 채널은 서버와 클라이언트 간의 파일 전송에 사용됩니다.
수동 모드에서는 클라이언트가 FTP 클라이언트의 임의 포트에서 서버의 포트 21/tcp로 연결하고 PASV 명령을 보냅니다. 서버는 데이터 채널에 사용해야 하는 임의의 포트로 응답합니다. 그런 다음 클라이언트는 다른 임의의 포트를 사용하여 서버가 응답한 포트에 연결합니다. 이 데이터 채널 연결은 파일 전송에 사용됩니다.
따라서 능동 모드에서는 초기 연결 요청은 클라이언트에서 시작되고 데이터 채널 연결 요청은 서버에서 시작됩니다.
반면 수동 모드에서는 초기 연결 요청과 후속 데이터 채널 요청 모두 클라이언트에서 서버로 시작됩니다. 이 차이점은 방화벽이 인바운드/아웃바운드 연결 방향에 따라 기존 FTP 요청을 허용하거나 차단하는 방식에 영향을 줄 수 있습니다.
FTPS
FTP의 암호화되지 않은 데이터 전송과 중간자 공격(main-in-the-middle) 위험을 감수하더라도, 업계 요구사항에 따라 FTPS 및 SFTP와 같은 보다 안전한 대안을 사용하는 것이 좋습니다.
1990년대 보안 환경 변화에 따라 Netscape는 네트워크를 통한 통신을 보호하기 위해 SSL(Secure Sockets Layer) 프로토콜을 개발했습니다. FTPS(File Transfer Protocol Secure)는 FTP에 SSL이 적용된 형태입니다. FTPS는 일반적으로 포트 990/tcp에서 실행되지만, 포트 21/tcp에서도 사용될 수 있습니다. 데이터 채널 포트의 경우, 989/tcp가 FTPS에 자주 사용되는 포트입니다. 명령 포트가 21/tcp인 경우에는 데이터 포트가 20/tcp로 예상될 수 있습니다.

FTP와 마찬가지로 FTPS도 명령 및 데이터 채널이라는 두 가지 통신 채널을 사용합니다. 데이터 채널을 암호화하거나 명령 채널과 데이터 채널을 모두 암호화하여 보안 수준을 높일 수 있습니다.
FTP와 마찬가지로 FTPS도 명령 및 데이터 채널에 여러 포트를 사용합니다. 초기 연결 및 인증 정보 전송에는 포트 21/tcp를 사용합니다. 이후, 클라이언트의 각 파일 전송이나 디렉토리 목록 요청에 대한 데이터 채널을 설정하기 위해 추가 포트가 필요합니다. 따라서 방화벽에서 허용되는 포트 범위가 필요합니다.
FTPS 인증 방식
FTPS 인증은 암호화를 위한 서버 인증서와 함께 사용자 이름 및 암호를 사용하여 이루어집니다. FTPS 클라이언트가 서버에 연결할 때 서버의 인증서가 신뢰할 수 있는지 확인하고, 이 인증서는 클라이언트와 서버에서 모두 요청할 수 있습니다.
SFTP
FTP 및 FTPS와는 달리, SFTP(SSH 파일 전송 프로토콜)는 SSH(Secure Shell)를 기반으로 한 완전히 다른 프로토콜입니다. SFTP는 기본적으로 SSH와 동일한 포트 22/tcp에서 작동하지만, 서버에서 사용자 정의 포트를 사용하도록 구성할 수도 있습니다.

SFTP는 SSH를 사용하여 파일을 송수신하는 안전한 FTP 프로토콜입니다. SSH로 완전히 암호화된 SFTP는 네트워크를 통해 파일을 전송하는 강력하고 안전한 방법입니다.
FTP 및 FTPS와 달리 SFTP는 단일 통신 채널을 사용하여 명령과 데이터 트래픽을 전송하며, 모든 정보는 초기 인증과 함께 암호화된 형태로 전달됩니다.
SFTP 인증 방식
SFTP에서 인증은 간단한 사용자 이름과 암호를 통해 이루어질 수 있지만, FTP와 달리 인증 정보를 포함한 모든 정보는 네트워크를 통해 암호화되어 전송됩니다.
SFTP는 또한 SSH 키 쌍(개인 키와 공개 키의 조합)을 사용하는 인증을 지원합니다. 클라이언트는 지정된 사용자의 개인 키를 제공하고, 서버는 인증을 성공시키기 위해 해당 공개 키를 가지고 있어야 합니다. 이는 사용자 이름/비밀번호 조합보다 더 안전한 방법입니다. SFTP 서버에서 두 가지 방법이 모두 구성된 경우, 비밀번호와 SSH 키를 모두 사용하여 동일한 사용자를 인증할 수 있습니다.
요약
본 문서에서는 FTP, FTPS, SFTP와 같은 널리 사용되는 다양한 파일 전송 프로토콜의 기본적인 기능들을 요약하고, 이러한 프로토콜들 간의 미묘하고 중요한 차이점을 강조했습니다. 또한 방화벽에서 FTP/FTPS/SFTP 서버를 설정하는 데 필요한 포트를 설명하면서 FTPS 및 SFTP와 같이 더 안전한 프로토콜로 전환해야 할 필요성을 강조했습니다.
여기서 FTP라고 언급한 것은 이 기사에서 논의된 프로토콜들을 통칭하는 의미입니다. FTP라는 이름은 수십 년 동안 사용되어 왔으며, 최신 보안 버전조차도 일반적으로 FTP라고 불리는 경우가 많습니다.
최고의 FTP 서버 소프트웨어 및 FTP/SFTP 클라이언트에 대한 정보도 필요할 수 있습니다.