1 개요
파일 전송 프로토콜(File Transfer Protocol)의 약자로 TCP/IP 네트워크 상에서 컴퓨터들이 파일을 교환하기 위해 1971년에 최초로 공개된 통신 규약이다. 네트워크에 연결된 컴퓨터끼리 데이터를 원활하게 교환하기 위한 목적으로 개발되었다. 파생형으로 TLS 프로토콜과 결합한 FTPS, SSH 프로토콜과 결합한 SFTP가 있다. FTP와 FTPS는 보통 제어용으로 21번 포트 및 데이터 전송용으로 20번 포트를, SFTP는 보통 22번 포트를 쓰며 FTPS와 SFTP는 보안 전송이라는 특성 상 FTP보다 파일 전송 속도가 느린 편.
네트워크에서 사용하는 프로토콜 중에서는 드물게 제어 채널과 전송 채널이 분리되어 있다. 쉽게 설명하면 전화기 한 대와 팩스 한 대를 가지고 전화기로는 지금 가지고 있는 자료에 대해서 물어보고, 필요한 자료를 요청하면 팩스로 열심히 자료를 전송 받는 형태이다.
FTP를 사용하여 데이터를 주고받기 위해서는 FTP 서버와 FTP 클라이언트가 필요하다. 원래 데이터 교환을 목적으로 개발된 것이기 때문에 안정성과 신뢰성이 보장된다. 그렇기에 회사나 동아리 같은 곳에서 FTP 서버 하나 구축해두면 자료를 공유할 때 상당히 유용한 물건이 된다. 하지만 국내의 경우에는 자료를 공유하기 위한 대체재들이 많다 보니 있으면 유용하지만 없어도 그만인 수준.
많은 FTP 클라이언트들이 휘황찬란한 GUI 환경을 제공하지만, 본래는 아래 그림과 같이 명령어 입력 방식이다. GUI 환경에서 작동하는 FTP 클라이언트들은 단지 명령어들을 자동으로 전송해 주는 것 뿐이다.
이런 형태의 FTP 클라이언트는 GUI를 사용하지 못하는 환경에서 아직도 매우 널리 사용된다. 특히 유닉스 계열 서버를 관리하는 관리자들은 telnet/SSH와 함께 필수로 익혀야 하는 기능이다.
많은 사람들이 잘 모르는 사실이지만, 웹 브라우저도 FTP를 지원한다. 위의 명령어 입력 방식이 어려울 경우에는 이 방법을 써도 된다. 인터넷 주소창에서 http:// 대신 ftp:// 를 붙이고 FTP 서버 주소를 치면 ID와 비밀번호를 묻는 화면이 뜨고, 그걸 치고 들어가면 브라우저 화면에 FTP 서버의 파일 목록이 링크 형태로 주르륵 뜬다. 이것은 대용량 파일 전송은 웹에서 사용하는 HTTP 프로토콜보다는 파일 전송용으로 나온 FTP 프로토콜이 유리한 점이 많기 때문에 지원하는 것.
1990년대에는 대부분의 소프트웨어 업체나 게임 업체 등이 별도의 FTP 서버를 구축하고 익명접속을 허용한 후에 자신들이 개발한 프로그램의 셰어웨어나 데모 버전, 패치 등을 공개하곤 하였다. 사실 그 시절에는 지금처럼 인터넷이 발달한 것이 아니었기에 FTP 말고는 불특정 다수에게 효과적으로 자료를 배포할 수 있는 방법이 거의 없었다. 다만 현재는 자사 웹사이트에 공개하는 게 여러 모로 이득[1]이고, 패치같은 것은 프로그램 내에 패치 업데이트용 프로그램을 내장시키는 추세라서 홍보에 그리 열성적이지 않다.
여담으로 위에 첨부된 그림은 블리자드의 FTP 서버에 접속한 그림이다. 한 번 접속해보고 싶은 분들은 자신이 사용하는 프로그램에 다음과 같이 입력하면 된다.
FTP 주소 : ftp.blizzard.com
아이디 : anonymous
비밀번호 : 당신의 이메일 주소
현재는 접속할 수 없는 듯 하다. ping에도 응답하지 않는 듯.
[2]
외국의 다른 게임 회사들 대부분은 비슷한 방식으로 FTP 서버를 운용하는 곳이 있고 간혹 예전에 발매했던 추억의 게임들을 FTP에서 무료로 받을 수 있는 경우도 있는 경우도 있으니 찾아보는 것도 나쁘지는 않다.
리눅스 배포판과 각종 리눅스의 중요 오픈소스 소프트웨어들은 FTP로 배포되는 경우가 많다. 각종 리눅스 저장소도 FTP로 운영되고, 유명 배포판의 경우에는 전 세계에 저장소 미러링 FTP 서버를 운영하는 경우가 많다. 한국에서는 카이스트, Daum, 네오위즈에서 운영하는 FTP 서버가 유명하다.
아래는 FTP 클라이언트 프로그램 목록
- WS_FTP
- Cute FTP
- 알드라이브 - 널리 사용되지만 어딘가 문제가 많다.
- Sunshine(앱) - PC와 스마트폰, 타블릿의 FTP를 설정해서 파일을 전송하는 앱.
- FileZilla - 오픈소스 FTP 클라이언트.
- Windows 탐색기 - 보통 로컬 파일 열람을 위해 사용되는 프로그램이지만 주소줄에 FTP 주소를 입력하면 FTP 클라이언트처럼 사용이 가능하다. 단 기능은 허접하다. 따로 설치된 클라이언트가 없을 때 잠깐잠깐 사용할 용도로는 좋다.
- Xftp
2 프로토콜
FTP는 제어 포트와 데이터 포트 두 개를 연결한다. 제어 포트로 ‘파일을 보내라’ 라고 하면, 데이터 포트로 파일을 전송하는 식. 원격 호스트에 연결 시 액티브 모드와 패시브 모드 두 가지 중 선택해서 사용하는데, 데이터 연결 방식이 조금 다르다.
- 액티브 모드
- 클라이언트는 임의의 N번 포트로 서버의 제어 포트인 21번 포트에 TCP 제어 연결을 생성한다.
- 데이터를 받을 필요가 생기면 클라이언트는 서버의 제어 포트로 PORT M 명령을 보낸다.
- 서버의 데이터 포트인 20번 포트에서 클라이언트의 M번 포트로 접속하여 데이터를 송신한다.
- 패시브 모드
- 클라이언트는 임의의 N번 포트로 서버의 제어 포트인 21번 포트에 TCP 제어 연결을 생성한다.
- 데이터를 받을 필요가 생기면 클라이언트는 서버의 제어 포트로 PASV 명령을 보낸다.
- 서버가 적절한 포트 번호 M을 송신한다.
- 클라이언트는 임의의 N번 포트로 서버의 M번 포트에 접속해 데이터를 수신한다.
액티브 모드는 서버에서 클라이언트에 접속하는 특성 상 클라이언트 쪽에서 NAT나 방화벽을 사용하면 서버에서 접속할 수 없다. 이런 상황에서는 패시브 모드를 사용해야 한다. 서버에서 열 수 있는 포트 수는 한정되어 있기 때문에, 사용 가능한 포트가 다 차면 더 이상 새로운 사용자를 받을 수 없다.
3 보안
- FTP가 보안에 취약하다는 인식이 많다. telnet이 보안에 취약한 이유와 일맥상통한다. 암호화를 하지 않기 때문에 사용자 인증정보가 노출되기 때문인데, SFTP, FTPS 등을 놔두고 굳이 FTP를 쓰며 보안을 걱정할 이유가 없다.
- 하지만 그 이외의 이유로도 FTP 서버는 꼼꼼한 주의를 요한다. 왜냐하면 ...
- FTP 프로토콜의 취약점
- FTP에는 PORT라는 명령어가 있는데, 서버의 전송 대상과 포트를 지정할 수 있다. 게다가 전송 대상의 적합성을 검사하는 부분이 프로토콜에는 누락되어 있다. 따라서 만약 FTP 서버와 다른 시스템 사이에 논리적인 망 분리가 되어있지 않다면 FTP 서버를 경유하는 것이 가능하다. 예를 들어, 인터넷과 내부망 사이에 포트 스캔을 탐지하는 방화벽이 설치되어 있다고 해도, FTP 서버가 포트 스캔을 하게 할 수 있다는 얘기. 물론 훨씬 사악한 공격들도 가능하다.
- 익명 FTP 서비스
- 익명 FTP는 접속시 인증 정보를 요구하지 않는 서버이다. 대개 배포용 서버로 많이 쓰인다. 그런데 익명 사용자에게 쓰기 권한이 있다면 업로드한 파일이 변조될 수 있다. 따라서 적절한 디렉터리 권한 설정을 해 주어야 한다. 이걸 까먹고 FTP 서버를 켜는 것은 관리자 문제이다.
- 배너 정보
- FTP 서비스에 붙으면 서버에서 구동 중인 FTP 서버의 버전명 등을 보여준다. FTP 서버의 특정 버전에서 발견된 취약점이 있으면 이 정보를 사용해서 공격할 수 있지만, 취약점이 있는 서버 버전을 업그레이드하는 대신 정보를 숨기는 사람이 있다는 게 문제다.