데비안의 Proftpd - 파일 전송 문제

데비안의 Proftpd - 파일 전송 문제

데비안을 설치한 임대 VPS가 있습니다. 최근에 나는 모든 사람에게 읽기 전용 액세스를 허용하고 특정 사용자에게 전체 액세스를 허용하기 위해 proftpd를 설치했습니다.

여러 가이드에 따라 proftpd(TLS 포함)를 구성했습니다. 수동 포트(iptables를 통한 포트 21)를 잠금 해제하고 익명 로그인을 설정했습니다.

로그인하면 모든 것이 괜찮습니다. 빠른 로그인, 디렉터리를 빠르게 탐색하는 중... 파일을 다운로드하려고 할 때 문제가 발생합니다. - wincp/filezilla/python, 모두 파일 다운로드에 멈춘 다음 연결이 느슨해집니다(파일은 ~ 1kB로 매우 작습니다.) SFTP를 통해 서버에 연결하면 아무런 문제도 없고 최고 속도도 나옵니다.

어떤 아이디어가 있나요? 내 파일이 필요해요 proftpd.conf?

업데이트:

첫 번째 댓글(SCP에 대한) 덕분에 몇 가지 정보를 추가해야 한다고 생각합니다.

  • 익명으로 파일을 볼 수 있기를 원합니다. 가장 좋은 방법은 웹 브라우저를 이용하는 것이지만 필수는 아닙니다.
  • VPS의 전체 폴더를 내 HDD의 폴더와 동기화하는 애플리케이션을 설정해야 합니다(Python을 통해 이 작업을 수행할 계획이지만 Shell/Bash도 좋습니다).
  • 전체 카탈로그 또는 변경된 파일만 다운로드/업로드할 수 있기를 원합니다.
  • 타사 프로그램 없이도 이 작업을 수행할 수 있어야 합니다. cmdline/bash 또는 공식 Python 라이브러리를 통해. Windows와 Fedora 모두에서 작업해야 함

내 iptables 구성:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-ssh-ddos  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:60000:65535
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Chain fail2ban-ssh-ddos (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

TLS를 끄고 게스트 계정을 통해 연결하고 바이너리 모드를 켜고 포트 21(서버측 ofc)에서 tcpdump를 시작했습니다. 그런 다음 단일 파일에 대해 'get'을 수행했고 잠시 후 "원격 호스트에 의해 연결이 닫혔습니다"라는 메시지가 표시되었습니다. 다음은 FTP 입력입니다.

ftp> get light.cfg
200 PORT command successful
150 Opening BINARY mode data connection for light.cfg (94 bytes)
Connection closed by remote host.

여기에서 새 줄로 구분된 get 및 Connection_closed를 볼 수 있습니다.

15:12:15.836468 IP (tos 0x0, ttl 119, id 30359, offset 0, flags [DF], proto TCP (6), length 67)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0x5526 (correct), seq 139:166, ack 575, win 7618, length 27
15:12:15.836636 IP (tos 0x0, ttl 64, id 50952, offset 0, flags [DF], proto TCP (6), length 69)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0x7049 (correct), seq 575:604, ack 166, win 115, length 29
15:12:15.856530 IP (tos 0x0, ttl 119, id 30360, offset 0, flags [DF], proto TCP (6), length 56)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [P.], cksum 0xd20f (correct), seq 166:182, ack 604, win 7589, length 16
15:12:15.868348 IP (tos 0x0, ttl 64, id 50953, offset 0, flags [DF], proto TCP (6), length 106)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [P.], cksum 0xba9a (correct), seq 604:670, ack 182, win 115, length 66
15:12:15.934002 IP (tos 0x0, ttl 119, id 30365, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0ccc (correct), ack 670, win 7523, length 0


15:13:15.909873 IP (tos 0x0, ttl 119, id 30372, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [F.], cksum 0x0ccb (correct), seq 182, ack 670, win 7523, length 0
15:13:15.910056 IP (tos 0x0, ttl 64, id 50954, offset 0, flags [DF], proto TCP (6), length 40)
    vz31640.dahost.pl.ftp > 83-144-76-138.static.chello.pl.54225: Flags [F.], cksum 0x29ba (correct), seq 670, ack 183, win 115, length 0
15:13:15.922725 IP (tos 0x0, ttl 119, id 30373, offset 0, flags [DF], proto TCP (6), length 40)
    83-144-76-138.static.chello.pl.54225 > vz31640.dahost.pl.ftp: Flags [.], cksum 0x0cca (correct), ack 671, win 7523, length 0

답변1

설정을 게시해 주세요 iptables. FTP는 동적 포트 할당을 사용하므로 FTP에서 작동시키는 것은 까다로울 수 있습니다. 수동 모드에서는 클라이언트가 파일을 다운로드하거나 업로드하려고 할 때 서버가 데이터 전송 스트림에 동적 포트를 할당하고 이를 클라이언트에 알려줍니다. 클라이언트가 연결될 것으로 예상합니다).

이는 다음을 의미합니다.

  1. FTP 데이터 스트림을 감지하기 위해 Netfilter에서 "상태 저장" 접근 방식을 사용하려면 제어 FTP 스트림을 디코딩하기 위해 특수 커널 모듈을 로드해야 합니다.
  2. 커널이 해당 FTP 제어 스트림을 디코딩할 수 없기 때문에 TLS에서는 작동하지 않습니다.

SCP(및 SFTP)는 단일 TCP 스트림에서 제어 및 데이터 스트림을 다중화하기 때문에 제대로 작동합니다.

동기화에 관해서는... 먼저 scp이것이 레거시 프로토콜이므로 잊어버리세요. 대신 SFTP를 사용하세요. 이것크로스 플랫폼 Python SFTP 구현인 것으로 보이므로 귀하에게 적합할 수도 있습니다. 그런데 Windows는 SFTP 프런트 엔드 소프트웨어(WinSCP용 Google)를 훌륭하게 지원합니다.

그리고 다른 동기화 방법도 고려할 수 있습니다. 예를 들어 rsyncWindows 빌드가 있으며 현존하는 최고의 파일 시스템 동기화 도구입니다. WebDAV를 고려하거나 RESTful 구현을 고려할 수도 있습니다.

관련 정보