네트워크 공부 & 실습/네트워크 실습

[FTP 프로토콜] 파일 다운 받기, 업로드 하기

객체사냥꾼 2025. 2. 26. 16:26

https://www.ipswitch.com/blog/what-is-file-transfer-protocol-ftp

 

 

네트워크 관리사를 준비하며 공부한 FTP 프로토콜을 이용해 실제로 리눅스 기기간에 파일 이동을 실험해 보고자 한다.
나의 Desktop 을 서버라고 가정한다면, Linux 서버에 접속해 파일을 공유하거나, 프린트를 이용하는 등의 행동을 하고자 한다면 이용할 수 있는 프로토콜이 다양하게 있는데, 공부한 바에 따르면 

 

1. 리눅스(서버)  <->  리눅스 or 윈도우 (클라이언트) = SAMBA 프로토콜 가능

2. 리눅스(서버) <-> 다양한 운영체제 (클라이언트) = SSH 프로토콜 가능

3. 리눅스(서버) <-> 리눅스 (클라이언트) = FTP, SFTP, NFS 등

 

클라이언트의 운영체제에 따라 이용할 수 있는 프로토콜에 약간에 차이가 있고, 이번엔 20번 포트와 21번 포트로 TCP 를 사용하는 FTP를 이용해 보도록 한다. 

 

1. 준비

  • 데스크탑 (리눅스 OS) - 서버로 가정
  • 랩 탑 (리눅스 OS) - 클라이언트로 가정
  • 서버의 IP 주소 확인 ( ifconfig - 네트워크 인터페이스 - inet 이하 주소)
  • 목표 : 증명사진과 빌조이 선생님의 사진 파일을 클라이언트가 복사해 가도록 하자!!

 

 

2. 서버측 준비

그냥 접속하면 되는게 아니라 FTP 관련 패키지를 설정해주고, 활성화를 시작해야 연결이 된다.

또한 현재 사용하는 네트워크가 데스크탑과 랩 탑은 다른 서브넷으로 되어있기 때문에 양 기기간 직접적인 통신은 불가능 하다.

따라서 데스크탑 주소와 포트번호를 입력하면 외부 접속이 해당 서비스로 연결되도록 하는 포트 포워딩 설정이 되어 있거나,(다른 서브넷의 연결도 외부 접속으로 판단하여 연결된다.) VPN 방식을 사용해야 한다. (서브넷 통합 방법은 실패햇음ㅠㅠ)

이전에 포트 포워딩을 연습하면서 라우터 설정에 포트 포워딩이 되어 있으므로 이 설정 과정은 생략 가능했다.

 

https://cs-study1.tistory.com/33

 

[포트포워딩] 로컬에서 진행중인 프로젝트에 다른 기기로 접속하기-2

어제는 간단하게 무선 네트워크(Wi-Fi)로 연결된 두 노트북을 가지고 실행중인 SpringBoot 프로젝트의 페이지에 접속해 봤는데, 무선 연결된 노트북에, 유선 으로 연결되어있는 데스크톱에서는 내

cs-study1.tistory.com

 

 

2-1. 패키지 매니져로 FTP 패키지를 설치한다. (우분투는 데비안 계열이므로 atp-get 으로 설치)

sudo apt-get install vsftpd

 

2-2. /etc/vsftpd.conf 파일을 열어 ftp 관련 설정들을 확인한다.

 

중요하게 확인하고 설정을 바꿔줘야 할 항목들은 다음과 같다.

 

  • listen=NO : 이 설정은 vsftpd가 inetd에서 실행되도록 설정 된 상태이다. standalone 모드로 실행하려면 listen=YES로 변경해야 한다.
    (inetd = 사용자의 요청이 있을때만 실행, standalone = 부팅시에 메모리에 상주하면서 사용자의 요청을 대기하고 있는다.)
    -> 클라이언트가 연결할 때 실행되도록 하기 위해 inetd 상태로 놔둔다.
  • anonymous_enable=NO : 익명 사용자는 로그인할 수 없게 한다.
    -> 서버의 아이디와 비밀번호를 알고있고, 이를 통해 로그인 할 예정이니 변경하지 않는다.
  • local_enable=YES : 로컬 사용자가 로그인할 수 있도록 허용한다.
    -> 현재 사용하려는 기능과 상관 없으니 그대로 놔둔다
  • write_enable=YES 파일 업로드를 허용하려면 이 옵션을 활성화 해야 한다. ( 주석 처리 되어있다)
    -> 다운 만 받을거니까 그냥 주석 처리된 상태로 놔두기로 한다.
  • dirmessage_enable=YES 및 use_localtime=YES : 디렉터리 메시지를 활성화, 로컬 시간대를 사용한다.
    -> 특별히 변경할 이유가 없는 항목인 것 같다.
  • xferlog_enable=YES: 업로드 및 다운로드 로그 기록이 활성화.
    -> 특별히 변경할 이유가 없는 항목인 것 같다.
  • ssl_enable=NO: SSL 암호화가 비활성화 되어 있다.
    -> 일단 변경하지 않도록 한다.

