Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

FTP 프로토콜은 무려 40년이 넘은 역사를 가진 오래된 프로토콜이지만, 간단한 파일 전송만 필요한 환경에서는 지금도 폭넓게 사용되고 있습니다. Microsoft 운영체제라면 어떤 버전에서든 FTP 서버를 설치할 수 있으며, FTP 서비스의 마지막 대대적인 개편은 Windows 7 / Server 2008 R2에서 이루어졌습니다(사실상 서비스 코드가 처음부터 새로 작성되었습니다). 이를 통해 서비스 보안성이 크게 향상되었고 다양한 신규 기능이 추가되었습니다. 그중 대표적인 기능이 바로 FTP 사용자 격리(FTP User Isolation)입니다. 이 기능을 사용하면 하나의 FTP 서버에서 여러 사용자가 각자 자신의 폴더에만 접근하도록 제한할 수 있습니다.

FTP 사용자 격리란 무엇인가?

사용자 격리가 적용되면 각 사용자는 자신의 폴더에서만 작업할 수 있고, FTP 디렉터리 트리의 상위로 이동할 수 없습니다(사용자에게는 자신의 최상위 FTP 디렉터리가 FTP 서버의 루트로 표시됩니다). 따라서 FTP 서버에 저장된 다른 사용자의 데이터에 접근하는 것을 원천적으로 차단할 수 있습니다. 이러한 특성 덕분에 FTP 사용자 격리는 ISP나 호스팅 업체가 하나의 파일 스토리지에 대해 사용자별 개별 접근 권한을 제공해야 할 때 널리 활용됩니다.

이전 버전의 Windows와 마찬가지로 Windows Server 2016 / 2012 R2의 FTP 서비스(sFTP나 TFTP와 혼동하지 마세요)는 IIS 서비스에 깊이 통합되어 있으며, 하나의 통합 관리 콘솔을 통해 관리할 수 있습니다.

이 글에서는 Windows Server 2016/2012 R2에 IIS 기반 FTP 서버를 설치하고 FTP 사용자 격리를 구성하는 방법을 단계별로 살펴보겠습니다(Windows 10 및 8.1에도 동일하게 적용됩니다).

Windows Server 2016/2012 R2에 FTP 서버 역할 설치하기

서버 관리자(Server Manager) 콘솔을 열고 웹 서버(IIS) → FTP 서버 섹션에서 FTP ServiceFTP Extensibility 옵션을 체크하면 FTP 서비스를 설치할 수 있습니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

또는 PowerShell 명령 한 줄로 FTP 서버 역할을 설치할 수도 있습니다.
Install-WindowsFeature Web-FTP-Server
Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

FTP 서버 관리 콘솔까지 함께 설치하려면 아래 명령을 실행하세요.

Install-WindowsFeature -Name "Web-Mgmt-Console"

FTP 사이트 생성 및 사용자 권한 관리

서버 관리자를 실행하고 IIS 관리 콘솔(Internet Information Services Manager)을 엽니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

새 FTP 사이트를 생성합니다(Sites → Add FTP Site).

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

  • FTP 사이트 이름: MyTestSite
  • FTP 사이트 루트 디렉터리: C:\inetpub\ftproot

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

네트워크를 통해 전송되는 FTP 데이터를 보호하려면 FTP에 SSL을 적용할 수 있습니다(이 경우 세션 중에 FTP 사용자가 전송하는 모든 데이터와 계정·비밀번호가 암호화됩니다). 다만 본 예제에서는 SSL 설정이 필수적이지 않으므로 생략하고 나머지 설정은 기본값으로 유지합니다.

PowerShell의 WebAdministration 모듈을 사용해서도 FTP 사이트를 관리할 수 있습니다. 예를 들어 새 FTP 사이트를 만들려면 다음 명령을 실행하면 됩니다.

Import-Module WebAdministration
# FTP 사이트 이름 지정
$FTPSiteName = 'CORP_FTP'
# FTP 폴더
$FTPRoot = 'D:\www\FTPRoot'
# FTP 포트
$FTPPort = 21
New-WebFtpSite -Name $FTPSiteName -PhysicalPath $FTPRoot -Port $FTPPort

새로 만든 FTP 사이트를 선택한 후 FTP Authentication 섹션에서 익명 인증(Anonymous Authentication)을 비활성화하고, 기본 인증(Basic Authentication)은 반드시 활성화합니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

Windows Server 2016/2012 R2의 FTP 서비스는 도메인 계정과 로컬 계정 두 가지 유형을 사용할 수 있습니다. 계정 유형에 따라 FTP 디렉터리 구조와 사용자 격리 설정에 차이가 있으므로, 설명의 편의를 위해 여기서는 로컬 Windows 계정을 사용하겠습니다.

