我正在尝试在 Windows 10 上使用 IIS 配置 FTP 站点。与服务器内部(防火墙后面)地址建立的主动连接正常工作(例如 10.0.1.4),但与服务器外部 IP 的任何类型的连接(主动或被动)均会失败。被动连接(我的目标是使用这些连接)会失败,并出现“无法检索目录列表”错误,如下所示:
Status: Connecting to XX.XXX.XX.XX:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is current directory.
Command: TYPE I
Response: 200 Type set to I.
Command: PASV
Response: 227 Entering Passive Mode (XX,XXX,XX,XX,4,2).
Command: LIST
Response: 150 Opening BINARY mode data connection.
Error: The data connection could not be established: ECONNREFUSED -
Connection refused by server
我尝试过的:
- 尝试了被动和主动连接
- 检查防火墙(硬件 SonicWall),确保端口 20、21 和 1025-1048 全部打开
- 禁用源计算机和目标计算机上的 Windows 防火墙;没有安装其他软件防火墙。同样禁用了电缆调制解调器的防火墙。
IIS的FTP:防火墙支持中数据通道端口范围设置为1025-1048,防火墙的外部地址设置为Sonicwall的网络地址)
已尝试打开受影响服务器的所有端口,以测试是否消除端口问题
已检查 IIS FTP 日志。日志显示 PASV 命令已成功处理(代码 227),随后 LIST 命令失败并出现 550 错误,控制通道已关闭。没有其他值得注意的信息。
真的卡在这里了。有什么想法吗?
谢谢,
-皮特
更新:
修复了 FTP 站点主树中的虚拟目录(驱动器号已更改)的问题,突然积极的防火墙内部和外部的连接都开始起作用。
不幸的是,被动连接仍然会失败,如下所示:
Status: Resolving address of mysite.com
Status: Connecting to xx.xxx.xx.xx:21...
Status: Connection established, waiting for welcome message...
Status: Insecure server, it does not support FTP over TLS.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is current directory.
Command: TYPE I
Response: 200 Type set to I.
Command: PASV
Error: Disconnected from server: ECONNABORTED - Connection aborted
Error: Failed to retrieve directory listing
Status: Disconnected from server
答案1
您的 FTP 被动连接已建立,问题仅出在 LIST 命令上。
我认为问题在于/
目录的权限,无论是哪一个。
检查该帐户是否IIS_IUSRS
对该文件夹具有“列出文件夹内容”的权限。
如果这不能解决问题,请发布屏幕截图
属性 > 安全对于文件夹,单击 后IIS_IUSRS
。
答案2
伙计,这是一个棘手的问题,但在大家的帮助、大量的谷歌搜索以及花大量时间使用 SonicWall Packet Monitor 的帮助下,我找到了问题的解决方案:
(尝试尽可能完整地提供解决类似问题的说明,以便任何发现这篇文章并遇到类似问题的人都可以解决。)
- 初始 LIST 失败(给出一个欺骗性的“连接被拒绝”错误)不是由于权限问题,而是因为它包含虚拟目录引用(站点定义来自正在移动的服务器)到新服务器上不同的硬盘驱动器号。转到 IIS,选择站点树列表中的虚拟目录,然后单击目录上的“基本设置”,并将物理路径更改为新服务器上的正确路径,解决了该问题。
- 真正棘手的部分是解决为什么 LIST 命令可以在主动连接上工作,但在被动连接上却不行。最后,数据包监视器显示 SonicWall 丢弃了确认切换到被动模式的数据包(来自服务器的内部 IP 地址),尽管防火墙规则明确允许所有从内部到外部的流量。
最后,问题被追溯到 IIS 的 FTP 防火墙支持设置与 SonicWall 自己尝试自动打开并重新映射其自己的被动防火墙 TCP 端口之间的冲突(在 SonicWall 的防火墙设置 > 高级 > 动态端口 > “启用服务对象 [FTP v] 中 TCP 端口的 FTP 转换”设置中找到)。基本上,IIS 分配一个端口(在我的情况下是 50100-51100 范围),SonicWall 将其重新映射到另一个范围(一个落在不同端口范围内的随机数 - 例如 14389)。然后 Sonicwall 将此数据包视为无效并丢弃它。(它与 Sonicwall 中防止 FTP 反弹攻击的另一个隐藏功能相关但相同)。
似乎没有办法关闭 IIS 或 SonicWall 中的防火墙处理(在 IIS 的 FTP 防火墙支持设置中将数据通道端口范围设置为 0-0 是无效的),但通过为 SonicWall 的“在服务对象中为 TCP 端口启用 TCP 转换:[我选择了 Tivo UDP 信标 - 基本上任何东西都可以,但 FTP 不能工作]”选择一个未使用的服务对象 - 突然间一切都变得顺理成章,被动连接也能正常工作了。
最后说明一下:在 IIS 的 FTP 防火墙支持中,正确的“防火墙的外部 IP 地址”不一定是 SonicWall 的 WAN 端口的外部地址 - 它是托管 FTP 站点的服务器的外部地址(如果它们不同)。