현재 설정에서 크게 변경할 내용은 보이지 않았으므로, 수정하지 않고 FTP 서비스를 실행하기로 한다. 만약 제대로 되지 않는다면 standalone 모드나 사용자를 새로 만들어서 시도해보도록 한다.

 

2-3. FTP 는 20번과 21번 포트를 사용하므로 해당 포트가 열려있는지 확인하기.

 

netstat 명령어로 현재 열려있는 포트를 확인할 수 있다.

sudo netstat -tuln | grep -E '20|21'

 

 

포트가 열려있으면 LISTEN 상태가 표시되고, 포트가 닫혀있다면 Unable to connect to remote host: Connection refused 와 같은 메세지가 나온다.
FTP 서버를 시작하면 20, 21번 서버는 자동으로 활성화 된다고 하는데, 혹시 포트가 활성화 되지 않는다면 다음과 같은 방법으로 포트를 활성화 시킬 수 있다.

#방화벽에서 포트 열기
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp

#iptaples를 사용하는 경우
sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#변경사항을 저장하기
sudo iptables-save | sudo tee /etc/iptables/rules.v4

 

 

2-4. FTP 서비스 활성화

 

아래 명령어로 FTP 서비스를 활성화 하고 정상적으로 시작되었는지 확인해본다.

sudo systemctl start vsftpd

sudo systemctl status vsftpd

 

 

Acitve 항목이 active(running) 으로 표시된 것으로 보아, 현재 FTP 프로토콜을 이용하여 데스크탑에 접속할 수 있는 상태이다.

 

3. 클라이언트로 접속하기

앞서 검색해높은 (ifconfig) 데스크탑의 IP 주소 (서버의 IP 주소)를 이용해, 랩 탑에서 FTP 접속을 시도해보도록 하자.

 

랩 탑에서 접속 명령을 시도한다.

ftp 서버 ip 주소

 

 

익명의 사용자가 아닌, 서버의 아이디와 비밀번호 ( 데스크톱의 사용자 계정)을 입력하고 로그인 하면, 데스크톱(서버) 의 항목들을 모두 볼 수 있게된다.
명령 프롬프트도 ftp> 로 변경된다.

 

목표로 설정한 증명사진 파일과 빌조이 선생님 사진 파일을 가져오도록 하자, 

가져오는 명령은 get 이고 복수의 파일을 가져오는 명령어는 mget 이다. (반대로 업로드는 put, mput )

 

 

두개의 파일을 가져오는데 성공하였다!!

 

접속을 종료할 땐 생각보다 쿨 하게 bye 를 입력해주면 된다.

 

 

4.파일 업로드 하기

다운로드만 받으면 허전하니 put 과 mput 도 사용해보도록 한다.

서버에 내가 가지고 있는 파일을 놓고 온다는 느낌의 명령어이다. 먼저 /etc/vsftpd.conf 파일 에서 write_enable=YES 항목이 주석처리 되어있었는데, 이 부분을 활성화 시킨다.

 

sudo vi /etc/vsftpd.conf

 

그냥 vi 명령어로 파일을 수정하려고 하니, 읽기모드로 열리기 때문에 sudo 를 사용해서 열었더니 저장이 가능해졌다. 

 

클라이언트(랩 탑)에서 파일을 쓸 수 있도록 허용해줬다.

이제 FTP 서버를 다시 시작하고 상태를 확인한다.

sudo systemctl restart vsftpd

sudo systemctl status vsftpd

 

아까와 같이 running 상태가 확인 되었으므로 랩탑에서 다시 연결을 시도한다.

 

연결이 완료되었으면 프롬프트가 ftp> 로 바뀌고 ls 로 폴더 목록을 보면 데스크탑(서버) 의 파일 목록들이 보인다.
여기서 클라이언트(서버)가 업로드 하고 싶은 폴더or 파일의 경로를 등록한다. 

lcd /home/kang/사진/스크린샷

 

이렇게 등록하면 local directory now : /home/kang/사진/스크린샷 이라는 리턴값이 돌아오고. 여기서 업로드 하고 싶은 파일들을 하나하나 put 파일명 으로 업로드 하거나, 폴더내용 전체를 업로드 하고 싶다면 mput * 명령어를 입력하면 된다.

 

 

랩탑에서 찍은 스크린샷들이 데스톱으로 잘 넘어왔다.

 

 

 

 

FTP 프로토콜에 대한 연습이 끝났으므로, 클라이언트에서는 bye 명령어로 접속을 종료해주고 서버(데스크탑)에서는 아래 명령어로 FTP 서비스를 중지한다.

sudo systemctl stop vsftpd

 

 

 

5. 마무리

설정을 진행하면서 내가 왜 지금 이 패키지 매니져를 사용하는지 이해하면서 사용할 수 있었고 , 프로토콜을 사용하면서 암기한 well-known 포트번호가 그대로 나와서 역시 이해하기 쉬웠다. FTP 사용을  CLI 를 통해 해봤지만 소프트웨어를 통해 사용할 수 있다는데, 친숙한 GUI 보다는 리눅스 연습을 위해 당분간 모든 연습은 CLI 로 계속 해야겠다. 

다음엔 SAMBA 프로토콜과 SFTP, NFS 에 대한 연습도 해봐야겠다.