我在 Google Cloud 中有一个 Windows 2016 VM 实例。我添加了一条入站 Windows 防火墙规则以允许端口 21。我已为 Google Cloud 配置了端口 21 的入站防火墙规则以及所有端口的出站防火墙规则,以实现被动。
我可以连接到我的 FTP 服务器,但是收到此错误。
Response: 425 Can't open data connection for transfer of "/"
Error: Failed to retrieve directory listing
请注意,我也在 filezilla 中启用了 TLS,但无论是否启用 TLS,我都会收到相同的错误。
我尝试完全禁用 Windows 防火墙,但没有成功,所以要么是我的 gcloud 防火墙设置错误,要么是我的 filezilla 配置错误。
任何帮助,将不胜感激!
答案1
答案2
如果禁用 TLS 有效,则表明防火墙未配置或配置错误。即使您声称已禁用所有防火墙,但实际上似乎并未禁用。
有些防火墙足够智能,可以检查 FTP 流量,并根据需要打开 FTP 数据连接端口。但如果控制连接已加密,防火墙就无法检查它,也无法为您打开数据连接端口。因此,使用 TLS,您必须自己配置规则。
例如,在 Windows 防火墙中,该功能被称为“状态 FTP 过滤”,并使用netsh advfirewall set global StatefulFtp ...
命令进行配置。
答案3
简短
您不需要outbound rules
在 中进行配置Google Cloud
。除非port 21
您需要添加其他端口,例如(50000-50500
添加Google Cloud Firewall
到指定端口 21 的相同规则),然后在Windows Firewall
(添加到指定端口 21 的相同规则) 中,并在页面中50000-50500
添加FileZilla Settings
Passive mode settings
属于
以下是基于 的完整说明(以防万一有人需要)Sever 2008
,因为我不使用Server 2016
(一切都应该非常相似)。我也没有使用,TLS
因为我不需要它。以下设置允许FTP clients
通过 工作Passive mode
。
Google 云设置
- 去
VPC network -> Firewall rules
; - 点击
Create firewall rule
顶部;- 姓名:(
default-allow-ftp
无所谓); - 网络:(
default
或您需要的网络) - 优先级:(
1000
无所谓); - 交通方向:
Ingress
; - 匹配时的操作:允许目标标签:留空(或选择您需要的标签);
- 源IP范围:(
0.0.0.0/0
或您需要的IP范围) - 第二个源过滤器:(
None
或您需要的过滤器); - 协议和端口:指定的协议和端口:
tcp:21,50000-50500
。
- 姓名:(
Windows 防火墙设置(取自这里。源代码还展示了如何Firewall
使用Command Line
和进行设置PowerShell
):
- 使用管理员账户登录;
- 点击开始->管理工具->高级安全 Windows 防火墙;
- 在左侧面板中,右键单击
Inbound Rules
,然后单击New Rule
; - 在
Rule Type
部分中,选择Port
并单击Next
: - 在该
Protocol and Ports
部分中,选择TCP
协议类型并21, 50000-50500
在输入字段中输入Specific local ports
; - 在
Action
部分中,选择Allow the Connection
并单击Next
; - 在
Profile
部分中,选择所有三个选项并单击Next
。如果您希望将连接限制到特定配置文件,您可以通过仅选择您认为适合您设置的配置文件来实现。对于此示例,我们将在所有配置文件上打开端口; - 在该
Name
部分中,输入此规则的描述性名称。建议在名称中列出端口号,以便规则易于识别。Finish
准备好后单击。
FileZilla 设置
- 编辑——>设置;
- 在树中选择
General setting
;- 将字段更改
Listen on these ports:
为21
;
- 将字段更改
在树中选择
Passive mode settings
;- 勾选
Use custom port range:
,5000
输入50500
; - 选择
Use the following IP
并输入您的服务器 IP(如果是静态的)或选择Retrieve external IP address from:
;
- 勾选
编辑->用户;
- 在树中选择
General
;- 在右侧单击
Add
并提供username
您要用于连接的内容。这username
与 Windows 用户帐户没有任何关系,因为 FileZilla 使用其自己的用户帐户系统; - 勾选
Enable account
,并且如果需要,Password
;
- 在右侧单击
- 在树中选择
Shared folder
;- 添加您想要作为“主目录”的文件夹并定义文件和目录的必要权限。
笔记:
FileZilla 的权限与 Windows 的“主目录”文件夹权限设置没有任何关系。这意味着,如果 FileZilla 的设置允许用户创建文件夹\文件,但通过配置的权限
Windows File Explorer
不允许这样做,则用户无法在“主目录”中写入任何文件\文件夹。对于 Windows,添加到 FileZilla 的用户类似于“未知”,因此 Windows 根本不允许任何访问“主目录”文件夹。为了解决这个问题,我只需
All
在“主目录”文件夹的安全设置中添加配置文件即可。
奖励#1
如果每次启动时都FileZilla interface
出现此情况,您可以通过以下方式禁用此类行为msconfig
:
- 开始 -> 输入
msconfig
; Startup
标签->取消勾选FileZilla Server
->确定;- 重启。
奖励#2
如果 Linux 用户想要从 ftp 服务器下载文件,使用以下命令command line
:
wget ftp://username:password@server_ip_address/home_dir/file_name