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
- На панели задач щелкните Диспетчер сервера.
- В диспетчер сервера откройте меню Управление и выберите пункт Добавить роли и компоненты.
- В мастере добавления ролей и компонентов нажмите кнопку Далее. Выберите тип установки и нажмите кнопку Далее. Выберите целевой сервер и нажмите кнопку Далее.
- На странице Роли сервера разверните узел Веб-сервер (IIS),Веб-сервер, Безопасность, а затем выберите Ограничения IP-адресов и доменов. Щелкните Далее.
. - На странице Выбор компонентов нажмите кнопку Далее.
- На странице Подтверждение выбранных элементов для установки нажмите кнопку Установить.
- На странице Результаты нажмите кнопку Закрыть.
Windows 8 или Windows 8.1
- На начальном экране переместите указатель в левый нижний угол, щелкните правой кнопкой мыши кнопку Пуск и выберите панель управления.
- В панель управления выберите Программы и компоненты, а затем — Включить или отключить компоненты Windows.
- Разверните узлы Службы IIS, Веб-службы, Безопасность, а затем выберите Безопасность IP-адресов.
- Нажмите кнопку ОК.
- Щелкните Закрыть.
Инструкции
Добавление динамических ограничений IP-адресов для запрета доступа к веб-сайту
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 или более поздней версии:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8 или более поздней версии:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения выберите имя сервера, чтобы добавить динамические ограничения IP-адресов для сервера, или разверните узел Сайты , а затем выберите сайт для добавления динамических ограничений IP-адресов для сайта.
На панели Главная дважды щелкните функцию IP-адреса и ограничения домена .
В области Действия щелкните Изменить параметры динамических ограничений....
В диалоговом окне Динамические параметры ограничения IP-адресов укажите, следует ли запретить IP-адрес на основе количества одновременных выборок и (или) частоты запросов, укажите, следует ли включить режим только для ведения журнала, а затем нажмите кнопку ОК.
Конфигурация
Элемент <dynamicIpSecurity>
настраивается на уровне сервера или сайта.
Атрибуты
Атрибут | Описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
denyAction |
Необязательный атрибут перечисления. Задает ответ режима запрета по умолчанию, который iis должны отправлять клиентам. Значение по умолчанию — Forbidden .
|
||||||||||
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