Поделиться через


Dynamic IP Security <dynamicIpSecurity>

Общие сведения

Элемент <dynamicIpSecurity> предоставляет динамические средства блокировки вредоносных веб-запросов. Использование динамических ограничений IP-адресов означает, что администратору не нужно определять IP-адреса, которые необходимо заблокировать. Вместо этого администратор может настроить систему таким образом, чтобы она блокирует любой IP-адрес, соответствующий заданным критериям. Это может быть блокировка удаленного клиента, если количество одновременных запросов HTTP-подключения от этого клиента превышает определенное число, или блокировка клиента, если количество запросов, полученных за определенный период времени, превышает определенное число. Ограничения динамических IP-адресов можно настроить на уровне сервера или сайта.

Администратор может указать, какой код состояния HTTP-ответа будет возвращен в случае блокировки клиента: Не авторизовано (401); Запрещено (403); или Не найдено (404). Вы также можете задать для параметра Тип действия Запретить значение Прервать, чтобы удалить подключение, не указывая причину.

Если режим прокси-сервера включен, запрос можно заблокировать, определив исходный IP-адрес клиента, который подключается к веб-серверу через прокси-сервер HTTP или подсистему балансировки нагрузки. Это делается путем изучения заголовка x-forwarded-for-HTTP.

Совместимость

Версия Примечания
IIS 10.0 Элемент <dynamicIpSecurity> не был изменен в IIS 10.0.
IIS 8,5 Элемент <dynamicIpSecurity> не был изменен в IIS 8.5.
IIS 8,0 Элемент <dynamicIpSecurity> появился в IIS 8.0.
IIS 7,5 Н/Д
IIS 7.0 Н/Д
IIS 6,0 Н/Д

Настройка

Windows Server 2012 или Windows Server 2012 R2

  1. На панели задач щелкните Диспетчер сервера.
  2. В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
  3. В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
  4. На странице Роли сервера разверните узел Веб-сервер (IIS),Веб-сервер, Безопасность, а затем выберите Ограничения IP-адресов и доменов. Щелкните Далее.
    Снимок экрана, на котором показаны ограничения ip-адреса и домена, выбранные для Windows Server 2012. .
  5. На странице Выбор компонентов нажмите кнопку Далее.
  6. На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
  7. На странице Результаты нажмите кнопку Закрыть.

Windows 8 или Windows 8.1

  1. На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
  2. В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
  3. Разверните узлы Службы IIS, Веб-службы, Безопасность, а затем выберите Безопасность IP-адресов.
    Снимок экрана, на котором показан выбранный для Windows 8 элемент I P Security.
  4. Нажмите кнопку ОК.
  5. Щелкните Закрыть.

Инструкции

Добавление динамических ограничений IP-адресов для запрета доступа к веб-сайту

  1. Откройте диспетчер служб IIS:

    • Если вы используете Windows Server 2012 или более поздней версии:

      • На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
    • Если вы используете Windows 8 или более поздней версии:

      • Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
      • Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
  2. В области Подключения выберите имя сервера, чтобы добавить динамические ограничения IP-адресов для сервера, или разверните узел Сайты , а затем выберите сайт для добавления динамических ограничений IP-адресов для сайта.

  3. На панели Главная дважды щелкните функцию IP-адреса и ограничения домена .

  4. В области Действия щелкните Изменить параметры динамических ограничений....

  5. В диалоговом окне Динамические параметры ограничения IP-адресов укажите, следует ли запретить IP-адрес на основе количества одновременных выборок и (или) частоты запросов, укажите, следует ли включить режим только для ведения журнала, а затем нажмите кнопку ОК.

    Снимок экрана: диалоговое окно

Конфигурация

Элемент <dynamicIpSecurity> настраивается на уровне сервера или сайта.

Атрибуты

Атрибут Описание
denyAction Необязательный атрибут перечисления.

Задает ответ режима запрета по умолчанию, который iis должны отправлять клиентам.

Значение по умолчанию — Forbidden.
Значение Описание
AbortRequest Указывает, что по умолчанию IIS должны отправлять клиентам ответ в режиме запрета Abort .

Числовое значение равно 0.

Unauthorized Указывает, что по умолчанию IIS должны отправлять клиентам ответ в режиме запрета Unauthorized . Если клиент на основе браузера используется на удаленном сервере, возврат "Не авторизовано" может привести к отображению диалогового окна проверки подлинности на удаленном клиенте, что приведет к нечестным попыткам проверки подлинности в СЛУЖБАх IIS.

Числовое значение равно 401.

Forbidden Указывает, что по умолчанию IIS должны отправлять клиентам ответ в режиме запрета Forbidden .

