我们正在使用 Windows Server 2016 在 IIS 上运行一个网站。我们希望该网站是公共的,但我们希望只有一个内部 IP 地址可以访问一个文件夹。applicationHost.config 包含以下几行:
<location path="mywebsite/private">
<system.webServer>
<security>
<ipSecurity allowUnlisted="false">
<add ipAddress="192.168.1.0" subnetMask="255.255.255.0" allowed="true" />
</ipSecurity>
</security>
</system.webServer>
</location>
从 192.168.1.x 之外的 IP 地址访问此文件夹中的页面时,我预计会被阻止,但页面加载成功。
此外,我在 IIS 管理器中收到错误消息。我不确定它是否相关。当我导航到 mywebsite > private 并打开IP 地址和域限制功能时,我看到了与 applicationHost.config 中相同的设置。在Edit Feature Settings下,设置为 Access=Deny,域名限制=disabled,Proxy mode=disabled,Deny action type=Forbidden。当我将访问权限更改为允许时,我收到以下错误消息:
Filename: \\?\D:\mywebsite\private\web.config
Error: The configuration section 'system.webServer/security/dynamicIpSecurity'
cannot be read because it is missing a section declaration
我们在 applicationHost.config 或任何 web.config 文件中没有任何关于dynamicIpSecurity的信息。ipSecurity不在 web.config 中。
关于为什么外部 IP 地址没有被阻止的任何建议?
更新:仍然没有完全修复,但我弄清楚发生了什么,并使用这些信息来实施解决方法。在我们的网络中,我们有 3 个区域:Web 服务器、工作站和互联网。事实证明,如果 Web 请求来自工作站,IP 地址和域限制功能会看到实际的客户端 IP 地址并按预期允许或拒绝。但是,如果请求来自 Internet,则此 IIS 功能会看到我们防火墙设备的接口 IP 地址。这很奇怪,因为 Web 应用程序会看到客户端 IP,而日志文件会记录客户端 IP。它似乎只是 IP 地址和域限制功能。是否可以对 IIS 进行一些操作以使其更有可能查看实际的客户端 IP?