找回密码
 新建账号

Microsoft IIS FTP Server 的坑

[复制链接]
php 发表于 2024/4/13 20:08 | 显示全部楼层 |阅读模式
Microsoft Internet Information Services 支持 Web Server 和 FTP Server,需要注意的是,IIS 的 FTP Server 使用的是 Windows 系统账号和密码来登录,而不是像 Filezilla Server 等 FTP 服务器一样使用服务器软件定义的用户名和密码来登录,IIS FTP Server 也支持 SSL 加密,而且默认要求 SSL 连接。在配置 IIS FTP 时会遇到很多问题,而微软文档又语焉不详,让人很容易掉进坑里出现很多奇怪的问题。

问题一、服务器策略要求 SSL 连接
  1. Response:        534 Policy requires SSL.
  2. Error:        Could not connect to server
复制代码
534 Policy requires SSL. 是因为 IIS FTP 站点的默认 SSL 配置是 controlChannelPolicy 和 dataChannelPolicy 都是 SslRequire,即要求 SSL 连接,如果要创建一个不使用 SSL 加密的 FTP 站点,需要将 SslRequire 改成 SslAllow,意思是可以加密连接,也可以不加密连接,这两个属性没有专门禁用 SSL 的属性值,如果使用默认值,又没有配置 SSL 证书,客户端连接服务器时会被拒绝。需要修改 IIS C:\windows\System32\inetsrv\config\applicationHost.config 配置文件中的以下两个 ssl 配置元素的 controlChannelPolicy 和 dataChannelPolicy 属性值为 SslAllow,其中 site 是指要配置证书的那个 FTP 站点。
  1. system.applicationHost/sites/siteDefaults/ftpServer/security/ssl
  2. system.applicationHost/sites/site/ftpServer/security/ssl
复制代码
也可以使用 Internet Information Services Manager 交互操作来设置,设置路径是 Server Home -> FTP SSL settings -> Allow SSL Connections,或者在指定 FTP 站点的视图中选择 FTP SSL settings -> Allow SSL Connections。本文基于英文版 Windows Server 2022,中文界面请以实际显示为准,下同。

问题二、给 FTP 站点绑定域名后,不能连接服务器,无法登录。
  1. Response:        530 Valid hostname is expected.
  2. Error:        Could not connect to server
复制代码
IIS FTP server 530 Valid hostname is expected. 是很经典的问题,如果 FTP 站点绑定了域名,IIS FTP 服务器要求以 <域名>|<用户名> 的格式指定 FTP 用户名,比如,如果域名是 wuxiancheng.cn,用户名是 wuxiancheng,那么登录 IIS FTP 时需要将用户名设置为
  1. wuxiancheng.cn|wuxiancheng
复制代码
问题三、FTP 站点根目录不能访问,用户无法登录。
  1. Response:        530 User cannot log in, home directory inaccessible.
  2. Error:        Critical error: Could not connect to server
复制代码
530 User cannot log in, home directory inaccessible. 是因为没有授权 Windows 用户登录 IIS FTP Server。修改 IIS applicationHost.config 配置文件中的 configuration/system.ftpServer/security/authorization,如果它没有 add 配置元素就添加 add 配置元素,指定允许登录 IIS FTP 服务器的 Windows 用户名。users 的值可以使用逗号分隔来指定多个用户名,permissions 指定用户的权限,Read 是读权限,Write 是写权限,可以根据需要设置为其中一个,或者都写上,add 元素可以有多个。以下内容是配置文件内容摘录,不相关的内容已经省略,只是为了展示结构。请按需要修改配置文件,不要用下面的代码覆盖原来的配置内容。
  1. <system.ftpServer>
  2.         <security>
  3.                 <authorization>
  4.                         <add accessType="Allow" users="wuxiancheng" permissions="Read, Write" />
  5.                 </authorization>
  6.         </security>
  7. </system.ftpServer>
复制代码
以上方法是设置服务器级别的用户授权,也可以设置 FTP 站点级别的用户授权,站点级别的用户授权只对站点生效。
配置代码如下。path="wuxiancheng" 中的 wuxiancheng 是 FTP 站点名称,需要按实际情况改写。
  1. <configuration>
  2.         <location path="wuxiancheng">
  3.                 <system.ftpServer>
  4.                         <security>
  5.                                 <authorization>
  6.                                         <add accessType="Allow" users="wuxiancheng" permissions="Read, Write" />
  7.                                 </authorization>
  8.                         </security>
  9.                 </system.ftpServer>        
  10.         </location>
  11. </configuration>
复制代码
使用 Internet Information Services Manager 可以可视化设置用户授权,操作路径是 Server Home -> FTP Authorization Rules -> Add Allow Rule 或者在指定的站点视图中选择 FTP Authorization Rules -> Add Allow Rule。

问题四、服务器本地策略不允许TLS安全连接
  1. Response:        220 Microsoft FTP Service
  2. Command:        AUTH TLS
  3. Response:        534 Local policy on server does not allow TLS secure connections.