Числовое значение равно 403.

NotFound Указывает, что по умолчанию IIS должны отправлять клиентам ответ в режиме запрета Not Found .

Числовое значение равно 404.

enableLoggingOnlyMode Дополнительный логический атрибут.

Указывает, что СЛУЖБЫ IIS будут регистрировать запросы от клиента, которые будут отклонены без фактического отклонения.

Значение по умолчанию — false.
enableProxyMode Дополнительный логический атрибут.

Позволяет службам IIS не только блокировать запросы от IP-адреса клиента, который отображается службами IIS, но и блокировать запросы с IP-адресов, полученных в заголовке HTTP x-forwarded-for. Этот заголовок позволяет определить исходный IP-адрес клиента, который подключается через прокси-сервер HTTP или подсистему балансировки нагрузки. Это называется режимом прокси-сервера.

Значение по умолчанию — false.

Дочерние элементы

Элемент Описание
denyByConcurrentRequests Необязательный элемент.

Указывает, что некоторые удаленные клиенты будут блокироваться в зависимости от количества запросов, полученных с течением времени.
denyByRequestRate Необязательный элемент.

Указывает, что некоторые удаленные клиенты будут блокироваться в зависимости от количества одновременных запросов HTTP-подключения от клиентов.

Образец конфигурации

В следующем примере конфигурации показано, как задать ограничения динамических IP-адресов.

<system.webServer>
   <security>
      <dynamicIpSecurity enableLoggingOnlyMode="true">
         <denyByConcurrentRequests enabled="true" maxConcurrentRequests="10" />
         <denyByRequestRate enabled="true" maxRequests="30" 
            requestIntervalInMilliseconds="300" />
      </dynamicIpSecurity>
   </security>
</system.webServer>

Пример кода

В следующих примерах настраивается <dynamicIpSecurity> для сайта.

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyAction:"Unauthorized" /enableProxyMode:"True" /enableLoggingOnlyMode:"True"  /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByConcurrentRequests.enabled:"True" /denyByConcurrentRequests.maxConcurrentRequests:"10" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"25" /denyByRequestRate.requestIntervalInMilliseconds:"210"  /commit:apphost

Примечание

При использовании AppCmd.exe для настройки этих параметров для параметра apphostфиксации необходимо задать значение . Это зафиксирует параметры конфигурации в соответствующем разделе расположения в файле ApplicationHost.config.

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetApplicationHostConfiguration();
            
            ConfigurationSection dynamicIpSecuritySection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site");
            dynamicIpSecuritySection["denyAction"] = @"Forbidden";
            dynamicIpSecuritySection["enableProxyMode"] = true;
            dynamicIpSecuritySection["enableLoggingOnlyMode"] = true;
            
            ConfigurationElement denyByConcurrentRequestsElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests");
            denyByConcurrentRequestsElement["enabled"] = true;
            denyByConcurrentRequestsElement["maxConcurrentRequests"] = 10;
            
            ConfigurationElement denyByRequestRateElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate");
            denyByRequestRateElement["enabled"] = true;
            denyByRequestRateElement["maxRequests"] = 10;
            denyByRequestRateElement["requestIntervalInMilliseconds"] = 10;
            
            serverManager.CommitChanges();
        }
    }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim dynamicIpSecuritySection As ConfigurationSection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site")
      dynamicIpSecuritySection("denyAction") = "Forbidden"
      dynamicIpSecuritySection("enableProxyMode") = true
      dynamicIpSecuritySection("enableLoggingOnlyMode") = true
      Dim denyByConcurrentRequestsElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests")
      denyByConcurrentRequestsElement("enabled") = true
      denyByConcurrentRequestsElement("maxConcurrentRequests") = 10
      Dim denyByRequestRateElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate")
      denyByRequestRateElement("enabled") = true
      denyByRequestRateElement("maxRequests") = 10
      denyByRequestRateElement("requestIntervalInMilliseconds") = 10
      serverManager.CommitChanges
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site");
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized";
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true;
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true;
var denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item("denyByConcurrentRequests");
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true;
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10;
var denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate");
denyByRequestRateElement.Properties.Item("enabled").Value = true;
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25;
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210;

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site")
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized"
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true
Set denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item ("denyByConcurrentRequests")
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10
Set denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate")
denyByRequestRateElement.Properties.Item("enabled").Value = true
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210

adminManager.CommitChanges()

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "denyAction" -value "Unauthorized"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableProxyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableLoggingOnlyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "maxConcurrentRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "maxRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "requestIntervalInMilliseconds" -value 20