FTP


개요

FTP는 인터넷 초창기부터 사용되어 온 가장 오래된 프로토콜 중 하나이다. 주로 사용자가 원격 서버에 파일을 올리거나(업로드), 서버에서 파일을 내려받거나(다운로드), 서버 내 파일 목록을 조회하고 파일을 삭제하는 등 기본적인 파일 관리 작업을 수행할 수 있도록 설계되었다. 이는 1985년에 RFC 959로 표준화되었다.

FTP는 사용 편의성과 광범위한 지원 덕분에 웹 호스팅 환경에서 웹 페이지나 이미지 파일을 서버에 배포하는 등 다양한 용도로 사용되어 왔으나, 근본적인 보안 취약점으로 인해 최근에는 보안이 강화된 다른 프로토콜들로 대체되는 추세이다.

동작 방식

FTP는 제어 연결(Control Connection)과 데이터 연결(Data Connection)이라는 두 개의 별도 TCP 연결을 사용하여 파일을 전송한다.

  • 제어 연결: 일반적으로 TCP 포트 21번을 사용한다. 클라이언트와 서버 간의 명령(예: 사용자 인증, 파일 목록 요청, 파일 전송 시작 명령 등) 및 응답을 교환하는 데 사용되며, 연결이 세션이 유지되는 동안 계속 열려 있다.
  • 데이터 연결: 파일 데이터 자체를 전송하는 데 사용된다. 이 연결은 파일 전송이 시작될 때 설정되고 전송이 완료되면 종료된다. 데이터 연결 설정 방식에 따라 액티브 모드와 패시브 모드로 나뉜다.
    • 액티브 모드 (Active Mode): 클라이언트가 서버에게 데이터 연결을 열라고 요청하면, 서버가 클라이언트의 특정 포트(대부분 클라이언트 포트 +1 또는 동적 포트)로 연결을 시도한다. 이 모드는 클라이언트 측에 방화벽이 있을 경우 서버가 클라이언트에 대한 연결을 시작하지 못해 문제가 될 수 있다.
    • 패시브 모드 (Passive Mode): 클라이언트가 서버에게 데이터 연결을 위한 포트 번호를 알려달라고 요청하고, 서버가 지정한 포트로 클라이언트가 직접 연결을 시도한다. 대부분의 현대 클라이언트는 방화벽 문제를 피하기 위해 패시브 모드를 사용한다.

이러한 분리된 연결 방식은 제어 정보와 데이터 전송이 서로 독립적으로 이루어지게 하여 효율성을 높인다.

특징 및 단점

특징

  • 간편성: 구현이 비교적 간단하고, 파일 전송이라는 명확한 목적에 충실하다.
  • 익명 FTP (Anonymous FTP): 일부 서버에서는 사용자 이름과 비밀번호 없이 익명으로 접속하여 공개된 파일을 다운로드할 수 있도록 허용한다. 일반적으로 사용자 이름으로 anonymous를 사용하고, 비밀번호는 이메일 주소 등을 입력한다.
  • 다양한 파일 형식 지원: ASCII 모드(텍스트 파일), 바이너리 모드(실행 파일, 이미지 등)를 지원하여 다양한 종류의 파일을 전송할 수 있다.

단점

  • 보안 취약점: FTP의 가장 치명적인 단점은 암호화를 지원하지 않는다는 점이다. 사용자 이름, 비밀번호, 그리고 전송되는 모든 파일 데이터가 네트워크 상에서 평문(plain text)으로 전송되므로, 스니핑(sniffing) 공격 등에 매우 취약하다. 이로 인해 민감한 정보를 전송하는 데는 적합하지 않다.
  • 방화벽 및 NAT 문제: 액티브 모드는 클라이언트 측 방화벽이나 네트워크 주소 변환(NAT) 환경에서 데이터 연결 설정에 어려움을 겪을 수 있다.
  • 두 개의 포트 사용: 제어와 데이터를 위해 별도의 연결 및 포트를 사용하므로, 네트워크 구성 및 관리가 다소 복잡할 수 있다.

보안 문제 및 대안

FTP의 심각한 보안 문제로 인해, 현재는 보안이 중요한 환경에서는 다음과 같은 대안 프로토콜들이 널리 사용된다.

  • FTPS (FTP Secure): FTP 프로토콜에 SSL/TLS(Secure Sockets Layer/Transport Layer Security) 암호화를 추가한 것이다. 제어 연결 및/또는 데이터 연결을 암호화할 수 있으며, 기존 FTP 서버에 SSL/TLS 기능을 추가하여 구현된다.
  • SFTP (SSH File Transfer Protocol): FTP와는 완전히 다른 프로토콜로, SSH(Secure Shell) 프로토콜을 기반으로 파일 전송 기능을 제공한다. 모든 통신이 암호화되며, 단일 연결(일반적으로 SSH 포트 22번)로 제어와 데이터를 모두 처리한다. 보안이 매우 우수하여 널리 사용된다.
  • SCP (Secure Copy Protocol): 역시 SSH를 기반으로 하며, 파일을 안전하게 복사하는 데 주로 사용된다. SFTP보다 더 간단한 기능만을 제공한다.
  • HTTP/HTTPS 기반 업로드/다운로드: 웹 브라우저를 통한 파일 업로드/다운로드 방식도 널리 사용되며, 특히 HTTPS를 통해 암호화된 통신을 제공한다. 클라우드 스토리지 서비스 등에서 일반적인 파일 전송 방식으로 활용된다.

용도

오늘날 FTP는 보안상의 이유로 그 사용이 많이 줄었지만, 여전히 특정 환경에서는 유용하게 사용된다.

  • 웹 호스팅: 웹사이트 개발자가 서버에 웹 페이지 파일, 이미지 등을 업로드할 때 많이 사용된다. 그러나 중요한 정보가 포함된 파일 전송 시에는 FTPS나 SFTP가 권장된다.
  • 레거시 시스템: 오래된 시스템이나 특정 장비에서 파일을 전송하는 데 여전히 사용될 수 있다.
  • 대규모 파일 배포: 익명 FTP 서버를 통해 공개적으로 대용량 파일을 배포하는 데 사용되기도 했으나, 현재는 CDN(콘텐츠 전송 네트워크)이나 클라우드 스토리지 서비스로 대체되는 추세이다.
  • 임베디드 시스템: 자원 제약이 있는 임베디드 장치에서 간단한 파일 전송을 위해 FTP 클라이언트/서버 기능이 내장되는 경우가 있다.
둘러보기

더 찾아볼 만한 주제