Debian 上的 Proftpd - 文件传输问题

Debian 上的 Proftpd - 文件传输问题

我租了一个安装了 Debian 的 VPS。最近我安装了 proftpd,以便允许所有人拥有只读访问权限,并为特定用户提供完全访问权限。

我根据一些指南配置了 proftpd(使用 TLS)。我已解锁被动端口(这些端口和通过 iptables 的端口 21)并设置了匿名登录。

当我登录时,一切都很好 - 快速登录,快速浏览目录...当我尝试下载文件时出现问题 - winscp/filezilla/python,全部卡在下载文件上,然后断开连接(文件约为 1kB,非常小)。当我通过 SFTP 连接到服务器时,我没有遇到任何问题,速度很快。

有什么想法吗?你需要我的proftpd.conf文件吗?

更新:

我发现我需要添加一些信息,感谢第一条评论(关于 SCP):

  • 我希望能够匿名查看文件,最好是通过网络浏览器,但这不是必须的。
  • 我需要设置一个应用程序,将 VPS 上的整个文件夹与我的硬盘上的文件夹同步(我计划通过 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。然后,我对单个文件进行了“获取”,过了一会儿,我得到了“远程主机关闭连接”的信息。以下是 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. 如果您想在 Netfilter 中使用某种“有状态”的方法来检测 FTP 数据流,则需要加载特殊的内核模块来解码控制 FTP 流;
  2. 这不适用于 TLS,因为内核无法解码所述 FTP 控制流。

SCP(和 SFTP)可以正常工作,因为它们在单个 TCP 流中多路复用控制流和数据流。

至于同步...首先,忘记它,scp因为这是一个遗留协议;改用 SFTP。 似乎是一个跨平台的 Python SFTP 实现,所以它可能适合你。顺便说一句,Windows 对 SFTP 前端软件有很好的支持(在 Google 上搜索 WinSCP)。

您还可以考虑其他同步方式。例如,rsync有 Windows 版本,它可以说是现存最好的文件系统同步工具。您还可以考虑 WebDAV 甚至实现 RESTful。

相关内容