Regole personalizzate per Web application firewall con Frontdoor di Azure

Azure Web application firewall (WAF) con Frontdoor consente di controllare l'accesso alle applicazioni Web in base alle condizioni definite. Una regola WAF personalizzata è costituita da un numero di priorità, un tipo di regola, condizioni di corrispondenza e un'azione. Ci sono due tipi di regole personalizzate: regole di corrispondenza e regole per il limite di frequenza. Una regola di corrispondenza controlla l'accesso in base a un set di condizioni di corrispondenza, mentre una regola per il limite di frequenza controlla l'accesso in base alle condizioni di corrispondenza e alle frequenze delle richieste in ingresso. È possibile disabilitare una regola personalizzata per impedire che venga valutata, ma mantenere comunque la configurazione.

Per altre informazioni sulla limitazione della frequenza, vedere Qual è la limitazione della frequenza per il servizio Frontdoor di Azure?.

Priorità, condizioni di corrispondenza e tipi di azione

È possibile controllare l'accesso con una regola WAf personalizzata che definisce un numero di priorità, un tipo di regola, una matrice di condizioni di corrispondenza e un'azione.

  • Priorità: è un intero univoco che descrive l'ordine di valutazione delle regole WAF. Le regole con valori con priorità inferiore vengono valutate prima delle regole con valori superiori. La valutazione della regola si arresta su qualsiasi azione della regola, ad eccezione di Log. I numeri di priorità devono essere univoci tra tutte le regole personalizzate.

  • Azione: definisce come instradare una richiesta se viene corrispondente una regola WAF. È possibile scegliere una delle azioni seguenti da applicare quando una richiesta corrisponde a una regola personalizzata.

    • Consenti : WAF consente alla richiesta di elaborare, registra una voce nei log WAF e chiude.
    • Blocca : la richiesta è bloccata. WAF invia la risposta al client senza inoltrare ulteriormente la richiesta. WAF registra una voce nei log WAF e termina.
    • Log : WAF registra una voce nei log WAF e continua a valutare la regola successiva nell'ordine di priorità.
    • Reindirizzamento : WAF reindirizza la richiesta a un URI specificato, registra una voce nei log WAF e termina.
  • Condizione di corrispondenza: definisce una variabile di corrispondenza, un operatore e un valore di corrispondenza. Ogni regola può contenere più condizioni di corrispondenza. Una condizione di corrispondenza può essere basata su posizione geografica, indirizzi IP client (CIDR), dimensioni o corrispondenza stringa. La corrispondenza stringa può essere rispetto a un elenco di variabili di corrispondenza.

    • Variabile di corrispondenza:

      • RequestMethod
      • QueryString
      • PostArgs
      • RequestUri
      • RequestHeader
      • RequestBody
      • Cookie
    • Operatore:

      • Qualsiasi: viene spesso usato per definire l'azione predefinita se non vengono corrispondenti regole. Qualsiasi è una corrispondenza con tutti gli operatori.
      • Uguale a
      • Contiene
      • LessThan: vincolo di dimensioni
      • GreaterThan: vincolo di dimensioni
      • LessThanOrEqual: vincolo di dimensioni
      • GreaterThanOrEqual: vincolo di dimensioni
      • BeginsWith
      • EndsWith
      • Regex (Espressione regolare)
    • Regex non supporta le operazioni seguenti:

      • Backreferences e acquisizione di sottoespressioni
      • Asserzioni di larghezza zero arbitrarie
      • Riferimenti di subroutine e modelli ricorsivi
      • Modelli condizionali
      • Verbi di controllo backtracking
      • Direttiva \C a byte singolo
      • Direttiva \R newline match
      • Direttiva \K di reimpostazione delle corrispondenze
      • Callout e codice incorporato
      • Raggruppamento atomico e quantifier possessive
    • Nega [facoltativo]: È possibile impostare la condizione negata su true se il risultato di una condizione deve essere negato.

    • Trasformare [facoltativo]: Elenco di stringhe con nomi di trasformazioni da eseguire prima che venga tentata la corrispondenza. Queste possono essere le trasformazioni seguenti:

      • Maiuscole
      • Minuscole
      • Taglio
      • RemoveNulls
      • UrlDecode
      • Urlencode
    • Valore di corrispondenza: I valori del metodo di richiesta HTTP supportati includono:

      • GET
      • POST
      • PUT
      • HEAD
      • DELETE
      • LOCK
      • UNLOCK
      • PROFILE
      • OPTIONS
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • COPIA
      • MOVE

Esempi

Corrispondenza basata sui parametri della richiesta HTTP

Si supponga di dover configurare una regola personalizzata per consentire le richieste che corrispondono alle due condizioni seguenti:

  • Il Referer valore dell'intestazione è uguale a un valore noto.
  • La stringa di query non contiene la parola "password".

Ecco una descrizione JSON di esempio della regola personalizzata:

{
  "name": "AllowFromTrustedSites",
  "priority": 1,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestHeader",
      "selector": "Referer",
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "www.mytrustedsites.com/referpage.html"
      ]
    },
    {
      "matchVariable": "QueryString",
      "operator": "Contains",
      "matchValue": [
        "password"
      ],
      "negateCondition": true
    }
  ],
  "action": "Allow"
}

Bloccare le richieste HTTP PUT

Si supponga di dover bloccare qualsiasi richiesta che usi il metodo HTTP PUT.

Ecco una descrizione JSON di esempio della regola personalizzata:

{
  "name": "BlockPUT",
  "priority": 2,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestMethod",
      "selector": null,
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "PUT"
      ]
    }
  ],
  "action": "Block"
}

Vincolo dimensioni

Il WAF di Frontdoor consente di creare regole personalizzate che applicano un vincolo di lunghezza o dimensione in una parte di una richiesta in ingresso.

Si supponga di dover bloccare le richieste in cui l'URL è più lungo di 100 caratteri.

Ecco una descrizione JSON di esempio della regola personalizzata:

{
  "name": "URLOver100",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "GreaterThanOrEqual",
      "negateCondition": false,
      "matchValue": [
        "100"
      ]
    }
  ],
  "action": "Block"
}

Passaggi successivi