FTP 프로토콜을 이용한 파일 전송의 가장 큰 단점 중 하나는 전송되는 데이터를 보호하거나 암호화하는 기능이 없다는 점입니다. FTP 서버에 접속할 때 사용자 이름과 비밀번호마저 평문(일반 텍스트)으로 전송되기 때문에, 특히 공용 네트워크를 통해 데이터를 주고받을 때는 FTPS나 SFTP 같은 더 안전한 프로토콜을 사용하는 것이 좋습니다. 이번 글에서는 Windows Server 2012 R2에서 FTPS 서버를 구성하는 방법을 단계별로 살펴보겠습니다.
FTPS 프로토콜이란?
FTPS(FTP over SSL/TLS, FTP+SSL)는 표준 FTP 프로토콜의 확장 형태로, 클라이언트와 서버 간 연결을 SSL/TLS로 보호(암호화)합니다. 일반적으로 기존과 동일하게 21번 포트를 사용하여 접속합니다.
참고: FTPS와 SFTP(Secure FTP 또는 SSH FTP)는 혼동해서는 안 됩니다. SFTP는 SSH 프로토콜의 확장으로, FTP와는 아무런 관련이 없습니다.
FTP over SSL 기능은 IIS 7.0(Windows Server 2008)부터 지원되기 시작했습니다. FTPS 서버가 정상적으로 동작하려면 IIS 서버에 SSL 인증서가 설치되어 있어야 합니다.
FTP 서버 역할 설치하기
Windows Server 2012에서 FTP 서버 역할(Role) 설치는 어렵지 않으며, 서버 관리자(Server Manager)의 '역할 및 기능 추가' 마법사를 통해 손쉽게 진행할 수 있습니다. 이미 FTP 역할이 설치되어 있다면 이 단계는 건너뛰어도 됩니다.
IIS에서 SSL 인증서 생성 및 설치하기
IIS 관리자(IIS Manager) 콘솔을 열고 서버를 선택한 뒤, 서버 인증서(Server Certificates) 섹션으로 이동합니다.
이 화면에서는 인증서 가져오기, 인증서 요청 만들기, 인증서 갱신, 그리고 자체 서명(self-signed) 인증서 생성 등의 작업을 수행할 수 있습니다. 여기서는 실습 목적으로 자체 서명 인증서를 생성해 보겠습니다. (PowerShell의 New-SelfSignedCertificate cmdlet을 사용해서 만들 수도 있습니다.) 자체 서명 인증서는 신뢰할 수 없는 CA가 발급한 것으로 간주되어 접속 시 경고가 표시됩니다. 이 경고를 제거하려면 GPO(그룹 정책)를 사용해 해당 인증서를 신뢰할 수 있는 인증서 목록에 추가하면 됩니다.
Create Self-Signed Certificate(자체 서명 인증서 만들기)를 선택합니다.
인증서 생성 마법사에서 인증서 이름을 지정하고, 인증서 유형은 Web Hosting을 선택합니다.
생성이 완료되면 새로운 자체 서명 인증서가 사용 가능한 인증서 목록에 나타납니다. 자체 서명 인증서의 유효 기간은 1년입니다.
SSL을 지원하는 FTP 사이트 만들기
다음으로 FTP 사이트를 생성합니다. IIS 관리자 콘솔에서 Sites를 마우스 오른쪽 버튼으로 클릭하고 새 FTP 사이트를 추가합니다(Add FTP Site).
사이트 이름과 FTP 사이트 루트 디렉터리 경로를 지정합니다. 여기서는 기본 경로인 C:\inetpub\ftproot를 사용합니다.
마법사의 다음 창에서 앞서 생성한 SSL 인증서를 선택합니다.
이제 인증 방식(Authentication)과 사용자 액세스 권한만 선택하면 됩니다.
팁: 사용자마다 독립적인 FTP 루트 폴더를 할당해야 하는 경우에는 '사용자 격리(User Isolation)' 기능을 활용한 FTP 서버 구성 가이드를 참고하세요.
마법사에서 Finish를 클릭하여 마칩니다. 기본 설정에서는 SSL 보호가 필수로 적용되며, 제어 명령과 전송 데이터 모두 암호화됩니다.
FTPS와 방화벽 설정
FTP 프로토콜은 두 개의 개별 TCP 연결을 사용합니다. 하나는 명령 전송용, 다른 하나는 데이터 전송용입니다. 데이터 채널마다 별도의 TCP 포트가 열리며, 포트 번호는 클라이언트 또는 서버가 선택합니다. 대부분의 방화벽은 FTP 트래픽 검사(inspection) 기능을 제공하여, 트래픽을 분석한 후 필요한 포트를 자동으로 열어줍니다. 하지만 FTPS처럼 암호화된 연결에서는 데이터가 암호화되어 분석할 수 없으므로, 방화벽이 어떤 포트를 열어야 하는지 판단할 수 없게 됩니다.
FTPS 서버에 대해 TCP 1024~65535 전체 포트 범위를 외부에 개방하지 않으려면, FTP 서버에서 사용할 포트 범위를 직접 지정할 수 있습니다. 이 범위는 IIS 사이트 설정의 FTP 방화벽 지원(FTP Firewall Support) 섹션에서 지정합니다.
포트 범위를 변경한 후에는 서비스를 재시작해야 합니다(iisreset 명령 실행).
Windows 방화벽에서 FTPS 관련 수신 트래픽을 담당하는 규칙은 다음과 같습니다.
- FTP Server (FTP Traffic-In)
- FTP Server Passive (FTP Passive Traffic-In)
- FTP Server Secure (FTP SSL Traffic-In)
따라서 외부 방화벽에서는 21번, 990번 포트와 함께 지정한 데이터 포트 범위(예: 50000~50100)를 열어두어야 합니다.
FTP over SSL(FTPS) 연결 테스트하기
구성한 FTPS 연결을 테스트하기 위해 FileZilla 클라이언트를 사용해 보겠습니다.
- FileZilla(또는 FTPS를 지원하는 다른 클라이언트)를 실행합니다.
- File > Site Manager를 클릭하고 새 연결(New Site)을 생성합니다.
- FTPS 서버 주소(Host), 프로토콜 유형(Require explicit FTP over TLS), 사용자 이름(User)을 입력하고, 비밀번호 인증 방식은 Ask for password로 설정합니다.
- Connect를 클릭하고 비밀번호를 입력합니다.
- 자체 서명 인증서를 사용한 경우 신뢰할 수 없는 인증서에 대한 경고가 표시됩니다. 확인 후 연결을 승인합니다.
- 연결이 성공적으로 수립되면 로그에 다음과 같은 항목이 표시됩니다.
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established. - 이 메시지가 보이면 보안 연결이 정상적으로 수립된 것이며, FTPS 프로토콜을 통해 안전하게 파일을 전송할 수 있습니다.