Seguridad de IP dinámica <dynamicIpSecurity>

Información general

El elemento <dynamicIpSecurity> proporciona un medio dinámico para bloquear solicitudes web malintencionadas. El uso de restricciones de IP dinámicas supone que el administrador no necesita identificar las direcciones IP que se deben bloquear. En su lugar, el administrador puede configurar el sistema para que bloquee cualquier dirección IP que cumpla con unos criterios establecidos. Estos pueden ser bloquear un cliente remoto si el número de solicitudes de conexión HTTP simultáneas de ese cliente supera un número específico, o bloquear un cliente si el número de solicitudes recibidas durante un período de tiempo supera un número específico. Las restricciones de IP dinámicas se pueden configurar en los niveles de servidor o sitio.

El administrador puede especificar qué código de estado de respuesta HTTP devolver si un cliente está bloqueado: No autorizado (401), Prohibido (403) o No encontrado (404). También puede establecer el tipo de acción Denegar en Anular para cortar la conexión sin que devuelva ninguna explicación.

Si habilita el modo proxy, se puede bloquear una solicitud al identificar la dirección IP de origen de un cliente que se conecta a un servidor web a través de un proxy HTTP o un equilibrador de carga. Para ello, examine el encabezado x-forwarded-for-HTTP.

Compatibilidad

Versión Notas
IIS 10.0 El elemento <dynamicIpSecurity> no se modificó en IIS 10.0.
IIS 8.5 El elemento <dynamicIpSecurity> no se modificó en IIS 8.5.
IIS 8.0 El elemento <dynamicIpSecurity> se introdujo en IIS 8.0.
IIS 7.5 N/D
IIS 7.0 N/D
IIS 6,0 N/D

Configuración

Windows Server 2012 o Windows Server 2012 R2

  1. En la barra de tareas, haga clic en Administrador del servidor.
  2. En Administrador del servidor, haga clic en el menú Administrar y, después, haga clic en Agregar roles y características.
  3. En el asistente para Agregar roles y características, haga clic en Siguiente. Seleccione el tipo de instalación y haga clic en Siguiente. Seleccione el servidor de destino y haga clic en Siguiente.
  4. En la página Roles de servidor, expanda Servidor web (IIS), expanda Servidor web, expanda Seguridad y, a continuación, seleccione Restricciones de IP y dominio. Haga clic en Next.
    Screenshot that shows the I P and Domain Restrictions selected for Windows Server 2012..
  5. En la página Seleccionar características, haz clic en Siguiente.
  6. En la página Confirmar selecciones de instalación, haga clic en Instalar.
  7. En la página Resultados , haga clic en Cerrar.

Windows 8 o Windows 8.1

  1. En la pantalla Inicio, mueva el puntero hasta la esquina inferior izquierda, haga clic con el botón derecho en el botón Inicio y, a continuación, haga clic en Panel de control.
  2. En Panel de control, haga clic en Programas y características y después en Activar o desactivar las características de Windows.
  3. Expanda Internet Information Services, expanda Servicios World Wide Web, expanda Seguridad y, a continuación, seleccione Seguridad de IP.
    Screenshot that shows the I P Security selected for Windows 8.
  4. Haga clic en OK.
  5. Haga clic en Cerrar.

Procedimientos

Adición de restricciones de IP para denegar el acceso a un sitio web

  1. Abra el Administrador de Internet Information Services (IIS):

    • Si usa Windows Server 2012 o versiones posteriores:

      • En la barra de tareas, haga clic en Administrador del servidor, en Herramientas y, a continuación, en Administrador de Internet Information Services (IIS).
    • Si usa Windows 8 o versiones posteriores:

      • Mantenga presionada la tecla Windows, presione la letra X y haga clic en Panel de control.
      • En Panel de control, haga clic en Herramientas administrativas y, a continuación, haga doble clic en Administrador de Internet Information Services (IIS).
  2. En el panel Conexiones, seleccione el nombre del servidor al que agregar restricciones de IP dinámicas para el servidor, o expanda Sitios y seleccione un sitio al que agregarle restricciones de IP dinámicas.

  3. En el panel Inicio, haga doble clic en la característica Restricciones de dominio y dirección IP.

  4. En el panel Acciones, haga clic en Editar configuración de restricción dinámica....

  5. En el cuadro de diálogo Configuración de restricción de IP dinámica, especifique si se va a denegar una dirección IP según el número de muestras simultáneas y/o tasa de solicitudes, especifique si se debe habilitar el modo de solo registro y haga clic en Aceptar.

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

Configuración

El elemento <dynamicIpSecurity> se configura en el nivel del servidor o sitio.

Atributos

Atributo Descripción
denyAction Atributo enum opcional.

Especifica la respuesta del modo de denegación predeterminada que IIS debe devolver a los clientes.

El valor predeterminado es Forbidden.
Valor Descripción
AbortRequest Especifica que, de forma predeterminada, IIS debe enviar una respuesta en modo de denegación de Abort a los clientes.

El valor numérico es 0.

Unauthorized Especifica que, de forma predeterminada, IIS debe enviar una respuesta en modo de denegación de Unauthorized a los clientes. Si se está usando un cliente basado en explorador en el extremo remoto, devolver No autorizado puede provocar que aparezca un cuadro de diálogo de autenticación en el cliente remoto, dando lugar a intentos de autenticación falsos en IIS.

El valor numérico es 401.

Forbidden Especifica que, de forma predeterminada, IIS debe enviar una respuesta en modo de denegación de Forbidden a los clientes.

El valor numérico es 403.

NotFound Especifica que, de forma predeterminada, IIS debe enviar una respuesta en modo de denegación de Not Found a los clientes.

El valor numérico es 404.

enableLoggingOnlyMode Atributo Boolean opcional.

Especifica que IIS registrará las solicitudes del cliente que se rechazarían sin ser realmente rechazadas.

El valor predeterminado es false.
enableProxyMode Atributo Boolean opcional.

Permite a IIS no solo bloquear peticiones desde una IP de cliente que es vista por IIS, sino también bloquear peticiones desde direcciones IP que son recibidas en el encabezado HTTP x-forwarded-for. Este encabezado permite identificar la dirección IP de origen de un cliente que se conecta a través de un proxy HTTP o un equilibrador de carga. Esto se conoce como modo proxy.

El valor predeterminado es false.

Elementos secundarios

Elemento Descripción
denyByConcurrentRequests Elemento opcional.

Especifica que clientes remotos concretos se bloquearán según el número de solicitudes recibidas a lo largo del tiempo.
denyByRequestRate Elemento opcional.

Especifica que clientes remotos concretos se bloquearán según eel número de solicitudes de conexión HTTP simultáneas de los clientes.

Ejemplo de configuración

Los siguientes ejemplos de configuración muestran cómo establecer restricciones de direcciones IP dinámicas.

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

Código de ejemplo

Los siguientes ejemplos configuran <dynamicIpSecurity> en un sitio.

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

Nota:

Debe asegurarse de establecer el parámetro commit en apphost cuando use AppCmd.exe para configurar estos valores. Esto confirma los valores de configuración en la sección de ubicación adecuada del archivo 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