web.config中的ipSecurity导致了内部服务器错误

19

这是我的 web.config 文件,其中包含一些用于阻止IP地址的标签。

<configuration>
 <connectionStrings>
    ...
 </connectionStrings>
 <appSettings>
  ....
 </appSettings> 
 <runtime>
   ....
 </runtime>
  <system.webServer>
    <security> 
        <ipSecurity allowUnlisted="false"> 
            <clear/> 
             <add ipAddress="127.0.0.1" allowed="true"/>
             <add ipAddress="83.116.19.53" allowed="true"/> 
        </ipSecurity>  
    </security>
</system.webServer> 
</configuration>

我的意图是阻止除了上面提到的IP地址以外的任何其他IP访问网站。上面提到的IP地址是我希望从中可以访问该网站的唯一地址。但是使用"ipSecurity"标签时,我总是遇到500 - 内部服务器错误,而没有使用该标签时网站正常运行。

我已确保在服务器上安装了"IP和域名限制"。如果有缺失,请告知我。 谢谢。


同时为IPv6本地主机添加::1,如果仍然无法正常工作,请检查站点的访问日志以查看被阻止的IP地址。如果您在远程位置,请通过类似ipchicken.com的网站验证您的公共IP。 - Brock Hensley
谢谢,我尝试使用IPv6 localhost,但没有帮助。当我尝试点击"IIS上的IP和域名限制"时,它会抛出一个错误,指出"锁定要么是默认值(overridemodedefault=deny)"。 - Sruthi
7个回答

43

对于其他遇到此问题的人,问题的原因是功能委派不允许通过web.config管理该功能。

解决方法:

验证已启用Web.config管理功能

  • 在IIS 7中,单击根服务器
  • 双击“功能委派”(在管理下)
  • 向下滚动到IPv4地址和域限制
    • 将委派更改为读/写(在我的情况下是只读,这就是问题所在)

希望这可以帮助其他人。


2
这解决了我的问题,但在安装Win7 ->程序和功能->全球网络服务->应用程序开发功能->ASP,以及在全球网络服务->应用程序开发功能->安全性->IP安全之前,我无法看到“IPv4地址和域限制”。 - Ricardo stands with Ukraine
谢谢!在我修复应用程序Host.config中的问题后,这确切地解决了我的问题。 - juvchan
绝对的传奇。我相信Brock的答案也是正确的,但这个更加简洁。 - Matt Canty
这个答案在2014年帮助了我,又在2020年帮助了我。 - Larry Flewwelling

22

对于 Windows 10 和 Visual Studio 2015,请注意 ApplicationHost.config 文件已经被重新放置到项目文件夹层次结构中的 .vs\config 文件夹中。您需要使用找到的那个项目特定版本的 ApplicationHost.config 文件进行编辑...

<section name="ipSecurity" overrideModeDefault="Allow" />
如果你只编辑位于文档\IISExpress文件夹中的ApplicationHost.config文件,这不会影响你现有的应用程序(例如我的MVC5应用程序)。

在我的情况下,.vs\config文件夹中没有ApplicationHost.config文件。事实上,在.vs下没有config文件夹。我不得不编辑Documents\IISExpress中的一个文件来解决这个问题。这是在Win 10上使用VS 2019。 - Steve Hiner
澄清一下:“项目特定”意味着专门为该项目设置了一个目录。一旦我确定了正确的 applicationhost.config 文件,那么它就可以工作了:.vs\{project_folder}\config\applicationhost.config。主要的 .vs/config 文件夹和用户 Documents\IISExpress\config 文件夹中也可能有一个。将使用最具体的指定。 - Neil Monroe

11
打开 applicationHost.config 文件(位于 %windir%\system32\inetsrv\config\applicationHost.config),并编辑 ipSecurity 部分。
更改此行:
<section name="ipSecurity" overrideModeDefault="Deny" />

收件人:

<section name="ipSecurity" overrideModeDefault="Allow" />

如果您正在使用64位系统,请确保使用64位程序(如记事本)进行编辑和保存! - Jo VdB

7
你是通过手动编辑或通过IIS管理器进行配置的吗?
查看这篇帖子,因为你可能没有启用该功能委派而出现了该错误消息。 http://forums.asp.net/t/1220987.aspx

链接挂了... :( "您正在尝试访问的网站正在进行维护..." - Shubh

6
在System.Webserver标签外尝试这个。
<location path="Default WebSite">
    <system.webServer>
        <security>
            <ipSecurity allowUnlisted="false">
                <clear/>                 
               <add ipAddress="127.0.0.1" allowed="true"/>
             <add ipAddress="83.116.19.53" allowed="true"/> 
            </ipSecurity>
        </security>
    </system.webServer>
</location>

1
这个设置不是允许来自所有来源的连接吗?因为allowUnlisted被设置为true了吗?https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/ipsecurity/ - Panu Oksala
1
@Mino 很好的发现!我更新了我的答案。 - Mohit Dharmadhikari
这是一个更好的解决方案,因为它只影响一个网站,而所有其他提出的解决方案都会影响服务器上的所有网站,可能无法在托管环境中使用。 - Javier Cañon

3
希望这能帮助到某些人...
我在本地运行Windows 7上的IIS Express,并执行以下操作 - 控制面板>程序>程序和功能>打开或关闭Windows功能
在“Windows功能”对话框中,请确保选中“IP安全性”选项:
我还必须打开我的applicationhost.config文件(位于%userprofile%\Documents\IISExpress\config下)并更改以下内容:
<section name="ipSecurity" overrideModeDefault="Deny" />

To

<section name="ipSecurity" overrideModeDefault="Allow" />

1
不要忘记自定义站点委派。这样可以让您仅允许对您打算的站点进行委派。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接