FTP의 패시브(Passive) 모드는 클라이언트가 방화벽이나 NAT(Network Address Translation) 뒤에 있을 때 데이터 전송 문제를 해결하기 위해 사용됩니다. 기본적으로, FTP는 액티브(Active) 모드와 패시브(Passive) 모드 두 가지 방식으로 작동합니다.
1. 패시브(Passive) 모드 개요
- 클라이언트가 서버에게 데이터 전송을 위한 포트를 열도록 요청함.
- 서버가 사용할 포트를 클라이언트에게 알려주면, 클라이언트가 해당 포트로 연결.
- 서버가 클라이언트로의 연결을 시도하는 것이 아니라, 클라이언트가 서버로의 연결을 주도하기 때문에 방화벽이 있는 환경에서 더 원활하게 작동.
2. 패시브 모드 활성화 방법
FTP 클라이언트와 서버 설정에서 패시브 모드를 활성화해야 합니다.
(1) FTP 클라이언트에서 패시브 모드 활성화
- Linux FTP 명령어 사용 시
ftp> passive Passive mode: on
- lftp 사용 시
lftp -e "set ftp:passive-mode on; open <FTP_SERVER>"
- Windows FTP 클라이언트 (FileZilla, WinSCP 등)
- FileZilla:
편집(Edit) -> 설정(Settings) -> 연결(Connection) -> FTP -> 패시브(Passive)
모드 선택
- FileZilla:
(2) FTP 서버에서 패시브 모드 활성화
- vsftpd (Very Secure FTP Daemon)
vsftpd.conf
설정 파일 수정:pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
pasv_address=<서버의 공인 IP 또는 내부 IP>
- 설정 후
vsftpd
서비스 재시작:systemctl restart vsftpd
- ProFTPD
proftpd.conf
파일 수정:PassivePorts 50000 51000
- 적용 후 재시작:
systemctl restart proftpd
- Pure-FTPd
pure-ftpd -p 50000:51000
3. 방화벽 설정
FTP 패시브 모드에서는 클라이언트가 랜덤한 포트(예: 50000-51000)로 접속하므로 해당 포트를 방화벽에서 열어야 합니다.
(1) iptables 사용 시
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 50000:51000 -j ACCEPT
service iptables save
(2) firewalld 사용 시 (RHEL/CentOS 7 이상)
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=50000-51000/tcp --permanent
firewall-cmd --reload
4. 확인 방법
- FTP 서버에서 로그 확인 (
/var/log/vsftpd.log
또는/var/log/xferlog
) - 클라이언트에서 패시브 모드로 접속 및 파일 업로드/다운로드 테스트:
ftp <FTP_SERVER>
ftp> passive
ftp> ls
ftp> get testfile.txt
ftp> put testfile.txt
netstat
또는ss
명령어로 포트 확인:netstat -tulnp | grep ftp
이제 패시브 모드에서 FTP가 정상적으로 작동할 것입니다.