vsftpd 패시브모드 Passive mode 설정은 어떻게 하나요?
💡 요약 정리
- FTP는 Active 모드와 Passive 모드를 제공합니다.
- Passive 모드는 일반적인 FTP 프로그램에서 주로 사용되며, 클라이언트가 서버로 연결을 시도합니다.
- 패시브 모드 설정 시, 서버가 사용할 포트 범위(예: 50000~50001)를 정의하고 해당 포트를 방화벽에서 개방해야 합니다.
- 설정이 완료되면 반드시 iptables와 vsftpd 서비스를 재시작해야 적용됩니다.
1. 설치 환경
- CentOS 5.x x86 (64bit) / 6.x 환경도 동일함
2. 패시브 모드(Passive mode)란?
FTP 서비스는 다른 인터넷 서비스와는 달리 Active, Passive 모드가 존재합니다. 일반적으로 웹브라우저는 Passive 모드가 기본입니다.
Active Mode
- 모든 클라이언트에서 서버 측 21번 포트로 접속(login)을 시도하고 클라이언트가 사용할 두 번째 포트를 서버에 알려줍니다.
- 서버는 클라이언트에게 ack를 보내고, 서버의 20번 포트가 클라이언트가 알려준 두 번째 포트로 접속을 시도합니다.
- 문제점:
- 일반적인 TCP/IP 통신 방식이 아닌 서버에서 클라이언트로 접속을 시도합니다.
- 클라이언트 PC에 방화벽이나 공유기가 있어 외부에서 접근을 허용하지 않는 경우, 서버(20번 포트) → 클라이언트(1024~65535 포트)로의 접속이 실패할 수 있습니다. 그 결과, FTP 로그인은 가능하지만 데이터 전송, 디렉토리/파일 리스트 수신이 되지 않는 문제가 발생합니다.
Passive Mode
- 모든 클라이언트에서 서버 측 21번 포트로 접속(login)을 시도합니다.
- 서버는 클라이언트에게 서버에서 사용할 두 번째 포트(1024~65535 포트)를 알려줍니다.
- 클라이언트는 자신이 연 포트에서 서버가 알려준 포트로 접속해 데이터를 전송합니다.
- 문제점:
- 서버에서 클라이언트가 접속할 수 있도록 1024~65535번 포트를 개방해야 합니다.
- 다행히도 대부분의 FTP 프로그램은 passive 접속 범위를 제한하는 기능이 있어 일부 포트만 선택적으로 사용할 수 있게 되었고, 방화벽에서도 해당 포트만 개방하면 됩니다.
3. vsftpd 설치 확인
vsftpd가 설치되어 있는지 확인하고, 설치되어 있지 않다면 yum으로 설치합니다.
[root@localhost /root]# rpm -qa | grep vsftpd
[root@localhost /root]# yum install vsftpd
설치 과정에서 시스템 패키지 정보를 불러온 후, vsftpd 패키지를 다운로드하고 설치 완료 메시지를 확인할 수 있습니다.
4. vsftpd Passive 모드 설정
/etc/vsftpd/vsftpd.conf 파일을 열어 패시브 모드 옵션을 구성합니다.
[root@localhost /root]# vi /etc/vsftpd/vsftpd.conf
다음 라인을 파일의 가장 하단에 추가합니다:
# 패시브모드 활성화
pasv_enable=YES
# 패시브모드에서 사용할 포트 범위 설정
pasv_min_port=50000
pasv_max_port=50001
5. 방화벽에서 Passive 포트 개방
vsftpd.conf에 설정한 포트를 방화벽에서도 허용해야 합니다.
# 기존 iptables 설정 저장
[root@localhost /root]# /etc/sysconfig/iptables save
iptables 파일 편집:
[root@localhost /root]# vi /etc/sysconfig/iptables
기존 내용에 다음 라인을 추가합니다:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50001 -j ACCEPT
6. iptables 및 vsftpd 서비스 재시작
변경 사항을 적용하기 위해 관련 서비스를 재시작합니다.
[root@localhost /root]# /etc/sysconfig/iptables start
[root@localhost /root]# /etc/rc.d/init.d/vsftpd start
각 명령어 실행 후 [ OK ] 메시지가 출력되면 정상적으로 반영된 것입니다.