Amazon EC2 에 Passive 모드로 FTP서버를 구축해 보자
안녕하세요! 클래스메소드 금상원 입니다.
이번 블로그에서는 EC2 에 Passive 모드로 FTP서버를 구축 하는 방법에 대해 알아보겠습니다.
FTP 란
FTP(파일 전송 프로토콜)는 인터넷을 통해 파일을 송수신하는 표준 프로토콜로, 클라이언트와 서버 간에 파일을 업로드하거나 다운로드할 때 사용됩니다.
Passive 모드란
Passive Mode(수동 모드) 는 FTP 클라이언트가 서버와 연결할 때, 데이터 전송을 위해 클라이언트가 서버의 지정된 포트로 직접 접속하는 방식입니다.
즉, 클라이언트가 서버에 연결 요청을 보내면, 서버가 데이터 전송을 위한 포트를 열고, 클라이언트가 해당 포트로 접속하여 데이터를 전송합니다.
이 방식은 클라이언트가 방화벽이나 NAT(공유기) 뒤에 있어도 안정적으로 FTP 연결이 가능하기 때문에 Active 모드보다 더 많이 사용됩니다.
Passive 모드 통신 흐름
제어 연결
FTP 클라이언트는 FTP 서버의 21번 포트로 제어 연결을 요청합니다.
이때, FTP 클라이언트는 서버에 접속하기 위한 사용자 인증 정보를 서버에 전달합니다.
서버가 정상적으로 인증을 처리하면 FTP 서버는 FTP 클라이언트에게 데이터 통신용 포트 정보를 전달 합니다.
위의 과정이 완료되면 제어 연결이 완료 됩니다.
데이터 통신 연결
제어 연결이 완료된 후, FTP 클라이언트는 FTP 서버로 부터 받은 데이터 통신용 포트 번호로 테이터 연결을 실시 합니다.
만약 FTP 서버가 방화벽이 해당 데이터 통신 포트에서 FTP 클라이언트의 접속을 허용하고 있다면, 데이터 연결이 정상적으로 완료됩니다.
EC2에 Passive 모드로 FTP 서버 구축해 보기
준비 목록
- FTP 서버 용 EC2 인스턴스
- 클라이언트 Server 용 EC2 인스턴스
※각 EC2인스턴스의 OS는 RHEL9로 설정 했습니다.
보안 그룹 설정
- FTP Server 용 EC2 인스턴스
유형 | 프로토콜 | 포트 범위 | 소스 | |
---|---|---|---|---|
인바운드 | 사용자 지정 TCP | TCP | 21 | Client Server의 IP 주소 |
인바운드 | 사용자 지정 TCP | TCP | (예)50000-510000 | Client Server의 IP 주소 |
아웃바운드 | 모든 트래픽 | 전체 | 전체 | 0.0.0.0/0 |
- Client Server 용 EC2 인스턴스
유형 | 프로토콜 | 포트 범위 | 소스 | |
---|---|---|---|---|
아웃바운드 | 모든 트래픽 | 전체 | 전체 | 0.0.0.0/0 |
FTP 서버 에서 vsftpd 설치
sudo dnf update -y
먼저 위의 명령어를 이용하여 패키지 매니저를 업데이트합니다.
sudo dnf install vsftpd -y
위의 명령어로 「vsftpd」 를 설치 합니다.
# 설정파일
sudo vi /etc/vsftpd/vsftpd.conf
# 설정 추가
pasv_enable=Yes
pasv_min_port=50000
pasv_max_port=50001
Passive 모드로 사용하기 위해 「vsftpd.conf」 에서 설정을 추가 합니다.
Passive 모드에서는 특정 포트로만 데이터 통신을 할 수 있도록 설정이 가능함으로 적당한 범위로 설정 합니다.
# FTP 서버 사용 시작
sudo systemctl start vsftpd
# 서버 부팅 후에도 FTP 서버 사용
sudo systemctl enable vsftpd
마지막 으로 위의 명령어로 vsftpd 서비스를 실행 시키고 서버 부팅 후에도 서비스가 실행 되도록 합니다.
클라이언트 서버 에서 ftp 설치
sudo dnf update -y
먼저 위의 명령어를 이용하여 패키지 매니저를 업데이트합니다.
sudo dnf install ftp -y
위의 명령어로 FTP 서버에 접속할 수 있는 기본 클라이언트인 「ftp」 를 설치 합니다.
클라이언트 서버에서 FTP 서버에 접속
ftp -p <FTP 서버의 IP 주소>
위의 명령어로 FTP 서버에 Passive 모드로 접속을 합니다.
Connected to <FTP 서버 IP> (<FTP 서버 IP>).
220 (vsFTPd 3.0.5)
Name (<FTP 서버 IP>:ec2-user): ec2-user
331 Please specify the password.
Password:
접속을 시도하게 되면 위와 같이 FTP 서버의 유저명과 비밀번호를 입력하는 메세지가 나타나게 됩니다.
접속 하려는 유저명과 비밀번호를 입력하고 접속 합니다.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
접속이 성공 하면 위와 같은 메세지가 출력 됩니다.
ftp> ls
「ls」 명령어를 사용하여 FTP 서버와 데이터 통신 되는지 확인 합니다.
227 Entering Passive Mode (<FTP 서버 IP>,195,214).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 22 Mar 18 00:34 FTPServerFile.txt
226 Directory send OK
문제가 없다면 위와 같이 디렉토리의 폴더나 파일을 조회할 수 있습니다.
클라이언트 서버 FTP 서버에 파일 업로드
ftp> put <파일 명>
위의 명령어로 FTP 서버에 파일 업로드할 수 있습니다.
local: ClientFile.txt remote: ClientFile.txt
227 Entering Passive Mode (<FTP 서버 IP>,199,46).
150 Ok to send data.
226 Transfer complete.
7 bytes sent in 0.000383 secs (18.28 Kbytes/sec)
문제가 없다면 위와 같이 성공 했다는 메세지가 출력하게 됩니다.
ftp> ls
227 Entering Passive Mode (<FTP 서버 IP>,198,13).
150 Here comes the directory listing.
-rw-r--r-- 1 1000 1000 7 Mar 18 01:51 ClientFile.txt
-rw-r--r-- 1 0 0 22 Mar 18 00:34 FTPServerFile.txt
226 Directory send OK.
디렉토리를 조회했을 때 파일이 추가 된 것을 확인할 수 있습니다.
클라이언트 서버 FTP 서버에 파일 다운로드
ftp> get <파일명>
위의 명령어로 FTP 서버에 파일 다운로드할 수 있습니다.
local: FTPServerFile.txt remote: FTPServerFile.txt
227 Entering Passive Mode (<FTP 서버 IP>,199,48).
150 Opening BINARY mode data connection for FTPServerFile.txt (22 bytes).
226 Transfer complete.
22 bytes received in 5.2e-05 secs (423.08 Kbytes/sec)
문제가 없다면 위와 같이 성공 했다는 메세지가 출력하게 됩니다.
ftp> !ls
ClientFile.txt FTPServerFile.txt
위의 「!ls」 명령어로 클라이언트 서버의 로컬 디렉토리를 조회하여 파일이 추가된 것을 확인할 수 있습니다.
※「exit」 명령어로 ftp 접속을 끊고 해당 디렉토리에서 「ls」 명령어로 조회해도 파일이 추가되어 있는 것을 확인할 수 있습니다.
마무리
이번 블로그에서는 EC2 에 Passive 모드로 FTP 서버를 구축해 보았습니다.
Passive 모드에 대해 궁금하셨던 분들이나 EC2 에 Passive 모드로 FTP 서버를 구축 하고 싶은분들께 조금이나마 도움이 되었으면 좋겠습니다.
참고 자료