Dynamic IP Security <dynamicIpSecurity>

Panoramica

L'elemento <dynamicIpSecurity> fornisce un mezzo dinamico per bloccare le richieste Web dannose. L'uso di restrizioni IP dinamiche indica che l'amministratore non deve identificare gli indirizzi IP che devono essere bloccati. L'amministratore può invece configurare il sistema in modo che blocchi qualsiasi indirizzo IP che soddisfi i criteri impostati. Ciò può includere il blocco di un client remoto se il numero di richieste di connessione HTTP simultanee da tale client supera un numero specifico o blocca un client se il numero di richieste ricevute in un periodo di tempo supera un numero specifico. Le restrizioni IP dinamiche possono essere configurate a livello di server o sito.

L'amministratore può specificare quale codice di stato della risposta HTTP verrà restituito se un client è bloccato: Non autorizzato (401); Accesso negato (403); o Non trovato (404). È anche possibile impostare Il tipo di azione Nega su Interrompi per eliminare la connessione senza restituire alcuna indicazione del motivo.

Se si abilita la modalità proxy, una richiesta può essere bloccata identificando l'indirizzo IP di origine di un client che si connette a un server Web tramite un proxy HTTP o un servizio di bilanciamento del carico. A tale scopo, esaminare l'intestazione x-forwarded-for-HTTP.

Compatibilità

Versione Note
IIS 10.0 L'elemento <dynamicIpSecurity> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <dynamicIpSecurity> non è stato modificato in IIS 8.5.
IIS 8,0 L'elemento <dynamicIpSecurity> è stato introdotto in IIS 8.0.
IIS 7,5 N/D
IIS 7.0 N/D
IIS 6.0 N/D

Installazione

Windows Server 2012 o Windows Server 2012 R2

  1. Sulla barra delle applicazioni fare clic su Server Manager.
  2. In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
  3. Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
  4. Nella pagina Ruoli server espandere Server Web (IIS), server Web, sicurezzae quindi selezionare IP e restrizioni di dominio. Fare clic su Avanti.
    Screenshot che mostra l'opzione I P and Domain Restrictions selezionata per Windows Server 2012. .
  5. Nella pagina Selezione funzionalità fare clic su Avanti.
  6. Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
  7. Nella pagina Risultati fare clic su Chiudi.

Windows 8 o Windows 8.1

  1. Nella schermata Start spostare il puntatore fino all'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi scegliere Pannello di controllo.
  2. In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
  3. Espandere Internet Information Services, servizi Web a livello mondiale, sicurezza, quindi selezionare Sicurezza IP.
    Screenshot che mostra l'opzione I P Security selezionata per Windows 8.
  4. Fare clic su OK.
  5. Fare clic su Close.

Procedure

Come aggiungere restrizioni IP dinamiche per negare l'accesso per un sito Web

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o versione successiva:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o versione successiva:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni selezionare il nome del server per aggiungere restrizioni IP dinamiche per il server oppure espandere Siti e quindi selezionare un sito per aggiungere restrizioni IP dinamiche per il sito.

  3. Nel riquadro Home fare doppio clic sulla funzionalità Indirizzo IP e Restrizioni dominio .

  4. Nel riquadro Azioni fare clic su Modifica impostazioni restrizione dinamica....

  5. Nella finestra di dialogo Impostazioni restrizione IP dinamica specificare se negare un indirizzo IP in base al numero di campioni simultanei e/o alla frequenza delle richieste, specificare se abilitare la modalità di sola registrazione e quindi fare clic su OK.

    Screenshot che mostra la finestra di dialogo Impostazioni restrizioni I P dinamiche. Tutte le variabili sono selezionate.

Configurazione

L'elemento <dynamicIpSecurity> viene configurato a livello di server o sito.

Attributi

Attributo Descrizione
denyAction Attributo di enumerazione facoltativo.

Specifica la risposta di modalità di negazione predefinita che IIS deve inviare ai client.

Il valore predefinito è Forbidden.
Valore Descrizione
AbortRequest Specifica che per impostazione predefinita IIS deve inviare una risposta in modalità nega di Abort nuovo ai client.

Il valore numerico è 0.

Unauthorized Specifica che per impostazione predefinita IIS deve inviare una risposta in modalità nega di Unauthorized nuovo ai client. Se un client basato su browser viene usato alla fine remota, la restituzione di Unauthorized può causare la visualizzazione di una finestra di dialogo di autenticazione nel client remoto, causando tentativi di autenticazione spuri a IIS.

Il valore numerico è 401.

Forbidden Specifica che per impostazione predefinita IIS deve inviare una risposta in modalità nega di Forbidden nuovo ai client.

Il valore numerico è 403.

NotFound Specifica che per impostazione predefinita IIS deve inviare una risposta in modalità nega di Not Found nuovo ai client.

Il valore numerico è 404.

enableLoggingOnlyMode Attributo booleano facoltativo.

Specifica che IIS registra le richieste dal client che verrebbero rifiutate senza rifiutarle effettivamente.

Il valore predefinito è false.
enableProxyMode Attributo booleano facoltativo.

Consente a IIS non solo di bloccare le richieste da un indirizzo IP client visualizzato da IIS, ma anche di bloccare le richieste da indirizzi IP ricevuti nell'intestazione x-forwarded-for HTTP. Questa intestazione consente di identificare l'indirizzo IP di origine di un client che si connette tramite un proxy HTTP o un servizio di bilanciamento del carico. Questa operazione viene definita modalità proxy.

Il valore predefinito è false.

Elementi figlio

Elemento Descrizione
denyByConcurrentRequests Elemento facoltativo.

Specifica che determinati client remoti verranno bloccati in base al numero di richieste ricevute nel tempo.
denyByRequestRate Elemento facoltativo.

Specifica che determinati client remoti verranno bloccati in base al numero di richieste di connessione HTTP simultanee dai client.

Esempio di configurazione

Nell'esempio di configurazione seguente viene illustrato come impostare le restrizioni degli indirizzi IP dinamici.

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

Codice di esempio

Gli esempi seguenti configurano< dynamicIpSecurity> per un sito.

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

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di 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