
내 FTP 서버에 문제가 있어서 일주일 넘게 고치려고 노력했습니다.
내 구성:
- 저는 Raspberry Pi에서 Raspbian을 실행하고 있습니다.
- 내 FTP 서버는 순수 FTPD이며 다음 스위치를 사용하여 실행하고 있습니다.
/usr/local/sbin/pure-ftpd -D -C 5 -E -A -H -x -p 35000:36000 -u 0 -y 5:3 -Y 1
- "--with-tls" 옵션을 사용하여 컴파일했습니다.
- 나는 사용하고있다명시적인 TLS 암호화, (나도 암시적으로 동일한 결과를 시도했습니다)
- pure-ftpd의 -p 스위치로 정의된 대로 패시브 포트 범위를 포트 전달했습니다.
- 또한 포트 20에서 21로 포트 전달을 했습니다.
내가 실행 중인 다른 서버:
- 삼바 서버
- Apache 웹 서버
- 사용자 정의 Python 소켓 서버
- 내장된 shh/sftp 서버
또한 no-ip DUC 클라이언트가 실행 중입니다.
간단히 말해서 pure-ftpd에서 내가 겪고 있는 문제는 다음과 같습니다.
- TLS가 없는 LAN의 FTP(활성 및 수동): 작동 중
- TLS(활성 및 수동)를 사용하는 LAN의 FTP: 작동 중
- TLS가 없는 WAN의 FTP(수동): 작동 중
- TLS(활성 및 수동)를 사용하는 WAN의 FTP: 작동하지 않음
- WAN에서는 작동하지 않으므로 포트를 변경할 수 없습니다.
오류 로그와 내가 시도한 작업은 다음과 같습니다.
ftptest.net 결과(TLS를 사용하는 FTP의 경우):
........
명령: PASV
답글: 227 패시브 모드 진입 (192,168,0,4,138,78)
오류: 서버가 PASV 응답에서 라우팅할 수 없는 개인 IP 주소를 반환했습니다.
-P 스위치를 사용하여 PASV IP 주소를 지정해야 한다는 포럼을 읽었으며, 그 결과는 다음과 같습니다.
답장: 211-지원되는 확장 프로그램:
.....................
오류: 줄 바꿈 없이 캐리지 리턴이 수신되었습니다.
그리고 이것은TLS가 없는 경우와 있는 경우 모두!예, -P 스위치는 전혀 작동하지 않습니다!
또한 패시브 모드 포트가 정확하다는 점도 지적해야 합니다(PASV 명령에서 가져옴).
Filezilla 로그(명시적 TLS 포함):
명령: PASV
응답: 227 패시브 모드 진입 중 (192,168,0,4,138,251)
상태: 서버가 라우팅할 수 없는 주소로 수동 응답을 보냈습니다. 대신 서버 주소를 사용합니다.
명령: MLSD
오류: 데이터 연결을 설정할 수 없습니다. ECONNREFUSED - 서버에서 연결을 거부했습니다.
오류: 서버에 의해 연결이 종료되었습니다.
오류: 디렉터리 목록을 검색하지 못했습니다.
-P 스위치 사용:
"서버가 라우팅할 수 없는 주소를 보냈습니다*"가 없다는 점을 제외하면 동일합니다.
또한 다음 명령을 사용하여 모든 것을 허용하여(따라서 방화벽을 비활성화하여) 방화벽(iptables)을 조작해 보았습니다.
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
또한 기본 포트를 변경할 수 없습니다. 변경할 경우 연결 거부 오류가 발생하기 때문입니다.
그리고 오늘 막 나타나기 시작한 또 다른 이상한 증상이 있습니다.
포트 21~21만 열 수 있습니다(작동합니다). 20을 열면 SSH 서버를 얻게 되기 때문입니다.
이에 대한 기록:
상태: 연결됨, 환영 메시지를 기다리는 중... 답장:
SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
오류: 답장에 유효한 응답 코드가 포함되어 있지 않습니다.
또한 포트 443, 989에서 990(암시적 TLS용)을 포워딩하고 Raspberry Pi를 DMZ 호스트로 설정해 보았습니다.
참고: 저는 vsftpd가 느리고 보안 FTP를 지원하지 않았기 때문에 전환했습니다(Raspberry Pi용 3.x는 보안 FTP 지원으로 컴파일해야 하지만 컴파일 오류가 발생했습니다). 그리고 proftpd를 사용하지 않습니다. TLS 지원으로 컴파일할 수 없습니다
/var/log/messages는 유용한 정보를 제공하지 않습니다(tls 유무에 관계없이 사용자가 매번 로그인한다고만 말합니다).
제가 정말로 길을 잃었기 때문에 여러분이 저를 여기서 도와주실 수 있기를 바랍니다!
답변1
마침내 해결되었습니다!내가 해야 할 일은 패시브 포트 범위를 50000-51000에서 12000-13000으로 변경하는 것뿐이었습니다! 이제 모든 것이 잘 작동합니다!!! 나는 이제 다음과 같이 pure-ftpd를 사용하고 있습니다:
/usr/local/sbin/pure-ftpd -D -C 5 -E -A -H -x -S 192.168.0.4,60 -p 12000:13000 -u 0 -y 5:3 -Y 1 -P &