서버 운영/APM 서버 구축

호스트에서 버추얼 박스 가상머신 내 서버에 FTP 접속 - VSFTPD 설치

씨실과 날실 2021. 4. 12. 09:00

 

이 글은 버추얼 박스 가상머신 네트워크 어댑터로 'NAT'을 사용하여, '외부 네트워크와의 연결 없이' 호스트에서 버추얼박스 가상 머신 내 FTP 서버에 접속, 파일을 업로드 및 다운로드  작업을 할 수 있도록 설정하는 방법만을 다루고 있습니다.

만약 외부 네트워크에서 작업할 수 있도록 하고 전송모드로 PASSIV 모드를 사용하게끔 하기 위해서는 아래 설명 내용들 중 상당수를 바꾸고 추가 작업 또한 이루어져야 합니다. (Bridged Adpater, 포트 개방 등등)

이 내용은 추후 다루도록 하겠습니다.

 

가상머신 네트워크 설정

가상머신의 네트워크 어댑터를 NAT으로 설정된 것을 확인하고 고급 메뉴 아래 포트포워딩 버튼을 눌러 포트포워딩 설정창을 띄웁니다.

 

띄운 포트포워딩 설정창에서 규칙 이름은 적당한 것으로 적어주고 호스트와 게스트의 포트를 21로 지정해줍니다.

호스트와 게스트의 IP는 굳이 적지 않아도 버추얼박스가 알아서 잡아줍니다.

버추얼박스 가상머신 NAT 어댑터 사용시 포트포워딩 설정 창에서 IP 주소를 빈칸으로 남겨두는 경우 자동으로 잡히는 주소는 아래와 같습니다.

호스트 IP : VirtualBox Host-Only Network 이더넷 어댑터

게스트 IP : 게스트 OS가 우분투 등 리눅스인 경우 enp0s3 네트워크

참고로 설정값의 별다른 수정이 없다면 VirtualBox Host-Only Network의 기본값은 192.168.56.1이고, enp0s3의 inet 값은 10.0.2.15입니다.

그래도 혹시 모르니 아래 방법을 통해 각 IP 주소를 확인하시는 것을 권장합니다.

 

호스트 IP 구성 확인

Microsoft Windows [Version 10.0.19042.867]
(c) 2020 Microsoft Corporation. All rights reserved.

C:\Users\admin>IPCONFIG

Windows IP 구성


이더넷 어댑터 VirtualBox Host-Only Network:

   연결별 DNS 접미사. . . . :
   링크-로컬 IPv6 주소 . . . . : XXXX::XXXXX:XXXX:XXXX:XXXX%XX
   IPv4 주소 . . . . . . . . . : 192.168.56.1
   서브넷 마스크 . . . . . . . : 255.255.255.0
   기본 게이트웨이 . . . . . . :

- 중략 - 

C:\Users\admin>

 

게스트 IP 구성 확인

study@study-VirtualBox:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute enp0s3
       valid_lft 86094sec preferred_lft 86094sec
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
study@study-VirtualBox:~$ 

 

가상머신 OS(Ubuntu)에서 시스템 패키지 업그레이드

study@study-VirtualBox:~$ sudo apt update
study@study-VirtualBox:~$ sudo apt upgrade

 

VSFTPD 설치

리눅스 계열에서 사용하는 FTP 서버 패키지는 아래와 같이 여러가지가 있습니다.

vsftpd / proftpd / Pure-FTPd / atftpd / tftpd

현재는 그 중 vsftpd를 가장 널리 쓰고 있으며 이외에 proftpd와 Pure-FTPd가 많이 쓰이고 있습니다.

여기서는 가낭 범용성이 강한 vsftpd를 주  FTP 서버로 선택해 설치하고 파일 송수신하는 과정까지 알아보도록 하겠습니다.

