我租了一个安装了 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 使用动态端口分配(在被动模式下,当客户端想要下载或上传文件时,服务器会为数据传输流分配一个动态端口,将其告知客户端并期望客户端连接到它)。
这意味着:
- 如果您想在 Netfilter 中使用某种“有状态”的方法来检测 FTP 数据流,则需要加载特殊的内核模块来解码控制 FTP 流;
- 这不适用于 TLS,因为内核无法解码所述 FTP 控制流。
SCP(和 SFTP)可以正常工作,因为它们在单个 TCP 流中多路复用控制流和数据流。
至于同步...首先,忘记它,scp
因为这是一个遗留协议;改用 SFTP。 这似乎是一个跨平台的 Python SFTP 实现,所以它可能适合你。顺便说一句,Windows 对 SFTP 前端软件有很好的支持(在 Google 上搜索 WinSCP)。
您还可以考虑其他同步方式。例如,rsync
有 Windows 版本,它可以说是现存最好的文件系统同步工具。您还可以考虑 WebDAV 甚至实现 RESTful。