Sécurité IP dynamique <dynamicIpSecurity>

Vue d’ensemble

L’élément <dynamicIpSecurity> fournit un moyen dynamique de bloquer les requêtes web malveillantes. L’utilisation de restrictions dynamiques d’adresse IP signifie que l’administrateur n’a pas besoin d’identifier les adresses IP qui doivent être bloquées. Au lieu de cela, l’administrateur peut configurer le système afin qu’il bloque n’importe quelle adresse IP qui répond aux critères définis. Cela peut inclure le blocage d’un client distant si le nombre de demandes de connexion HTTP simultanées de ce client dépasse un nombre spécifique, ou le blocage d’un client si le nombre de demandes reçues sur une période donnée dépasse un nombre spécifique. Les restrictions dynamiques d’adresse IP peuvent être configurées au niveau du serveur ou du site.

L’administrateur peut spécifier le code d’état de la réponse HTTP qui sera retourné si un client est bloqué : Non autorisé (401), Interdit (403) ou Introuvable (404). Vous pouvez également définir le type d’action Refuser pour abandonner la connexion sans retourner aucune indication sur la raison.

Si vous activez le mode proxy, une requête peut être bloquée en identifiant l’adresse IP d’origine d’un client qui se connecte à un serveur web via un proxy HTTP ou un équilibreur de charge. Pour ce faire, examinez l’en-tête x-forwarded-for-HTTP.

Compatibilité

Version Notes
IIS 10.0 L’élément <dynamicIpSecurity> n’a pas été modifié dans IIS 10.0.
IIS 8.5 L’élément <dynamicIpSecurity> n’a pas été modifié dans IIS 8.5.
IIS 8.0 L’élément <dynamicIpSecurity> a été introduit dans IIS 8.0.
IIS 7.5 S/O
IIS 7.0 S/O
IIS 6.0 S/O

Programme d’installation

Windows Server 2012 ou Windows Server 2012 R2

  1. Dans la barre des tâches, cliquez sur Gestionnaire de serveur.
  2. Dans Gestionnaire de serveur, cliquez sur le menu Gérer, puis sur Ajouter des rôles et des fonctionnalités.
  3. Dans l’Assistant Ajout de rôles et de fonctionnalités, cliquez sur Suivant. Sélectionnez le type d’installation, puis cliquez sur Suivant. Sélectionnez le serveur de destination, puis cliquez sur Suivant.
  4. Dans la page Rôles serveur, développez Serveur web (IIS), Serveur web, Sécurité, puis sélectionnez Restrictions d’adresse IP et de domaine. Sélectionnez Suivant.
    Screenshot that shows the I P and Domain Restrictions selected for Windows Server 2012. .
  5. Dans la page Sélectionner les composants, cliquez sur Suivant.
  6. Dans la page Confirmer les sélections d’installation, cliquez sur Installer.
  7. Dans la page Résultats , cliquez sur Fermer.

Windows 8 ou Windows 8.1

  1. Dans l’écran d’accueil, déplacez le pointeur jusqu’au coin inférieur gauche, cliquez avec le bouton droit sur le bouton Démarrer, puis cliquez sur Panneau de configuration.
  2. Dans le Panneau de configuration, cliquez sur Programmes et fonctionnalités, puis sur Activer ou désactiver des fonctionnalités Windows.
  3. Développez Internet Information Services, Services World Wide Web, Sécurité, puis sélectionnez Sécurité IP.
    Screenshot that shows the I P Security selected for Windows 8.
  4. Cliquez sur OK.
  5. Cliquez sur Fermer.

Procédure

Comment ajouter des restrictions dynamiques d’adresse IP pour refuser l’accès pour un site web

  1. Ouvrez le Gestionnaire Internet Information Services (IIS) :

    • Si vous utilisez Windows Server 2012 ou version ultérieure :

      • Dans la barre des tâches, cliquez sur Gestionnaire de serveur, sur Outils, puis sur Gestionnaire Internet Information Services (IIS).
    • Si vous utilisez Windows 8 ou version ultérieure :

      • Maintenez la touche Windows enfoncée, appuyez sur la lettre X, puis cliquez sur Panneau de configuration.
      • Cliquez sur Outils d’administration, puis double-cliquez sur Gestionnaire Internet Information Services (IIS).
  2. Dans le volet Connexions, sélectionnez le nom du serveur pour ajouter des restrictions dynamiques d’adresse IP pour le serveur, ou développez Sites et sélectionnez un site pour ajouter des restrictions dynamiques d’adresse IP pour le site.

  3. Dans le volet Accueil, double-cliquez sur la fonctionnalité Restrictions d’adresse IP et de domaine.

  4. Dans le volet Actions, cliquez sur Modifier les paramètres de restriction dynamique....

  5. Dans la boîte de dialogue Paramètres de restriction dynamique d’adresse IP, spécifiez s’il faut refuser une adresse IP en fonction du nombre d’exemples simultanés et/ou du taux de demandes, indiquez s’il faut activer le mode de journalisation uniquement, puis cliquez sur OK.

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

Configuration

L’élément <dynamicIpSecurity> est configuré au niveau du serveur ou du site.

Attributs

Attribut Description
denyAction Attribut enum facultatif.

Spécifie la réponse en mode refus par défaut qu’IIS doit renvoyer aux clients.

La valeur par défaut est Forbidden.
Valeur Description
AbortRequest Spécifie que, par défaut, IIS doit renvoyer la réponse en mode refus Abort aux clients.

La valeur numérique est 0.

Unauthorized Spécifie que, par défaut, IIS doit renvoyer la réponse en mode refus Unauthorized aux clients. Si un client basé sur un navigateur est utilisé à l’extrémité distante, le renvoi de la réponse Non autorisé peut entraîner l’affichage d’une boîte de dialogue d’authentification sur le client distant, ce qui entraîne des tentatives d’authentification trompeuses auprès d’IIS.

La valeur numérique est 401.

Forbidden Spécifie que, par défaut, IIS doit renvoyer la réponse en mode refus Forbidden aux clients.

La valeur numérique est 403.

NotFound Spécifie que, par défaut, IIS doit renvoyer la réponse en mode refus Not Found aux clients.

La valeur numérique est 404.

enableLoggingOnlyMode Attribut booléen facultatif.

Spécifie qu’IIS journalise les demandes du client qui seraient rejetées sans les rejeter réellement.

La valeur par défaut est false.
enableProxyMode Attribut booléen facultatif.

Permet à IIS non seulement de bloquer les demandes d’une adresse IP cliente visible par IIS, mais également de bloquer les demandes d’adresses IP reçues dans l’en-tête x-forwarded-for-HTTP. Cet en-tête vous permet d’identifier l’adresse IP d’origine d’un client qui se connecte via un proxy HTTP ou un équilibreur de charge. Il s’agit du mode proxy.

La valeur par défaut est false.

Éléments enfants

Élément Description
denyByConcurrentRequests Élément facultatif.

Spécifie que certains clients distants seront bloqués en fonction du nombre de demandes reçues au fil du temps.
denyByRequestRate Élément facultatif.

Spécifie que certains clients distants seront bloqués en fonction du nombre de demandes de connexion HTTP simultanées des clients.

Exemple Configuration

L’exemple de configuration suivant montre comment définir des restrictions dynamiques d’adresse IP.

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

Exemple de code

Les exemples suivants configurent <dynamicIpSecurity> pour un 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

Remarque

Vous devez veiller à définir le paramètre commit sur apphost quand vous utilisez AppCmd.exe pour configurer ces paramètres. Cela valide les paramètres de configuration dans la section d’emplacement appropriée dans le fichier 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