IIS7 Блокировка запроса к приложению asp.net с использованием внешнего IP - PullRequest
1 голос
/ 18 октября 2011

У меня есть приложение asp.net (IIS7), и я хочу заблокировать доступ к нему с помощью IP-адреса внешнего сервера. Я хочу разрешить доступ только через мой домен.

Например, мой домен - domain.com и IP 161.0.0.1, и я хочу заблокировать доступ к http://161.0.0.1/webapp/

Я предпочитаю делать это с помощью web.config

Спасибо заранее,

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

В IIS вы точно указываете, какую комбинацию IP / DNS-имен вы хотите, чтобы сайт отвечал.Вы можете легко заставить его отвечать только на определенный IP.

Для IIS 7:

  1. Открыть диспетчер служб IIS
  2. Развернуть сайты ищелкните правой кнопкой мыши на своем веб-сайте.
  3. Нажмите на Изменить привязки.
  4. Отредактируйте существующую запись и установите IP-адрес 161.0.0.1.Также установите доменное имя на domain.com.
  5. Нажмите OK, нажмите Закрыть.

Теперь ваш сайт будет отвечать только на это конкретное доменное имя и не будет отвечать по 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

2 голосов
/ 19 октября 2011

ОК, поэтому, если вы хотите, чтобы Сайт был доступен через 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...