Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Nazim Lala
Introducción
El módulo Restricciones dinámicas de IP (DIPR) para IIS 7.0 y versiones posteriores proporciona protección contra ataques por denegación de servicio y fuerza bruta en servidores web y sitios web. Para proporcionar esta protección, el módulo bloquea temporalmente las direcciones IP de los clientes HTTP que realizan un número inusualmente alto de solicitudes simultáneas o que realizan un gran número de solicitudes durante un período de tiempo reducido.
¿Cuándo usar restricciones de IP dinámicas?
Cuando necesite permitir o denegar el acceso a un sitio web (o permitir todas excepto registrar las condiciones que se cumplan) en función del número de solicitudes simultáneas que se originan en una dirección IP o en función del número de solicitudes de la dirección IP durante una determinada cantidad de tiempo.
Características
El módulo Restricciones dinámicas de IP incluye estas características clave:
- Bloqueo de direcciones IP en función del número de solicitudes simultáneas: si un cliente HTTP supera el número de solicitudes simultáneas permitidas, la dirección IP del cliente se bloquea temporalmente.
- Bloqueo de la dirección IP en función del número de solicitudes durante un período de tiempo: si un cliente HTTP supera el número de solicitudes realizadas durante un intervalo de tiempo especificado, la dirección IP del cliente se bloquea temporalmente.
- Lista de direcciones IP permitidas que no se bloquearán: Puede agregar una lista de las direcciones IP de los clientes que desea excluir de que el módulo bloquee independientemente de otra configuración.
- varias acciones de denegación: puede especificar qué respuesta se devuelve a un cliente HTTP para el que se bloquea la dirección IP. El módulo puede devolver códigos de estado 403 y 404 o simplemente finalizar la conexión HTTP y no devolver ninguna respuesta.
- Compatibilidad con servidores web detrás de un proxy: Si su servidor web está detrás de un proxy, puede configurar el módulo para que use la dirección IP del cliente desde un encabezado X-Forwarded-For.
- IPv6: el módulo proporciona compatibilidad completa con direcciones IPv6.
Instalación del módulo DIPR
Puede probar los métodos siguientes para instalar las restricciones de IP dinámicas:
En la pantalla de Selección de servicios de rol, vaya a Servidor Web (IIS) > Servidor Web > Seguridad. Marque la casilla IP y Restricciones de dominio y haga clic en Siguiente para continuar.
Prerrequisitos
Debe tener uno de los siguientes sistemas operativos.
- Windows Server 2008
- Windows Vista SP1
- Windows Server 2008 R2
- Windows 7
Desinstalación de la versión beta del módulo DIPR
Si está usando la versión primerabeta del módulo DIPR, debe desinstalarla antes de instalar el candidato a versión, o se producirá un error y la instalación fallará. Asegúrese de realizar una copia de seguridad de la configuración antes de desinstalar la versión beta.
Si usa la versión beta 2 de del módulo DIPR, puede actualizar directamente a la versión final. Se conservarán los valores de configuración.
Acceso y configuración de restricciones dinámicas de IP
Nota: Al configurar restricciones de IP, debe tener en cuenta tanto el nivel de IIS como la configuración de nivel de sitio, ya que el nivel de sitio invalidará el nivel de IIS (se trata de un comportamiento común de IIS y no específico de la característica restricciones de IP).
Las restricciones de IP dinámicas se pueden configurar mediante el Administrador de IIS, las API de configuración de IIS o mediante la herramienta de línea de comandos appcmd.
Para acceder a la configuración de restricción de IP dinámica en el Administrador de IIS, siga estos pasos:
- Abrir el Administrador de IIS
- En la vista de árbol del lado izquierdo, seleccione el nodo de servidor si desea configurar la configuración de todo el servidor o seleccione un nodo de sitio para configurar opciones específicas del sitio.
- En la vista Características, haga clic en "Restricciones de IP dinámicas".
Ejemplo 1: Bloqueo de la dirección IP en función del número de solicitudes simultáneas mediante appcmd
Al usar esta opción, el servidor permitirá que la dirección IP de cualquier cliente realice solo un número configurable de solicitudes simultáneas. Se denegarán las solicitudes adicionales que superen el límite especificado.
Una manera sencilla de probar esta característica es establecer el número máximo de solicitudes simultáneas en 2 mediante la ejecución del comando appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity
/denyByConcurrentRequests.enabled:"True"
/denyByConcurrentRequests.maxConcurrentRequests:"2"
/commit:apphost
Importante
Al configurar el número de solicitudes simultáneas para una aplicación web real, pruebe exhaustivamente el límite que elija para asegurarse de que los clientes HTTP válidos no se bloquean. Esto es especialmente importante para las aplicaciones enriquecidas de Internet que tienen páginas web habilitadas para AJAX y sirven contenido multimedia.
Ejemplo 2: Bloqueo de direcciones IP en función del número de solicitudes a lo largo del tiempo mediante appcmd
Al usar esta opción, el servidor denegará las solicitudes de cualquier dirección IP del cliente HTTP que haga más de un número configurable de solicitudes durante un período de tiempo. La dirección IP permanecerá bloqueada hasta que el número de solicitudes dentro de un período de tiempo caiga por debajo del límite configurado.
Para probar esta característica, establezca el "Número máximo de solicitudes" en 5 y "Período de tiempo" en 5000 ejecutando el comando appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"5" /denyByRequestRate.requestIntervalInMilliseconds:"5000" /commit:apphost
Abra el explorador web, solicite http://localhost/welcome.png y presione F5 para actualizar continuamente la página. Esto generará más de 5 solicitudes durante 5 segundos, por lo que, como resultado, verá que el servidor responde con el código de estado 403 - Prohibido.
Si espera otros 5 segundos cuando se hayan ejecutado todas las solicitudes anteriores y luego realiza otra solicitud, tendrá éxito.
Importante
Al configurar el número de solicitudes permitidas a lo largo del tiempo para una aplicación web real, pruebe exhaustivamente los límites que elija para asegurarse de que los clientes HTTP válidos no se bloquean. Esto es especialmente importante para las aplicaciones enriquecidas de Internet que tienen páginas web habilitadas para AJAX y sirven contenido multimedia.
Ejemplo 3: Bloqueo de la dirección IP en función del número de solicitudes simultáneas mediante la interfaz de usuario
En mi nivel de IIS, tengo la siguiente configuración:
En "Editar configuración de características":
En "Editar configuración de restricción dinámica...":
En mi nivel de sitio tengo la siguiente configuración:
Esto significa que se permitirán hasta 2 solicitudes simultáneas al sitio (debido al número 2 establecido anteriormente) y se recibirá un código de estado de 403 para cualquier otra solicitud simultánea (debido a la acción "Prohibido" configurada anteriormente) como se puede ver en las herramientas de desarrollo del explorador (hice clic en "deshabilitar caché" para borrar y evitar el almacenamiento en caché del lado del explorador):
Nota: Es posible que se pregunte por qué ve 3 solicitudes permitidas y no solo dos; esto se debe a que las dos primeras solicitudes se abrieron simultáneamente y, una vez finalizada, se produjo que la tercera solicitud llegó a la aplicación, lo que significa que la tercera solicitud era la única (por lo tanto, solo 1 solicitudes simultáneas) cuando se produjo.
La acción "Permitir" configurada anteriormente significa que cualquier dirección IP está bien para enviar solicitudes y que las reglas configuradas especifican en qué condiciones se denegará el acceso a estas direcciones IP permitidas.
Como ha observado, la configuración de nivel de sitio de "Permitir" invalida el nivel "Denegar" de IIS y la configuración de nivel del sitio de "Prohibido" invalidó la configuración de nivel de IIS "No encontrado" y, por tanto, se envió el código de estado 403 en lugar de 404.
Sin embargo, si cambio el nivel de sitio "Permitir" a "Denegar", se denegará el acceso a todas las direcciones IP independientemente de si realizaron 2 solicitudes simultáneas o de lo contrario:
Ejemplo 4: Bloqueo de la dirección IP en función del número de solicitudes simultáneas & número de solicitudes a lo largo del tiempo, mediante la interfaz de usuario
Ahora vamos a cambiar la configuración del ejemplo 3 un poco en el nivel de sitio. El nivel de IIS es el mismo que antes en el ejemplo 3:
La configuración a nivel de sitio ahora es:
Ahora al realizar la solicitud desde el explorador:
Cada línea de color (ejemplo resaltada) representa la duración de una solicitud. La regla especifica dos condiciones como puede ver. Esto significa que, una vez cumplida cualquiera de las condiciones, se aplicará la denegación. La regla solo permitirá hasta dos solicitudes en un plazo de 200 msec y se denegarán las solicitudes adicionales dentro de este período de tiempo. Como se puede ver, la tercera solicitud se desencadenó casi 20 msec después de la primera, lo que significa que ahora tenemos más de dos solicitudes dentro del marco de 200 msec y, por lo tanto, se denegará la tercera, y así será la 4 y la 5 y la 6.
Registro
Verá lo siguiente en los registros de IIS (por ejemplo 2 anteriores):
2024-07-22 14:17:48 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 1
2024-07-22 14:17:48 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 3
2024-07-22 14:17:48 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 5
2024-07-22 14:17:48 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64JJqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /favicon.ico - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 0
2024-07-22 14:17:48 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 403 502 0 0
El código de estado HTTP para las solicitudes denegadas en este ejemplo será 403 y el código de subestado será 502. De este modo, puede indicar la diferencia entre el código de estado prohibido normal establecido por el código de aplicación y entre el conjunto Prohibido establecido por la característica Restricciones de IP de IIS. A continuación se describe la lista de (códigos de estado) establecidos por la característica restricción de IP.
Denegar acciones
El módulo se puede configurar para realizar las siguientes acciones al denegar solicitudes de direcciones IP:
• Prohibido: 403 • No autorizado: 401 • No encontrado: 404 • Anular: la conexión TCP simplemente se restablecerá y http no se establecerá. Esto también es útil en caso de que se deniegue la página principal y no quiere que el usuario final vea expuesto el código de subestado 502 (para evitar que sepa que esto se debe a la función de restricción de IP). En su lugar, el usuario verá lo siguiente:
Estos son los posibles códigos de subestado de la característica de restricción de IP: 501, 502.
El código de subestado será 501 o 502 en función de cuál de las dos condiciones se cumplió y, por tanto, se denegó el acceso del cliente: 501:> restricción de IP dinámica: se realizaron demasiadas solicitudes simultáneas desde la misma dirección IP del cliente.
502-> restricción de IP dinámica: se alcanzó el número máximo de solicitudes de la misma dirección IP de cliente dentro de un límite de tiempo especificado.
Los códigos anteriores se documentan aquí: Introducción al código de estado HTTP: Internet Information Services | Microsoft Learn
Habilitar el modo de solo registro:
Ahora, en el caso de "Habilitar modo de solo registro" no habrá clientes denegados por esta característica, lo que significa que el código de estado será el resultado esperado (normalmente 200, pero también depende de la aplicación) y los clientes recibirán la respuesta normal esperada, pero el código de subestado que indica que se cumple una de las dos condiciones se registrará en los registros de IIS. A continuación se muestra un ejemplo:
2024-07-28 06:57:35 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 3 2024-07-28 06:57:35 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 3
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64JJqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 502 0 8
2024-07-28 06:57:35 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 9
2024-07-28 06:57:35 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 8 2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 19
2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 37
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap.min.js.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 404 502 2 0
Y el cliente obtendrá esto de su parte.
Compatibilidad con servidores web detrás del proxy
Si los servidores web están detrás de un firewall o una máquina proxy, la dirección IP del cliente para todas las solicitudes podría aparecer como la dirección IP del servidor proxy o del firewall. Esto dificultaría la capacidad de que el módulo de restricción de IP dinámica resultara útil. Sin embargo, la mayoría de estos servidores agregan un encabezado X-Forwarded-For en la solicitud HTTP que contiene la dirección IP del cliente original. Al seleccionar la casilla "Proxy" en la página principal de configuración de restricciones de IP dinámicas, se comprobará primero la dirección IP del cliente en este encabezado.