Microsoft 创建了一个新的 FTP 服务,该服务针对 Windows Server® 2008 完全重新编写。 此 FTP 服务包含许多新功能,使 Web 作者能够比以前更好地发布内容,并为 Web 管理员提供了更多的安全性和部署选项。

本文档指导你为新的 FTP 服务器配置防火墙设置。

必须安装以下各项才能完成本文中的过程:

  • 必须在 Windows 2008 服务器上安装 IIS 7,并且必须安装 Internet Information Services (IIS) 管理器。

  • 新的 FTP 服务。 可以使用以下链接之一从 https://www.iis.net/ 网站下载并安装 FTP 服务:

  • FTP 7.5 for IIS 7 (x64)
  • FTP 7.5 for IIS 7 (x86)
  • 必须创建用于 FTP 发布的根文件夹:

  • %SystemDrive%\inetpub\ftproot 处创建一个文件夹

  • 设置允许匿名访问的权限:

  • 打开命令提示符。

  • 输入以下命令:

    ICACLS "%SystemDrive%\inetpub\ftproot" /Grant IUSR:R /T
    
  • 关闭命令提示符。

    重要说明:

  • 本演练中列出的设置将 %SystemDrive%\inetpub\ftproot 指定为 FTP 站点的路径。 你无需使用此路径;但如果你更改站点的位置,则必须更改整个演练中使用的与站点相关的路径。

  • 为 FTP 服务配置防火墙设置后,必须配置防火墙软件或硬件,以允许通过防火墙连接到 FTP 服务器。

  • 如果使用内置 Windows 防火墙,请参阅本演练的(可选)步骤 3:配置 Windows 防火墙设置部分。
  • 如果使用其他防火墙,请参阅防火墙软件或硬件随附的文档。
  • 转到 IIS 7 管理器。 在“连接”窗格中,单击树中的“站点”节点

  • 右键单击树中的“站点”节点,单击“添加 FTP 站点”,或者单击“操作”窗格中的“添加 FTP 站点”

  • 显示“添加 FTP 站点”向导时

  • 在“FTP 站点名称”框中输入“我的新 FTP 站点”,然后导航到在先决条件部分中创建的 %SystemDrive%\inetpub\ftproot 文件夹

    如果选择键入内容文件夹的路径,可以在路径中使用环境变量。

  • 单击 “下一步”

  • 在向导的下一页:

  • 从“IP 地址”下拉菜单中选择 FTP 站点的 IP 地址,或者选择接受默认选择“所有未分配”。由于你将远程访问此 FTP 站点,因此需要确保不限制对本地服务器的访问,并通过在“IP 地址”框中键入“127.0.0.1”来输入计算机的本地环回 IP 地址

  • 通常你会在“端口”框中输入 FTP 站点的 TCP/IP 端口。 对于本演练,请选择接受默认端口 21。

  • 本演练不使用主机名,因此请确保“虚拟主机”框为空

  • 确保将“证书”下拉列表设置为“未选择”,并选择“允许 SSL”选项

  • 单击 “下一步”

  • 你新建了名为“我的新 FTP 站点”的新 FTP 站点,该站点的内容根目录位于 %SystemDrive%\inetpub\ftproot
  • 将 FTP 站点绑定到计算机端口 21 上的本地环回地址,并选择不对 FTP 站点使用安全套接字层 (SSL)。
  • 你为 FTP 站点创建了一个默认规则,以允许匿名用户对文件进行“读取”访问。
  • 步骤 1:为 FTP 服务配置被动端口范围

    在本部分,你将配置与 FTP 服务建立的被动连接的服务器级端口范围。 请使用以下步骤:

  • 转到 IIS 7 管理器。 在“连接”窗格中,单击树中的服务器级节点

  • 在功能列表中双击“FTP 防火墙支持”图标

  • 为“数据通道端口范围”输入值范围

  • 输入 FTP 服务的端口范围后,单击“操作”窗格中的“应用”以保存配置设置

  • 端口的有效范围为 1024 到 65535。 (端口 1 到 1023 保留供系统服务使用。)

  • 可以输入特殊端口范围“0-0”以将 FTP 服务器配置为使用 Windows TCP/IP 动态端口范围。

  • 有关更多信息,请参阅以下 Microsoft 知识库文章:

  • 174904 - 有关 TCP/IP 端口分配的信息 (https://support.microsoft.com/kb/174904/)
  • 929851 - Windows Vista 和 Windows Server 2008 中 TCP/IP 的默认动态端口范围已更改
  • 需要将此端口范围添加到防火墙服务器允许的设置中。

  • 进行配置更改后,通过Start>>Runservices.msc重新启动 Microsoft FTP 服务并找到 FTP 服务。

    步骤 2:为特定 FTP 站点配置外部 IPv4 地址

    在本部分,你将为前面创建的特定 FTP 站点配置外部 IPv4 地址。 请使用以下步骤:

  • 转到 IIS 7 管理器。 在“连接”窗格的树中,单击之前创建的 FTP 站点,然后在功能列表中双击“FTP 防火墙支持”图标

  • 在“防火墙的外部 IP 地址”设置中,输入防火墙服务器面向外部的 IPv4 地址

  • 输入防火墙服务器的外部 IPv4 地址后,单击“操作”窗格中的“应用”以保存配置设置

    回顾在此步骤中完成的项:

  • 你为 FTP 服务配置了被动端口范围。
  • 你为特定 FTP 站点配置了外部 IPv4 地址。
  • (可选)步骤 3:配置 Windows 防火墙设置

    Windows Server 2008 包含内置的防火墙服务,可帮助你保护服务器免受网络威胁。 如果你选择使用内置的 Windows 防火墙,则需要配置设置,以便 FTP 流量可以通过防火墙。

    将 FTP 服务与 Windows 防火墙配合使用时,需要考虑一些不同的配置 - 是使用主动还是被动 FTP 连接,以及是使用未加密的 FTP 还是使用 FTP over SSL (FTPS)。 下面介绍了其中的每一项配置。

    需确保按照本部分的演练中所述步骤进行操作,同时以管理员身份登录。 可以通过下述方式之一来实现这一点:

  • 使用名为“Administrator”的实际帐户登录到服务器。
  • 使用具有管理员权限的帐户登录,右键单击 Windows 程序“附件”菜单中的“命令提示符”菜单项并选择“以管理员身份运行”来打开命令提示符。
  • 必须执行上述步骤之一,因为 Windows Vista 和 Windows Server 2008 操作系统中的用户帐户控制 (UAC) 安全组件会阻止管理员访问防火墙设置。 有关 UAC 的详细信息,请参阅以下文档:

  • https://go.microsoft.com/fwlink/?LinkId=113664
  • 虽然可以使用 Windows 控制面板中的“Windows 防火墙”小程序配置 Windows 防火墙,但该实用工具不具备启用所有 FTP 功能所需的功能。 位于 Windows 控制面板中“管理工具”下的“高级安全 Windows 防火墙”实用工具具备启用 FTP 功能所需的所有功能,但为了简单起见,本演练将介绍如何使用命令行 Netsh.exe 实用工具来配置 Windows 防火墙

    对非安全的 FTP 流量使用 Windows 防火墙

    若要将 Windows 防火墙配置为允许非安全 FTP 流量,请使用以下步骤:

  • 打开命令提示符:依次单击“开始”、“所有程序”、“附件”、“命令提示符”

  • 若要在防火墙上打开端口 21,请键入以下语法,然后按 Enter:

    netsh advfirewall firewall add rule name="FTP (non-SSL)" action=allow protocol=TCP dir=in localport=21
    
  • 若要启用有状态 FTP 筛选以动态打开数据连接端口,请键入以下语法,然后按 Enter:

    netsh advfirewall set global StatefulFtp enable
    

    重要说明:

  • 活动 FTP 连接不一定包含在上述规则中;还需要在服务器上启用来自端口 20 的出站连接。 此外,需要在 FTP 客户端计算机上针对入站流量设置其自己的防火墙例外。
  • 这些规则不涵盖 FTP over SSL (FTPS);SSL 协商很可能会失败,因为用于有状态 FTP 检查的 Windows 防火墙筛选器将无法分析加密的数据。 (某些第三方防火墙筛选器识别 SSL 协商的开头(例如 AUTH SSL 或 AUTH TLS 命令),并返回错误以阻止 SSL 协商开始。)
  • 对安全的 FTP over SSL (FTPS) 流量使用 Windows 防火墙

    Windows 防火墙中的有状态 FTP 数据包检查很可能会阻止 SSL 工作,因为用于有状态 FTP 检查的 Windows 防火墙筛选器无法分析要建立数据连接的加密流量。 由于这种行为,如果你打算使用 FTP over SSL (FTPS),则需要以不同的方式配置 FTP 的 Windows 防火墙设置。 将 Windows 防火墙配置为允许 FTPS 流量的最简单方法是将 FTP 服务列在入站例外列表中。 完整的服务名称是“Microsoft FTP 服务”,短名称是“ftpsvc”。 (FTP 服务托管在通用服务进程主机 (Svchost.exe) 中,因此无法通过程序例外将其放入例外列表中。)

    若要将 Windows 防火墙配置为允许安全的 FTP over SSL (FTPS) 流量,请使用以下步骤:

  • 打开命令提示符:依次单击“开始”、“所有程序”、“附件”、“命令提示符”

  • 若要将防火墙配置为允许 FTP 服务侦听其打开的所有端口,请键入以下语法,然后按 Enter:

    netsh advfirewall firewall add rule name="FTP for IIS7" service=ftpsvc action=allow protocol=TCP dir=in
    
  • 若要禁用有状态 FTP 筛选以便 Windows 防火墙不会阻止 FTP 流量,请键入以下语法,然后按 Enter:

    netsh advfirewall set global StatefulFtp disable
    

    有关使用防火墙的详细信息

    通常很难创建防火墙规则来使 FTP 服务器能够正常工作,这种挑战的根本原因在于 FTP 协议体系结构。 每个 FTP 客户端需要在客户端和服务器之间保持两个连接:

  • FTP 命令通过一个称为“控制通道”的主连接传输,该连接通常是通过众所周知的 FTP 端口 21 进行
  • FTP 数据传输(例如目录列表或文件上传/下载)需要一个称为“数据通道”的辅助连接
  • 在防火墙中打开端口 21 是一项简单任务,但这意味着 FTP 客户端只能发送命令,而不能传输数据。 这也意味着,客户端能够使用控制通道成功验证并创建或删除目录,但客户端无法查看目录列表或无法上传/下载文件。 这是因为,在允许数据通道通过防火墙之前,不允许 FTP 服务器的数据连接通过防火墙。

    这可能会使 FTP 客户端感到困惑,因为客户端似乎能够成功登录到服务器,但在尝试从服务器检索目录列表时,连接可能会超时或停止响应。

    对于使用 FTP 和防火墙时存在的挑战,最终不仅需要建立辅助数据连接;更复杂的是,实际上需要通过两种不同的方式建立数据连接:

  • 主动数据连接:在主动数据连接中,FTP 客户端设置一个用于数据通道侦听的端口,服务器发起与该端口的连接;此端口通常是服务器的端口 20。 主动数据连接曾经是连接 FTP 服务器的默认方式;但是,现在不再建议使用主动数据连接,因为它们在 Internet 方案中效果不佳。
  • 被动数据连接:在被动数据连接中,FTP 服务器设置一个用于数据通道侦听的端口,客户端发起与该端口的连接。 被动连接在 Internet 方案中效果更好,并且 RFC 1579(防火墙友好的 FTP)也建议采用被动连接。
  • 某些 FTP 客户端需要显式操作才能启用被动连接,有些客户端甚至不支持被动连接。 (其中一个示例是 Windows 随附的命令行 Ftp.exe 实用工具。)更令人困惑的是,某些客户端在发生网络错误时会尝试智能地在两种模式之间切换,但遗憾的是这并不始终有效。

    某些防火墙尝试使用内置筛选器来解决数据连接问题,这些筛选器会扫描 FTP 流量并动态允许数据连接通过防火墙。 这些防火墙筛选器能够检测哪些端口用于数据传输,并在防火墙上临时打开它们,以便客户端可以打开数据连接。 (某些防火墙可能会默认启用筛选 FTP 流量,但情况并非始终如此。)这种类型的筛选称为有状态数据包检查 (SPI) 或有状态检查,这意味着,防火墙能够智能地确定流量类型并动态选择如何做出响应。 现在许多防火墙(包括内置的 Windows 防火墙)都采用这些功能。

  •