FTP 패시브 모드 포트 범위 점검
FTP 서버의 패시브 모드용 포트 범위가 열려 있고 방화벽 너머로 닿는지 확인합니다. "unable to open data connection" 같은 오류를 진단할 때 꼭 필요합니다.
패시브 모드란?
FTP 패시브 모드(PASV)에서는 서버가 데이터 전송용으로 번호가 높은 임의의 포트를 열고, 클라이언트에게 어느 포트로 접속하면 되는지 알려 줍니다. 방화벽이 이 포트들을 막으면, 21번 포트의 제어 연결이 멀쩡히 동작하더라도 파일 전송은 실패합니다.
자주 쓰는 패시브 포트 범위
| 범위 | 사용처 |
|---|---|
| 49152–65535 | IANA 동적/임시 포트 범위(많은 서버의 기본값) |
| 40000–40100 | 흔히 쓰는 사용자 지정 범위(cPanel, Plesk) |
| 30000–31000 | 흔히 쓰는 사용자 지정 범위(FileZilla Server 기본값) |
액티브 모드와 패시브 모드의 차이
FTP는 연결을 두 개 씁니다. 명령을 주고받는 21번 포트의 제어 연결과, 파일을 전송하거나 디렉터리 목록을 받을 때마다 따로 여는 데이터 연결입니다. 모드는 이 두 번째 연결을 어느 쪽이 여는지를 정합니다.
| 액티브 모드(PORT) | 패시브 모드(PASV) | |
|---|---|---|
| 데이터 연결을 여는 쪽 | 서버(클라이언트 쪽으로 되접속) | 클라이언트(서버 쪽으로 접속) |
| 클라이언트가 보내는 명령 | 자신의 주소와 포트를 담은 PORT(또는 EPRT) | PASV(또는 EPSV) |
| 닿을 수 있어야 하는 곳 | 클라이언트 쪽 포트(가정용 공유기와 회사 방화벽이 막는 곳) | 서버의 패시브 포트 범위 |
| 쓰는 곳 | Windows 기본 ftp.exe, 오래된 스크립트 | 거의 모든 최신 클라이언트(기본값) |
패시브 모드는 클라이언트에서 나가는 연결만 있으면 되기 때문에 NAT 뒤에서도 동작하고, 그래서 최신 클라이언트는 기본으로 이 모드를 씁니다. 대신 부담은 서버로 넘어갑니다. 서버 방화벽은 21번 포트뿐 아니라 패시브 범위 전체에서 클라이언트를 들여보내야 합니다.
227 응답 읽는 법
서버는 PASV에 숫자 여섯 개로 응답합니다. 예를 들면 227 Entering Passive Mode (203,0,113,10,195,80)입니다. 앞의 네 개는 접속할 IP 주소이고, 뒤의 두 개는 포트로 195 x 256 + 80 = 50000이 됩니다. 흔히 생기는 문제는 두 가지입니다.
- 포트가 방화벽에서 허용한 범위 밖에 있습니다. 서버의 패시브 범위를 열어 둔 범위에 맞추거나, 서버가 실제로 쓰는 범위를 여세요.
- 주소가 사설 IP입니다(예: 192.168.1.10). 서버가 NAT 뒤에 있으면서 내부 주소를 알려 주기 때문입니다. 이러면 클라이언트는 디렉터리 목록을 받을 때마다 멈춥니다. 아래 설정으로 서버에 공인 주소를 알려 주세요. 서버 주소를 대신 써서 문제를 피해 가는 클라이언트도 있지만, 고쳐야 할 곳은 서버입니다.
EPSV를 쓰면 응답은 229 Entering Extended Passive Mode (|||50000|)처럼 포트만 담고 주소는 담지 않으므로, 사설 주소 문제가 생기지 않습니다. 다만 포트가 열려 있어야 하는 것은 마찬가지입니다.
주요 서버에서 패시브 범위 설정하기
- vsftpd: vsftpd.conf에
pasv_min_port=40000,pasv_max_port=40100을 지정하고, 서버가 NAT 뒤에 있으면pasv_address에 공인 IP를 넣습니다. - ProFTPD:
PassivePorts 40000 40100에 더해, 공인 주소용으로MasqueradeAddress를 지정합니다. - Pure-FTPd:
PassivePortRange 40000 40100과ForcePassiveIP를 지정합니다. - FileZilla Server: 패시브 모드 설정에서 사용자 지정 포트 범위와 알려 줄 공인 IP를 지정할 수 있습니다.
- IIS: 서버 수준의 FTP 방화벽 지원(FTP Firewall Support)에서 데이터 채널 포트 범위와 방화벽의 외부 IP 주소를 설정합니다. 새 범위를 적용하려면 FTP 서비스를 다시 시작해야 할 수도 있습니다.
그런 다음 서버 앞에 있는 모든 곳(운영 체제 방화벽, 클라우드 보안 그룹, 공유기의 포트 포워딩)에서 같은 범위의 TCP를 열고, 위 도구로 그 범위의 포트를 몇 개 확인하세요.
결과 읽는 법
열림은 인터넷에서 그 포트로의 TCP 연결이 받아들여졌다는 뜻이므로, 중간에 막는 것이 없습니다. 응답 없음은 대개 방화벽이 연결 시도를 조용히 버렸다는 뜻입니다. 닫힘은 무언가가 거부로 응답했다는 뜻인데, 서버 자신인 경우가 많습니다. 많은 FTP 서버가 클라이언트가 PASV를 보낸 직후 잠깐만 패시브 포트에서 대기하기 때문입니다.
그러니 아무 전송도 하지 않는 서버라면 범위 안의 포트가 닫혀 있어도 정상입니다. 진짜 경고 신호는 범위 전체가 응답 없음으로 나오는 경우입니다. 최종 확인은 실제 클라이언트로 패시브 모드에서 디렉터리 목록을 받아 보는 것입니다. 로그인은 되는데 목록에서 멈춘다면 막힌 것은 데이터 연결입니다. FTP 연결 테스터로는 그 앞부분, 즉 서버가 응답하고 로그인을 받아 주는지를 확인할 수 있습니다.