如何配置 Windows 防火墙以允许 IIS Express 使用所有端口

如何配置 Windows 防火墙以允许 IIS Express 使用所有端口

我的理解这篇 Technet 文章,每带我到此的页面*,我可以配置 Windows 防火墙以允许指定可执行文件使用的任何端口上的所有入站流量。

我知道答案很可能是“不要这样做”,所以请理解;我在虚拟机中运行 Visual Studio 和 IIS Express,并且希望能够从主机操作系统连接以进行测试目的,因此并不真正关心打开 IIS Express 使用的所有端口所带来的安全隐患。

我创建了一个入站规则,将程序设置为%ProgramFiles% (x86)\IIS Express\iisexpress.exe,这是根据任务管理器运行的可执行文件。所有其他规则规范都留空(任何本地地址、任何远程地址和本地端口、任何远程端口、“任何”允许的用户、“任何”允许的计算机)。但是,只有当我有 IIS Express 提供的特定端口的规则时,连接才有效。

因为它可以让我的生活更轻松(并且很大程度上是因为 technet 说它应该可行),我宁愿不必为创建的每个应用程序添加防火墙规则。

* 任务“创建一条规则,允许程序监听并接受其所需的任何端口上的入站网络流量。”

答案1

这里有几个问题。一个是,iisexpress.exe实际上不是负责监听 HTTP 流量的进程。该功能是在http.sys 作为 Windows 网络堆栈的内核模式部分(这样做是出于性能方面的考虑。有关详细信息,请参阅IIS 架构简介)因此,创建规则iisexpress.exe不会产生任何作用。

第二,http.sys默认情况下不允许以非管理员身份运行的程序监听其他计算机。根据使用 WebMatrix 提供外部流量服务,您需要在管理命令提示符中运行此命令,以允许所有用户通过以下方式监听其他机器http.sys

netsh http add urlacl url=http://MACHNAME:PORT/ user=everyone

将其替换MACHNAME为用于联系站点的主机名和PORT流量的端口。我读到过使用*而不是特定主机名可以让它监听所有名称/接口,但我个人没有测试过,有些文档使用+相反的方法。无论哪种方式,一旦您设置了 ACL,您就可以为港口

进一步阅读: 配置 HTTP 和 HTTPS

补充评论:有一个实际的环境变量指向 32 位版本的 Program Files: %PROGRAMFILES(X86)%。(不过,路径不是你的问题。)

答案2

您必须使用“高级安全 Windows 防火墙”,并为在 IIS Express 上绑定应用程序的端口添加入站规则

相关内容