이번에 FTP 서버를 운영하면서 권한 인증까지는 되지만 파일 전송이나 목록 출력은 안되는 상황이 있었습니다.


상태: example.host.com 주소 해석

상태: 123.123.123.123에 연결...

상태: 연결 수립, 환영 메시지를 기다림...

응답: 220

명령: USER account

응답: 331 Please specify the password.

명령: PASS ***********

응답: 230 Login successful.

명령: OPTS UTF8 ON

응답: 200 Always in UTF8 mode.

상태: 연결됨

상태: 디렉터리 목록 조회...

명령: PWD

응답: 257 "/"

명령: TYPE I

응답: 200 Switching to Binary mode.

명령: PASV

응답: 227 Entering Passive Mode (123,123,123,123,156,81).

명령: LIST

오류: 연결 시간 초과

오류: 디렉터리 목록 조회 실패


알아보니 FTP는 제어 채널과 데이터 채널이 따로 있었습니다. 제어 채널은 보통 21번 포트, 데이터 채널은 서버에서 지정해준 포트를 쓰는데 방화벽에서 데이터 채널 포트 범위를 막고 있었던 게 원인이었습니다.


먼저 포트 범위를 확인하고 방화벽에서 INBOUND 정책을 설정해주면 해결됩니다.


예) FTP 서버를 vsftpd로 사용할 때 포트 범위 확인하기


$ cat /etc/vsftpd.conf

pasv_enable=YES

pasv_min_port=3500

pasv_max_port=5000


이렇게 확인하면 3500번 포트부터 5000번 포트까지 개방하면 됩니다.