复制代码
IIS FTP server 534 Local policy on server does not allow TLS secure connections. 是没有正确配置服务器证书导致的,需要导入申请到的证书,或者生成一个自签证书,然后将 IIS FTP server 的 serverCertHash 设置为这个证书的 Thumbprint,serverCertStoreName 要设置为正确的证书位置,如果证书在 Cert:\LocalMachine\My,serverCertStoreName 就要设置成 MY,证书信息可以通过以下 Powershell 命令查看。
  1. Get-ChildItem -Path Cert:\LocalMachine\My
复制代码
  1. Get-ChildItem -Path Cert:\LocalMachine\WebHosting
复制代码
需要注意的是,证书信息要设置到 IIS applicationHost.config 的 system.applicationHost/sites/siteDefaults/ftpServer/security/ssl 配置元素上去,它是服务器级别的证书配置,不能只设置到站点上去而在服务器级别不配置证书。最终配置如下。以下内容是摘录,不相关的内容已经省略,只是为了展示结构,按需要配置 ssl 配置元素的属性值即可,不要使用下面这个配置代码直接覆盖原来的内容。
  1. <system.applicationHost>
  2.         <sites>
  3.                 <siteDefaults>
  4.                         <ftpServer>
  5.                                 <security>
  6.                                         <ssl serverCertHash="BB4473D65E9D7D2FDB83121E0BCC3166A7227254" serverCertStoreName="My" ssl128="false" controlChannelPolicy="SslAllow" dataChannelPolicy="SslAllow" />
  7.                                 </security>
  8.                         </ftpServer>
  9.                 </siteDefaults>
  10.         </sites>
  11. </system.applicationHost>
复制代码
站点级别的证书配置在以下配置元素上,其中 site 是指要配置证书的那个 FTP 站点。
  1. system.applicationHost/sites/site/ftpServer/security/ssl
复制代码
使用 Internet Information Services Manager 可以可视化设置服务器证书,操作路径是 Server Home -> FTP SSL Settings -> SSL Certificate,或者在指定的 FTP 站点视图中选择 FTP SSL Settings -> SSL Certificate,选择匹配的 SSL 证书,保存即可。

问题四、证书不匹配
  1. Error:        Certificate of connection does not match expected certificate.
  2. Error:        The data connection could not be established: ECONNABORTED - Connection aborted
  3. Response:        226 Transfer complete.
  4. Error:        Failed to retrieve directory listing
复制代码
Certificate of connection does not match expected certificate. 是证书不匹配导致的,同时指定了服务器级别的证书和站点级别的证书而且证书不相同时,客户端连接服务器时因为证书混乱导致了冲突。去掉站点级别的证书即可。

问题五、客户端不能连接到服务器
  1. Status:        Connection attempt failed with "ETIMEDOUT - Connection attempt timed out".
  2. Error:        Could not connect to server
复制代码
如果网络没有断开,那应该是防火墙阻断了客户端和服务器之间的通信。FTP server 有控制端口和数据端口,默认情况下,控制端口为21,主动模式数据端口为20,被动模式数据端口在一个范围内随机分配,IIS FTP Server 中被动模式的默认数据端口范围是 1024-65535,在设置服务器绑定的时候,指定的端口号会作为 FTP 站点的控制端口号,要想服务器被正常访问,需要将这些端口全部放行。
以下 PowerShell 命令可以用来创建防火墙规则。
  1. New-NetFirewallRule -DisplayName server-ftp -Enabled true -Action Allow -Direction Inbound -Protocol tcp -LocalPort 20,21,1024-65535 -Program "%windir%\system32\svchost.exe"
复制代码
以下配置代码可以用来修改 IIS FTP Server 的被动模式数据端口范围,其中 lowDataChannelPort 是最小端口号,highDataChannelPort 是最大端口号,取值必须是正整数并且不能大于 65535.
  1. <system.ftpServer>
  2.         <firewallSupport lowDataChannelPort="1024" highDataChannelPort="65535" />
  3. </system.ftpServer>
复制代码
使用 Internet Information Services Manager 可以可视化设置被动模式数据端口范围,操作路径是 Server Home -> FTP Firewall Support -> Data Channel Port Range.

更改配置后建议重启 FTP 服务。
  1. Restart-Service FTPSVC
复制代码
配置 IIS 有很多种方式,包括但不限于 Powershell 的 WebAdministration/IISAdministration 模块命令,appcmd,GUI工具IIS管理器,直接修改配置文件,无论以哪种方式修改,最终都会反映在配置文件中,如果你不是老手你对 IIS 配置文件结构和各种配置元素不熟悉,请不要轻易修改配置文件,修改 IIS 配置之前最好对配置文件做好备份,可以将 C:\windows\System32\inetsrv\config 文件夹全部拷贝出去备份。

参考链接 微软官方文档 ssl配置元素 用户授权 被动模式端口范围

手机版|轻松E站

GMT+8, 2024/11/21 14:26

快速回复 返回顶部 返回列表