Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
FTP란?
FTP는 파일 전송 프로토콜(File Transfer Protocol)의 약자입니다. FTP는 인터넷 망으로 연결되어 있는 멀리 떨어져 있는 서버로 파일을 올리거나 가져오기 위해 필요한 일종의 프로토콜입니다.
FTP는 TCP/IP 네트워크(인터넷)상의 장치가 파일을 전송할 때 사용하는 규약입니다. 1971년에 최초로 공개된 통신 규약으로, 네트워크에 연결된 컴퓨터끼리 데이터를 원활하게 교환하기 위한 목적으로 개발되었습니다.
FTP는 오로지 빠른 파일 송수신만을 목적으로 두고 고안되었기 때문에 보안 부분에서는 상당히 취약한 프로토콜입니다. (이 부분은 wire shark로 확인해 보겠습니다.) 하지만 동작 방식이 대단히 단순하고 직관적이기 때문에 사용법도 간단합니다. 무엇보다 WWW 방식보다 파일을 빠른 속도로 한꺼번에 주고 받을 수 있다는 것이 FTP의 가장 큰 장점입니다.
FTP는 모드도 두 개가 존재합니다.
1. Active mode
클라이언트가 서버에게 연결할 데이터 포트를 알려주는 모드
클라이언트는 자신이 전송로로 사용할 포트를 정해서 알려주지만, 서버측은 20과 21번 포트를 그대로 사용합니다.
2. Passive mode
서버가 클라이언트에게 연결할 데이터 포트를 알려주는 모드
서버에 FTP 에 사용할 포트 범위를 설정해주면, 연결 후 범위 내의 랜덤한 포트로 클라이언트와 연결이 됩니다.
TFTP
FTP는 사용자 인증과정을 통해 파일 전송 작업이 진행되고, TCP 상에서 동작하기 때문에 데이터가 잘 전달되었는지도 항상 확인하게 됩니다.
TFTP는 이러한 사용자 인증 없이 파일을 전송하는 프로토콜입니다. FTP는 UDP의 69 port에서 동작하게 됩니다. TCP의 복잡한 과정이 없기 때문에 빠르게 전송이 가능합니다. 반대로 데이터가 손상될 위험이 있기 때문에, 조금이라도 데이터가 손실되면 전송이 실패합니다.
이러한 TFTP는 인증이 없기 때문에, 초기의 부팅 파일을 전송하는데 사용할 수 있습니다.
FTP 설치하기
unbuntu server에 NAT 어댑터를 연결하여 일단 vsftpd(ubuntu의 ftp 서버 패키지)를 다운로드하자.
sudo apt update
sudo apt install vsftpd
이제 /etc/vsftpd.conf의 설정파일을 바꿔주자.
sudo nano /etc/vsftpd.conf
# Example config file /etc/vsftpd.conf
listen=NO
listen_ipv6=YES
anonymous_enable=NO #익명 유저 차단
local_enable=YES # 로컬에서 접속 여부
write_enable=YES # 파일 쓰기 여부
user_sub_token=$USER
local_root=/var/www/ftp #루트 계정 접속시 default 경로 해당 폴더가 없으면 만들어 주자.
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
pasv_min_port=30000 # 수동 ftp일 때 port범위
pasv_max_port=31000
userlist_enable=YES #접속 유저 list 제한
userlist_file=/etc/vsftpd.user_list # list 위치
userlist_deny=NO
세팅이 끝나면 재시작한다.
sudo systemctl restart vsftpd
FTP port를 위한 방화벽 세팅도 필요하다.
FTP는 tcp의 20번(연결용)과 tcp 21번(전송용)을 사용한다.
sudo ufw allow 20:21/tcp
sudo ufw allow 30000:31000/tcp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable
FTP USER 생성
ftp에 사용할 user를 생성해 주자.
sudo adduser new_ftp_user
이 유저를 FTP 접속 허용 list에 추가한다.
Sudo vim /etc/vsftpd.user_list
이 유저가 사용할 수 있는 폴더를 만들고 권한을 설정해 주자.
sudo mkdir -p /home/new_ftp_user/ftp/upload
sudo chmod 550 /home/new_ftp_user/ftp
sudo chmod 750 /home/new_ftp_user/ftp/upload
sudo chown -R new_ftp_user: /home/new_ftp_user/ftp
이제 ftp로 해당 서버(100.100.100.5)를 통해 만들어준 유저로 로그인이 가능하다.
Exit로 나갈 수 있다.
이제 Client인 virtual box vm의 win10에 FileZilla 설치하자.
업로드할 image.png를 다운 로드받자.
FTP 서버인 100.100.100.5에 만들어준 계정으로 접속한다.
Upload 폴더로 이동하자.
전송 -> 수동 전송으로 image를 업로드하자.
포트 지정은 안 했으므로 설정해 둔 30000 ~ 31000 중에 선택될 것이다.
패킷의 이동도 정상적으로 확인된다.
자세히 확인해 보면 패시브 모드로 진행됨이 보인다.
무려 비밀번호까지 노출되므로 보안에 취약하다.
Root 유저로 접속하기
지금까지는 생성한 유저로 접속을 했으므로, Root도 로그인 되게 만들자.
세팅에 아래 내용이 정상적으로 있는지 확인하자.
sudo nano /etc/vsftpd.conf
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
재시작해주고,
sudo systemctl restart vsftpd
FTP 접속 유저 리스트에 root를 추가한다.
sudo vim /etc/vsftpd.user_list
sudo vim /etc/ftpusers에서 root를 주석처리 해주고,
재시작하면, 파일질라에서 root로그인으로 접근이 된다.
sudo systemctl restart vsftpd
만약 폴더에 접속이 안된다면
sudo vim /etc/vsftpd.conf 에서 아래를 추가해 주자.
user_sub_token=$USER
local_root=/var/www/ftp #루트 계정의 기본 ftp 폴더
익명 유저로 접속
이제 익명유저로 접속해 보자.
세팅 파일에서 익명 유저가 접속이 되도록 바꿔주자.
sudo vim /etc/vsftpd.conf
설정해 주었던 화이트 리스트 세팅은 주석처리해 주자.
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
익명 유저의 기본 폴더인 /var/ftp라는 폴더를 만들어주고 재시작하자.
이제 유저의 id나password 없이 로그인 시, 익명 유저의 폴더로 이동된다.
'개발 > 네트워크 & Ubuntu' 카테고리의 다른 글
[GNS3] static Routing 세팅 (VLAN, SubInterface) (1) | 2024.01.21 |
---|---|
GNS3를 사용한 static Routing 테스트 (1) | 2024.01.21 |
브라우저 Parallel connection 확인하기 (0) | 2024.01.09 |
Ubuntu server - DNS 서버 설치 및 구성 (1) | 2024.01.07 |
Ubuntu server - Nginx 설명 및 설치 (1) | 2024.01.07 |