먼저 FTP 사용자를 몇 명 생성합니다. 예를 들어 ftp_user1, ftp_user2, ftp_user3 세 명을 만들고, 이들을 포함하는 ftp_users 그룹을 생성합니다. 로컬 사용자는 컴퓨터 관리(Computer Management) 콘솔의 로컬 사용자 및 그룹 섹션에서 만들 수 있습니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

명령 프롬프트나 PowerShell을 통해서도 로컬 사용자와 그룹을 생성할 수 있습니다. 먼저 로컬 그룹을 만듭니다.
net localgroup ftp_users /add
Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

새 로컬 사용자를 생성합니다.
net user ftp_user1 /add *
Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

생성한 사용자를 그룹에 추가합니다.
net localgroup ftp_users ftp_user1 /add
Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

나머지 두 사용자도 같은 방식으로 생성합니다.

그다음 C:\inetpub\ftproot 디렉터리에 대해 ftp_users 그룹에 읽기 및 쓰기 권한을 부여합니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

C:\inetpub\ftproot 폴더 안에 반드시 LocalUser라는 이름의 디렉터리를 생성합니다(이름이 정확히 일치해야 합니다. 매우 중요합니다!!!). 그런 다음 C:\inetpub\ftproot\LocalUser 하위에 ftp_user1, ftp_user2, ftp_user3라는 이름의 디렉터리를 각각 만듭니다.

참고. 계정 유형에 따라 다음과 같은 디렉터리 구조를 만들어야 합니다(%FtpRoot%는 FTP 사이트의 루트를 의미하며, 본 예제에서는 C:\inetpub\ftproot\입니다).

계정 유형홈 디렉터리 명명 규칙
익명 사용자%FtpRoot%\LocalUser\Public
로컬 Windows 계정%FtpRoot%\LocalUser\%UserName%
도메인 Windows 계정%FtpRoot%\%UserDomain%\%UserName%
특수 IIS 관리자 또는 ASP.NET 계정%FtpRoot%\LocalUser\%UserName%

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

IIS 콘솔로 돌아가 사이트의 FTP Authorization Rules 섹션에서 새 규칙(Add AllowRules)을 생성합니다. ftp_users 그룹에 읽기 및 쓰기 권한을 허용하도록 지정합니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

Windows Server 2016/2012 R2에서 FTP 사용자 격리 구성하기

이제 FTP 사용자 격리를 구성해 보겠습니다. 사용자 격리는 서버 전체가 아니라 FTP 사이트 수준에서 설정한다는 점에 유의하세요. FTP 사용자 격리를 통해 사용자별 FTP 홈 폴더를 체계적으로 구성할 수 있습니다.

FTP 사이트 설정에서 FTP User Isolation 항목을 엽니다.

이 화면에는 여러 가지 설정 옵션이 있으며, 앞의 두 가지는 사용자 격리를 적용하지 않는 모드입니다.

  1. FTP root directory (사용자의 FTP 세션이 FTP 사이트의 루트 디렉터리에서 시작됨);
  2. User name directory (사용자 이름과 동일한 물리적/가상 디렉터리에서 세션이 시작되며, 해당 디렉터리가 없으면 사이트의 FTP 루트 디렉터리에서 시작됨).

나머지 세 가지 옵션은 서로 다른 사용자 격리 모드입니다.

  • User name directory (disable global virtual directories): 사용자의 FTP 세션이 FTP 사용자 이름과 동일한 물리적/가상 디렉터리 내에서 격리됩니다. 사용자는 자신의 디렉터리(즉, 자신의 FTP 루트 디렉터리)만 볼 수 있으며 그 밖의 상위 디렉터리로 이동할 수 없습니다. 모든 전역 가상 디렉터리는 무시됩니다;
  • User name physical directory (enable global virtual directories): 사용자의 FTP 세션이 FTP 계정 이름과 동일한 물리적 디렉터리 내에서 격리됩니다. 사용자는 자신의 디렉터리 위로 올라갈 수 없지만, 생성된 모든 전역 가상 디렉터리에는 접근할 수 있습니다;
  • FTP home directory configured in Active Directory: FTP 사용자가 Active Directory 계정 설정에 지정된 홈 디렉터리(FTPRoot 및 FTPDir 속성) 내에서 격리됩니다.

중요. 전역 가상 디렉터리가 활성화되어 있으면, 적절한 NTFS 권한이 있는 경우 모든 사용자가 FTP 사이트 루트에 설정된 모든 가상 디렉터리에 접근할 수 있습니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

필요한 격리 모드를 선택합니다(여기서는 두 번째 옵션으로 FTP 사용자를 격리했습니다).

