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
- Na barra de tarefas, clique em Gerenciador do Servidor.
- No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.
- 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.
- 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.
. - Na página Selecionar recursos, clique em Avançar.
- Na página Confirmar seleções de instalação, clique em Instalar.
- Na página Resultados , clique em Fechar.
Windows 8 ou Windows 8.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.
- Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.
- 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.
- Clique em OK.
- Clique em Fechar.
Instruções
Como adicionar restrições de IP dinâmico para negar acesso a um site
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).
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.
No painel Página Inicial, clique duas vezes no recurso Endereço IP e Restrições de Domínio.
No painel Ações, clique em Editar Configurações de Restrição Dinâmica....
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.
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 .
|
||||||||||
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