IIS7使用外部IP阻止对asp.net应用程序的请求

时间:2011-10-18 13:05:26

标签: asp.net iis iis-7

我有一个asp.net应用程序(IIS7),我希望使用外部服务器IP阻止访问它。我只想允许使用我的域名进行访问。

例如,我的域名是domain.com和IP 161.0.0.1,我想阻止访问http://161.0.0.1/webapp/

我更喜欢使用web.config

提前,

2 个答案:

答案 0 :(得分:3)

在IIS中,您可以准确配置您希望站点响应的IP / DNS名称组合。您可以轻松强制它仅响应特定的IP。

对于IIS 7:

  1. 打开Internet信息服务(IIS)管理器
  2. 展开网站并右键点击您的网站。
  3. 点击编辑绑定。
  4. 编辑现有条目并将IP地址设置为161.0.0.1。同时将域名设置为domain.com。
  5. 单击“确定”,单击“关闭”。
  6. 现在,您的网站只会响应该特定域名,并且不会仅通过IP地址进行响应。

    如果您的网站使用SSL证书,请参阅以下问题,该问题讨论如何配置IIS以强制使用主机名:

    https://serverfault.com/questions/96810/iis7-cant-set-host-name-on-site-with-ssl-cert-and-port-443
    链接到:
    http://www.sslshopper.com/article-ssl-host-headers-in-iis-7.html

    这个链接更适合通过用户界面完成:http://blog.armgasys.com/?p=80

答案 1 :(得分:2)

好的,如果您希望通过DNS名称而不是通过IP访问站点,区分它的唯一方法是检查标题中请求的主机名。我知道有两种方法可以做到:

1)在IIS管理器中配置“绑定”对话框。这是最容易设置但不适用于HTTPS。只需将www.domain.com放入主机名字段,就会拒绝对IP的请求。对于HTTPS,如果您的安全证书是针对特定主机名的,则用户在尝试通过IP连接时会收到安全警告,但通常他们可以覆盖警告(取决于浏览器设置)。

编辑:Chris Lively已经将这种方法与HTTPS绑定联系起来了,请参阅他的答案以获取更多信息。

2)或者,您可以检查代码中的标头。以下是IHttpModule的示例,它可以实现您想要的效果。它也是在web.config中配置的插件解决方案。

代码:

Public Class HostNameCheck
    Implements IHttpModule

    Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
    End Sub

    Public Sub Init(context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
        AddHandler context.BeginRequest, AddressOf context_BeginRequest
    End Sub

    Private Sub context_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
        Dim objApp As HttpApplication = DirectCast(sender, HttpApplication)

        If objApp.Request.Url.Host <> ConfigurationManager.AppSettings("AcceptedHostName") Then
            objApp.Response.Clear()
            objApp.Response.StatusCode = 403
            objApp.Response.SubStatusCode = 6
            objApp.Response.Flush()
        End If
    End Sub
End Class

的Web.config:

<configuration>
    <appSettings>
        <add key="AcceptedHostName" value="www.domain.com"/>
    </appSettings>
    <system.webServer>
        <modules>
            <add name="HostNameCheck" type="HostNameCheck"/>
        </modules>
    </system.webServer>
</configuration>