FTP 사이트 설정을 변경할 때마다 Microsoft FTP 서비스(FTPSVC)를 재시작하는 것이 좋습니다.

FTP 서버 접근을 위한 Windows 방화벽 규칙 구성

FTP 서버 역할을 설치하면 사용자가 FTP에 접근하는 데 필요한 방화벽 규칙들이 Windows 방화벽 설정에 자동으로 활성화됩니다.

패시브(passive) FTP 모드에서 정상적으로 동작하려면 사용자가 RPC 포트 범위(1025~65535)에 연결할 수 있어야 합니다. 외부 방화벽에서 이 모든 포트를 여는 대신, FTP 데이터 전송에 사용되는 동적 TCP 포트 범위를 제한할 수 있습니다.

  1. FTP 사이트 설정에서 FTP Firewall Support 섹션을 열고 Data Channel Port Range 필드에 FTP 연결에 사용할 포트 범위를 지정합니다. 예: 50000-50100;Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드
  2. 변경 사항을 저장하고 IIS를 재시작합니다(iisreset);
  3. Windows 제어판을 열고 제어판\시스템 및 보안\Windows 방화벽\앱 허용으로 이동합니다;
  4. 방화벽을 통한 접근이 허용된 앱 목록에 FTP Server 역할에 대한 허용 권한이 포함되어 있는지 확인합니다.Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

그다음 고급 보안이 포함된 Windows 방화벽 설정에서 다음 규칙들이 활성화되어 있는지 확인합니다.

  • FTP Server (FTP Traffic-In) – TCP 프로토콜, 포트 21;
  • FTP Server Passive (FTP Passive Traffic-In) – 로컬 포트 1024-65535(본 예제에서는 50000-50100);
  • FTP Server Secure (FTP SSL Traffic-In) – 포트 990(SSL을 사용하는 FTP의 경우);
  • FTP Server (FTP Traffic-Out) – 포트 20;
  • FTP Server Secure (FTP SSL Traffic-Out) – 포트 989(SSL을 사용하는 FTP의 경우).

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

외부 FTP 사용자가 사이트에 접속할 수 있도록 하려면 해당 포트들을 공유기(게이트웨이, 방화벽)에서도 열어 주어야 합니다.

Windows에서 FTP 서버 연결 테스트하기

Test-NetConnection cmdlet을 사용하여 FTP 서버의 포트 개방 여부를 확인할 수 있습니다.

Test-NetConnection -ComputerName yourftpservername -Port 21

또는 ftp 명령을 사용할 수도 있습니다.

ftp yourftpservername

FTP 클라이언트 또는 파일 탐색기 주소창에 직접 ftp://yourservername/ 을 입력하여 FTP 사이트에 접속해 보세요.

사용자 이름과 비밀번호를 입력합니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

이제 사용자 파일이 담긴 홈 디렉터리(사용자 입장에서는 FTP 사이트의 루트)에 접근할 수 있습니다. 사용자 세션이 격리되어 있어 FTP 서버에서 자신의 파일만 보이는 것을 확인할 수 있습니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

팁. 익명 접근(모든 익명 사용자)을 허용하면 누구나 사용자 이름에 anonymous 또는 guest, 비밀번호에 이메일 주소를 입력하여 FTP 서버에 접속할 수 있습니다. 익명으로 FTP 사이트에 접속하면 세션은 LocalUser\Public 디렉터리로 제한됩니다(당연히 Public 디렉터리는 미리 생성되어 있어야 합니다).

FTP 로그를 활용하면 FTP 서버에 대한 사용자 접근 정보를 확인할 수 있습니다. 로그 파일은 기본적으로 c:\inetpub\logs\logfiles 폴더에 u_exYYMMDD.log 형식으로 저장됩니다.

현재 FTP 서버에 접속 중인 사용자 연결을 확인하려면 PowerShell을 통해 IIS 성능 카운터 값을 조회하거나, IIS 콘솔의 "Current FTP Sessions(현재 FTP 세션)" 섹션을 사용할 수 있습니다. 이 콘솔에서는 FTP 사용자의 이름과 IP 주소를 확인할 수 있고, 필요하다면 해당 FTP 세션을 강제로 종료할 수도 있습니다.

Windows Server 2016/2012 R2에서 FTP 사용자 격리를 활용한 FTP 서버 구성 완벽 가이드

지금까지 Windows Server 2016 / 2012 R2 기반으로 사용자 격리가 적용된 FTP 사이트를 구성하는 방법을 알아보았습니다. 격리 모드에서는 사용자가 로컬 또는 도메인 자격 증명으로 FTP에 인증되며, 사용자 이름에 해당하는 자신의 루트 디렉터리에만 접근할 수 있습니다.