Segurança IP dinâmica <dynamicIpSecurity>

Visão geral

O elemento <dynamicIpSecurity> fornece um meio dinâmico de bloqueio de solicitações da Web mal-intencionadas. O uso de restrições de IP dinâmicas significa que o administrador não precisa identificar os endereços IP que precisam ser bloqueados. Em vez disso, o administrador pode configurar o sistema para que ele bloqueie qualquer endereço IP que atenda aos critérios definidos. Isso pode incluir o bloqueio de um cliente remoto se o número de solicitações de conexão HTTP simultâneas desse cliente exceder um número específico ou o bloqueio de um cliente se o número de solicitações recebidas durante um período de tempo exceder um número específico. As restrições de IP dinâmico podem ser configuradas nos níveis do servidor ou do site.

O administrador pode especificar qual código de status de resposta HTTP será retornado se um cliente for bloqueado: Não autorizado (401); Proibido (403); ou Não encontrado (404). Você também pode definir o Tipo de ação de negação como Anular para descartar a conexão sem retornar uma indicação de motivo.

Se você habilitar o modo proxy, uma solicitação poderá ser bloqueada identificando o endereço IP de origem de um cliente que se conecta a um servidor Web por meio de um proxy HTTP ou balanceador de carga. Isso é feito examinando o cabeçalho x-forwarded-for-HTTP.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <dynamicIpSecurity> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <dynamicIpSecurity> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <dynamicIpSecurity> foi introduzido no IIS 8.0.
IIS 7.5 N/D
IIS 7.0 N/D
IIS 6,0 N/D

Instalação

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.
  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.
  4. Na página Funções de Servidor, expanda Servidor Web (IIS), Servidor Web, expanda Segurança e selecione Restrições de IP e Domínio. Clique em Avançar.
    Screenshot that shows the I P and Domain Restrictions selected for Windows Server 2012. .
  5. Na página Selecionar recursos, clique em Avançar.
  6. Na página Confirmar seleções de instalação, clique em Instalar.
  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.
  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
  3. Expanda Serviços de Informações da Internet, expanda Serviços da World Wide Web, expanda Segurança e, em seguida, selecione Segurança de IP.
    Screenshot that shows the I P Security selected for Windows 8.
  4. Clique em OK.
  5. Clique em Fechar.

Instruções

Como adicionar restrições de IP dinâmico para negar acesso a um site

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Se você estiver usando o Windows Server 2012 ou posterior:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou versões posteriores:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, selecione o nome do servidor para adicionar restrições de IP dinâmico ao servidor ou expanda Sites e selecione um site para adicionar restrições de IP dinâmicas para o site.

  3. No painel Página Inicial, clique duas vezes no recurso Endereço IP e Restrições de Domínio.

  4. No painel Ações, clique em Editar Configurações de Restrição Dinâmica....

  5. Na caixa de diálogo Configurações de Restrição de IP Dinâmico, especifique se deseja negar um endereço IP com base no número de amostras simultâneas e/ou na taxa de solicitação, especifique se deseja habilitar o modo somente log e clique em OK.

    Screenshot that shows the Dynamic I P Restrictions Settings dialog box. All variables are selected.

Configuração

O elemento <dynamicIpSecurity> é configurado no nível do servidor ou site.

Atributos

Atributo Descrição
denyAction Atributo de enumeração opcional.

Especifica a resposta do modo de negação padrão que os IIS devem enviar de volta aos clientes.

O valor padrão é Forbidden.
Valor Descrição
AbortRequest Especifica que, por padrão, os IIS devem enviar uma resposta de modo de negação de Abort de volta aos clientes.

O valor numérico é 0.

Unauthorized Especifica que, por padrão, os IIS devem enviar uma resposta de modo de negação de Unauthorized de volta aos clientes. Se um cliente baseado em navegador estiver sendo usado no final remoto, retornar “Não autorizado” poderá fazer com que uma caixa de diálogo de autenticação apareça no cliente remoto, resultando em tentativas de autenticação espúrias para os IIS.

O valor numérico é 401.

Forbidden Especifica que, por padrão, os IIS devem enviar uma resposta de modo de negação de Forbidden de volta aos clientes.

O valor numérico é 403.

NotFound Especifica que, por padrão, os IIS devem enviar uma resposta de modo de negação de Not Found de volta aos clientes.

O valor numérico é 404.

enableLoggingOnlyMode Atributo booliano opcional.

Especifica que o IIS registrará em log solicitações do cliente que seriam rejeitadas sem realmente rejeitá-las.

O valor padrão é false.
enableProxyMode Atributo booliano opcional.

Permite que os IIS não apenas bloqueiem solicitações de um IP do cliente que é visto pelos IIS, mas também bloqueiem solicitações de endereços IP recebidos no cabeçalho HTTP x-forwarded-for. Esse cabeçalho permite identificar o endereço IP de origem de um cliente que se conecta por meio de um proxy HTTP ou balanceador de carga. Isso é chamado de modo proxy.

O valor padrão é false.

Elementos filho

Elemento Descrição
denyByConcurrentRequests Elemento opcional.

Especifica que determinados clientes remotos serão bloqueados com base no número de solicitações recebidas ao longo do tempo.
denyByRequestRate Elemento opcional.

Especifica que determinados clientes remotos serão bloqueados com base no número de solicitações de conexão HTTP simultâneas de clientes.

Exemplo de configuração

O exemplo de configuração a seguir demonstra como definir restrições de endereço IP dinâmico.

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

Exemplo de código

Os exemplos a seguir configuram o <dynamicIpSecurity> de um site.

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

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo 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