Windows Server 2016 IIS 10中web.config限制IP无效,求排查
修正
allowUnlisted的逻辑配置
你当前web.config里allowUnlisted="true"的含义是允许所有未在列表中的IP访问,结合<clear />后仅添加单个IP的操作,实际效果是所有IP都能正常访问,这和你想要限制IP的需求完全相反。如果要实现仅允许指定IP访问,需将allowUnlisted设为false,同时显式标记允许的IP,修正后的配置片段:<security> <ipSecurity allowUnlisted="false"> <clear /> <add ipAddress="xx.xx.x.x" allowed="true" /> </ipSecurity> </security>确认ApplicationHost.config配置生效
确保修改的是正确路径下的文件(默认路径:C:\Windows\System32\inetsrv\config\ApplicationHost.config),修改完成后执行iisreset命令重启IIS服务,让配置完全生效。同时检查站点/应用程序级别的配置是否未覆盖服务器级的ipSecurity权限设置。验证IP和域限制功能的启用状态
除了安装角色,需在IIS管理器中确认功能配置:- 选中目标站点,双击IP地址和域限制
- 点击右侧操作栏的编辑功能设置,确认选项与
web.config配置一致(比如allowUnlisted=false对应“拒绝未指定的客户端访问”) - 若服务器在代理/负载均衡后,务必勾选启用代理模式,否则IIS会识别代理IP而非客户端真实IP
排查IP识别异常问题
如果服务器部署在NAT、代理或负载均衡设备后,IIS可能无法获取客户端真实IP:- 确保代理设备已正确转发
X-Forwarded-For或X-Real-IP头部 - 在IIS的IP限制功能设置中开启代理模式,让模块读取转发头部获取真实IP
- 确保代理设备已正确转发
检查冲突配置
排查站点是否存在其他安全规则干扰IP限制:比如URL重写规则、URLScan模块等是否提前拦截了请求;同时确认Windows防火墙是否未限制相关端口,但注意防火墙规则与IIS IP限制是独立逻辑,仅当防火墙放开端口后,IIS的限制才会生效。查看日志定位问题
查看IIS访问日志(默认路径:C:\inetpub\logs\LogFiles),确认请求的客户端IP是否符合预期,以及请求状态码(403.6表示IP被拒绝);同时检查Windows事件查看器中的IIS相关日志,是否存在IP模块的错误提示。
内容的提问来源于stack exchange,提问作者pixelFast

