Windows Server 2022에서 IIS(Internet Information Services)를 통해 FTP 서버를 구성하다가 겪은 골치 아픈 문제를 공유해보려 해요. FTP 사이트를 기본 FTP로 설정하면서 제어 포트는 기본 21번으로 유지하고, 데이터 포트를 기본값(20번대)에서 보안상 5000~5100번대로 변경했는데, 클라이언트 연결 시 "서버가 알 수 없는 주소와 수동형 응답을 보냈습니다. 대신 서버 주소를 사용합니다"라는 에러가 발생했어요.
이 에러 때문에 파일 전송이 제대로 안 되고, PASV(Passive) 모드 응답에서 P1(포트 번호의 첫 번째 부분)이 237로 나오는 걸 발견했죠. (정상적으로는 5000번대여야 하는데!) 원인을 파헤치다 보니 간단한 실수였어요. 이 경험을 바탕으로 단계별로 정리해 볼게요. 만약 비슷한 이슈로 고생 중이시라면, 이 포스트가 도움이 되길 바래요!
문제 상황: FTP 데이터 포트 설정 후 PASV 응답 이상 (제어 포트 21번 기준)
배경
- 환경: Windows Server 2022, IIS 10.0
- 목적: FTP 사이트를 생성하고, 기본 FTP로 설정. 제어 포트는 기본 21번으로 유지하면서 데이터 포트를 방화벽/보안 정책에 맞춰 5000~5100번대로 변경.
- 발생 에러:
서버가 알 수 없는 주소와 수동형 응답을 보냈습니다. 대신 서버 주소를 사용합니다.- 이 에러는 FTP 클라이언트(예: FileZilla)가 PASV 명령에 대한 서버 응답을 해석할 때 발생해요. 서버가 PASV 응답으로 "227 Entering Passive Mode (x,x,x,x,p1,p2)" 형식으로 포트 정보를 보내는데, 여기서 p1*p256 + p2가 실제 데이터 포트가 되어야 하죠. (제어 포트 21번 연결 후 PASV 요청 시 발생)
- 제 경우, 응답이 "227 Entering Passive Mode (x,x,x,x,237,xx)"처럼 나와서 p1이 237(기본값 근처)로 고정됐어요. 결과적으로 클라이언트가 5000번대 포트를 무시하고 연결 실패!
왜 이런 일이?
FTP 설정 변경 후에도 서버가 이전 설정(기본 데이터 포트)을 유지하고 있었어요. IIS에서 포트 범위를 바꿨지만, FTPSVC 서비스를 재시작하지 않아 설정이 제대로 적용되지 않았기 때문이었죠. IIS Manager에서 변경만 하고 서비스를 재시작 안 하면, 메모리나 캐시에 남아 있는 이전 설정이 우선 적용되는 경우가 많아요. (제어 포트 21번은 기본이니 별도 조정 없이 유지됨)
해결 과정: 단계별 가이드 (제어 포트 21번 기본)
이 문제를 해결하는 데 10분도 안 걸렸어요. 아래 단계를 따라 해보세요! 제어 포트는 기본 21번으로 가정하고 진행해요.
1. IIS에서 FTP 데이터 포트 설정 확인
- IIS Manager 열기: 서버 관리자 > 도구 > IIS 관리자.
- FTP 사이트 선택: 왼쪽 트리에서 해당 FTP 사이트를 오른쪽 클릭 > "FTP 방화벽 지원" (또는 "FTP 서버" > "FTP 방화벽 지원").
- 데이터 채널 포트 범위 설정:
- 외부 IP 주소: 서버의 공인 IP 또는 빈 값 (자동).
- 데이터 채널 포트 범위: 5000-5100 입력.
- 제어 포트 확인: FTP 사이트 고급 설정에서 포트가 21번으로 되어 있는지 확인 (기본값이니 변경 불필요).
- 적용 클릭. (여기서 변경했지만, 아직 서비스 재시작 안 함!)
2. FTPSVC 서비스 재시작 (핵심!)
- 서비스 관리자 열기: Windows 키 + R > services.msc 입력.
- FTPSVC 찾기: 목록에서 "Microsoft FTP Service" (또는 FTPSVC) 검색.
- 오른쪽 클릭 > 다시 시작 (Restart).
- 만약 서비스가 안 보이면, IIS 역할이 제대로 설치됐는지 확인하세요. (서버 관리자 > 역할 및 기능 추가 > Web Server (IIS) > FTP 서버).
3. 방화벽 규칙 업데이트
- 제어 포트 21번과 데이터 포트 범위 변경에 맞춰 Windows Defender Firewall 업데이트:
- 제어판 > 시스템 및 보안 > Windows Defender Firewall > 고급 설정.
- 인바운드 규칙 확인/새로 만들기:
- TCP 포트 21 (제어 포트): 이미 열려 있어야 함. (이름 "FTP Control Port")
- TCP 포트 5000-5100 (데이터 포트): 새 규칙으로 열기, 원격 IP (클라이언트 범위), 이름 "FTP Data Ports".
4. 테스트
- FTP 클라이언트 연결: FileZilla나 WinSCP로 FTP 연결 시도 (제어 포트 21번, PASV 모드).
- PASV 응답 확인: 클라이언트 로그에서 "227 Entering Passive Mode (x,x,x,x,p1,p2)"를 봐요. p1은 이제 19~20 (5000/256 ≈ 19.5) 정도로 나와야 해요. (예: 5000번 포트 = p1=19, p2=128).
- 성공! 에러 없이 파일 전송됨. (제어 포트 21번 연결이 안정적으로 유지됨)
추가 팁: 이런 오류 피하기 (제어 포트 21번 환경)
- 항상 서비스 재시작: IIS 설정 변경 후 FTPSVC, WAS (Windows Process Activation Service) 재시작 필수. 명령어로 하려면 PowerShell에서 Restart-Service FTPSVC 입력.
- 로그 확인: 이벤트 뷰어 (Windows 로그 > 응용 프로그램)에서 "Microsoft-Windows-IIS-FTP" 소스 검색. PASV 관련 경고가 나올 수 있어요. 제어 포트 21번 로그도 함께 확인.
- 보안 주의: 일반 FTP는 평문 전송이니, 내부 네트워크나 VPN에서만 사용하세요. 데이터 포트 범위는 100개 정도만 두고, 불필요한 포트는 방화벽으로 막아요.
- 대안: Active 모드 대신 PASV만 강제하려면 클라이언트 설정에서 조정. 제어 포트 변경 필요 시 IIS에서만 수정 후 재시작.
반응형