study@study-VirtualBox:~$ sudo apt install vsftpd
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 새 패키지를 설치할 것입니다:
  vsftpd
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
115 k바이트 아카이브를 받아야 합니다.
이 작업 후 338 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://mirror.kakao.com/ubuntu focal/main amd64 vsftpd amd64 3.0.3-12 [115 kB]
내려받기 115 k바이트, 소요시간 0초 (1,355 k바이트/초)
패키지를 미리 설정하는 중입니다...
Selecting previously unselected package vsftpd.
(데이터베이스 읽는중 ...현재 213331개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../vsftpd_3.0.3-12_amd64.deb ...
Unpacking vsftpd (3.0.3-12) ...
vsftpd (3.0.3-12) 설정하는 중입니다 ...
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /lib/systemd/system/vsftpd.service.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.6) ...
study@study-VirtualBox:~$ 

 

VSFTP 구동 여부 확인

study@study-VirtualBox:~$ systemctl status vsftpd
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset>
     Active: active (running) since Fri 2021-04-09 13:13:11 KST; 1min 42s ago
   Main PID: 12905 (vsftpd)
      Tasks: 1 (limit: 4638)
     Memory: 620.0K
     CGroup: /system.slice/vsftpd.service
             └─12905 /usr/sbin/vsftpd /etc/vsftpd.conf

 4월 09 13:13:11 study-VirtualBox systemd[1]: Starting vsftpd FTP server...
 4월 09 13:13:11 study-VirtualBox systemd[1]: Started vsftpd FTP server.
study@study-VirtualBox:~$ 

 

방화벽 설정 확인

study@study-VirtualBox:~$ sudo ufw status
상태: 활성

목적                         동작          출발
--                         --          --
Apache Full                ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
3306/tcp                   ALLOW       Anywhere                  
Apache Full (v6)           ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)             
3306/tcp (v6)              ALLOW       Anywhere (v6)             

study@study-VirtualBox:~$ sudo ufw status verbose
상태: 활성
로깅: on (low)
기본 설정: deny (내부로 들어옴), allow (외부로 나감), disabled (라우팅 된)
새 프로필: skip

목적                         동작          출발
--                         --          --
80,443/tcp (Apache Full)   ALLOW IN    Anywhere                  
22/tcp                     ALLOW IN    Anywhere                  
3306/tcp                   ALLOW IN    Anywhere                  
80,443/tcp (Apache Full (v6)) ALLOW IN    Anywhere (v6)             
22/tcp (v6)                ALLOW IN    Anywhere (v6)             
3306/tcp (v6)              ALLOW IN    Anywhere (v6)             

study@study-VirtualBox:~$ 

 

21번 포트 개방

study@study-VirtualBox:~$ sudo ufw allow ftp
규칙이 추가되었습니다
규칙이 추가되었습니다 (v6)
study@study-VirtualBox:~$ sudo ufw reload
방화벽을 다시 읽었습니다
study@study-VirtualBox:~$ 

 

21번 포트 개방 여부 확인

study@study-VirtualBox:~$ sudo ufw status | grep 21
21/tcp                     ALLOW       Anywhere                  
21/tcp (v6)                ALLOW       Anywhere (v6)             
study@study-VirtualBox:~$

 

 

VSFTPD 설정

FTP 서버를 문제 없이  안전하게 사용하기 위해서는 반드시 설정 내용을 확인하여 수정해줄 필요가 있으며 그 외에 FTP에 접속하는 계정별로 디렉터리 등에 대한 권한 또한 올바르게 설정해줄 필요가 있습니다.

이 내용은 추후 자세히 적는 기회가 있을 것입니다.

제 글을 방문하시는 분들 중 실제로 FTP 서비스를 제공하고자하는 경우 다른 유능하신 분들께서 공개해주신 글들을 참고하시기 바랍니다.

 

여기서는 호스트에서 FTP 클라이언트 프로그램을 이용해 게스트의 FTP 서버를 이용하는 것이 그 목적이므로 가장 최소한의 설정만을 수정하도록 하겠습니다.

