Amazon EC2 에 Active 모드로 FTP서버를 구축해 보자
안녕하세요! 클래스메소드 금상원 입니다.
이번 블로그에서는 EC2 에 Active 모드로 FTP서버를 구축 하는 방법에 대해 알아보겠습니다.
FTP 란
FTP(파일 전송 프로토콜)는 인터넷을 통해 파일을 송수신하는 표준 프로토콜로, 클라이언트와 서버 간에 파일을 업로드하거나 다운로드할 때 사용됩니다.
Active 모드란
Active Mode(활성 모드) 는 FTP 클라이언트가 서버와 연결할 때, 데이터 전송을 위해 서버가 클라이언트에 직접 접속하는 방식입니다.즉, 클라이언트가 서버에 연결 요청을 보내면, 서버가 클라이언트의 특정 포트로 다시 접속하여 데이터를 전송합니다.
Active 모드 통신 흐름
제어 연결
FTP 클라이언트는 FTP 서버의 21번 포트로 제어 연결을 요청합니다.
이때, FTP 클라이언트는 서버에 접속하기 위한 정보(사용자 인증 등)와 데이터 통신에 사용할 클라이언트 측 포트 번호를 서버에 전달합니다.
서버가 정상적으로 인증을 처리하면 제어 연결이 완료됩니다.
데이터 통신 연결
제어 연결이 완료된 후, FTP 서버는 자신의 20번 포트를 사용하여, 클라이언트가 지정한 데이터 통신 포트로 연결을 시도합니다.
만약 FTP 클라이언트의 방화벽이 해당 데이터 통신 포트에서 FTP 서버의 접속을 허용하고 있다면, 데이터 연결이 정상적으로 완료됩니다.
EC2에 Active 모드로 FTP 서버 구축해 보기
준비 목록
- FTP 서버 용 EC2 인스턴스
- 클라이언트 Server 용 EC2 인스턴스
※각 EC2인스턴스의 OS는 RHEL9로 설정 했습니다.
보안 그룹 설정
- FTP Server 용 EC2 인스턴스
유형 | 프로토콜 | 포트 범위 | 소스 | |
---|---|---|---|---|
인바운드 | 사용자 지정 TCP | TCP | 21 | Client Server의 IP 주소 |
아웃바운드 | 모든 트래픽 | 전체 | 전체 | 0.0.0.0/0 |
- Client Server 용 EC2 인스턴스
유형 | 프로토콜 | 포트 범위 | 소스 | |
---|---|---|---|---|
인바운드 | 사용자 지정 TCP | TCP | 1024 - 65535 | FTP Server의 IP 주소 |
아웃바운드 | 모든 트래픽 | 전체 | 전체 | 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=NO
port_enable=YES
Active 모드로 사용하기 위해 「vsftpd.conf」 에서 설정을 추가 합니다.
# 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 -A <FTP 서버의 IP 주소>
위의 명령어로 FTP 서버에 Active 모드로 접속을 합니다.
220 (vsFTPd 3.0.5)
Name (172.16.9.136: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 서버와 데이터 통신 되는지 확인 합니다.
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 14 Mar 17 03:12 FTPServerFile.txt
226 Directory send OK.
문제가 없다면 위와 같이 디렉토리의 폴더나 파일을 조회할 수 있습니다.
클라이언트 서버 FTP 서버에 파일 업로드
ftp> put <파일 명>
위의 명령어로 FTP 서버에 파일 업로드할 수 있습니다.
local: ClientFile.txt remote: ClientFile.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
7 bytes sent in 0.000494 secs (14.17 Kbytes/sec)
문제가 없다면 위와 같이 성공 했다는 메세지가 출력하게 됩니다.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 1000 1000 7 Mar 17 07:34 ClientFile.txt
-rw-r--r-- 1 0 0 14 Mar 17 03:12 FTPServerFile.txt
디렉토리를 조회했을 때 파일이 추가 된 것을 확인할 수 있습니다.
클라이언트 서버 FTP 서버에 파일 다운로드
ftp> get <파일명>
위의 명령어로 FTP 서버에 파일 다운로드할 수 있습니다.
local: FTPServerFile.txt remote: FTPServerFile.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for FTPServerFile.txt (14 bytes).
226 Transfer complete.
14 bytes received in 0.000654 secs (21.41 Kbytes/sec)
문제가 없다면 위와 같이 성공 했다는 메세지가 출력하게 됩니다.
ftp> !ls
ClientFile.txt FTPServerFile.txt
위의 「!ls」 명령어로 클라이언트 서버의 로컬 디렉토리를 조회하여 파일이 추가된 것을 확인할 수 있습니다.
※「exit」 명령어로 ftp 접속을 끊고 해당 디렉토리에서 「ls」 명령어로 조회해도 파일이 추가되어 있는 것을 확인할 수 있습니다.
Active 모드의 문제점
최근의 클라이언트 서버가 방화벽/NAT(공유기) 뒤에 배치되는 것이 일반적이기 때문에 FTP 서버에서 Active 모드로 클라이언트 서버에 데이터 연결을 시도할 때 차단될 가능성이 높습니다.
위와 같은 이유로 Passive 모드가 도입되었고 Passive 모드를 대부분 권장하고 있고, 사용되고 있습니다.
Active 모드는 경험이 부족한 사람들이 사용하기 힘들기 때문에 처음 도전하시는 분들은 Passive 모드를 추천 드립니다.
마무리
이번 블로그에서는 EC2 에 Active 모드로 FTP 서버를 구축해 보았습니다.
Active 모드에 대해 궁금하셨던 분들이나 EC2 에 Active 모드로 FTP 서버를 구축 하고 싶은분들께 조금이나마 도움이 되었으면 좋겠습니다.
참고 자료