study@study-VirtualBox:~$ sudo nano /etc/vsftpd.conf

나노 에디터로 vsftpd.conf 파일을 여러줍니다.

해당 파일을 열어 보면 여러 설정값들과 그에 대한 주석들이 적혀 있는데 그 중 아래와 같은 내용을 찾을 수 있을 것입니다.

# Uncomment this to enable any form of FTP write command.
#write_enable=YES

#write_enable=YES 문구에서 #을 제거하여 주석처리를 해제하고 해당 파일을 저장해줍니다.

 

만약 이 작업을 해주지 않으면 파일질라 등 FTP 클라이언트로 FTP 작업 시 FTP 서버에서 클라이언트 PC로 파일 다운로드는 되지만 클라이언트 PC에서 FTP 서버로 파일 업로드는 되지 않습니다.

명령:	STOR .htaccess
응답:	550 Permission denied.
오류:	치명적인 파일 전송 오류
상태:	서버와의 연결이 종료됨

해당 설정 값의 수정 없이 파일 업로드를 수행하면 위와 같은 오류 메시지가 출력되는 것을 볼 수 있습니다.

 

study@study-VirtualBox:~$ sudo systemctl restart vsftpd

설정값 수정 후 아래와 같이 vsftpd 데몬을 재시작해줍니다.

 

Filezilla 로 접속

파일질라 등은 프로그램 실행 메인 화면에서 호스트명과 아이디, 암호, 포트 번호를 기입하고 빠른 연결 버튼을 누른 것으로 손쉽게 접속할 수 있는 기능을 제공하고 있습니다.

그러나 이러한 기능은 서버의 설정이 해당 기능을 지원해야 합니다. 그러나 지금까지의 설정은 그러한 부분을 다루지 않고 vsftpd 설치 시 자동으로 설정된 기본값만으로 진행한 것이므로 정상적인 접속이 되지 않습니다.

 

이러한 상태로 Filezilla로 FTP 서버에 접속하기 위해서는 사이트 관리자 설정을 사용해주어야 합니다.

 

 

사이트 관리자 창에서 다음과 같이 설정하고 연결

사이트 관리자 설정

[일반 탭]

호스트 : VirtualBox Host-Only Network IP 지정

포트 : 21

로그온 유형 : 일반

사용자 : 가상머신 내 OS 로그인 아이디

비밀번호 : 가상머신 내 OS 로그인 비밀번호

 

[전송 설정]

전성 모드 : 능동형

 

[문자셋]

서버에서 파일명에 사용하는 문자셋 인코딩 : UTF-8로 강제 설정

이와 같이 설정하고 연결을 시도하면 Windows Defender 방화벽에서 Filezilla FTP Client(filezilla.exe)를 차단했다고 창이 뜹니다.

 

정상적으로 이용하기 위해서는 방화벽을 통한 Filezilla FTP Client 앱 액세스를 허용해주어야 합니다.

개인 네트워크와 공용 네트워크 중 현재 윈도가 사용 중인 네트워크를 선택하고 액세스 허용 버튼을 눌러줍니다.

편의를 위해서 두 네트워크 모두 선택하셔도 됩니다.

 

이상의 절차를 거치면 FTP 서버에 정상적으로 접속되고 로그인한 계정에 접속 디렉터리에 대한 권한이 있다면 파일을 업로드 및 다운로드도 정상적으로 이루어지는 것을 확인할 수 있습니다.

 

FTP 서버를 구축해 테스트까지 진행해보았습니다만 이는 어디까지나 로컬 컴퓨터 안에서의 작업이기 때문에 별다른 설정을 하지 않아도 되었던 것입니다.

만약 실제 FTP 서버를 구축하여 외부에 서비스하고자 하면 FTP 서버 설정 최적화 작업 및 각 접속 계정에 대한 퍼미션 설정 등 각종 보안 조치를 해주어야 함을 잊미 마시기 바랍니다.