Règles personnalisées pour l'Azure Web Application Firewall sur Azure Front Door

L’Azure Web Application Firewall sur Azure Front Door vous permet de contrôler l'accès à vos applications Web en fonction des conditions que vous définissez. Une règle de pare-feu d'application Web (WAF) personnalisée se compose d'un numéro de priorité, d'un type de règle, de conditions de correspondance et d'une action.

Il existe deux types de règles personnalisées : les règles de correspondance et les règles de limite de taux. Une règle de correspondance contrôle l'accès en fonction d'un ensemble de conditions de correspondance. Une règle de limite de débit contrôle l'accès en fonction des conditions de correspondance et des taux de demandes entrantes. Vous pouvez désactiver une règle personnalisée pour l'empêcher d'être évaluée tout en conservant la configuration.

Pour plus d'informations sur la limitation de débit, consultez Qu'est-ce que la limitation de débit pour Azure Front Door ?.

Priorité, types d'action et conditions de correspondance

Vous pouvez contrôler l'accès avec une règle WAF personnalisée qui définit un numéro de priorité, un type de règle, un tableau de conditions de correspondance et une action.

  • Priorité

    Un entier unique qui décrit l’ordre des évaluations des règles de pare-feu d’applications web (WAF). Les règles avec des valeurs de priorité inférieure sont évaluées avant les règles avec des valeurs plus élevées. L’évaluation de la règle s’arrête sur toute action de règle, sauf pour Journal. Les numéros de priorité doivent être uniques parmi toutes les règles personnalisées.

  • Action

    Définit comment acheminer une requête si une règle de pare-feu d'applications web (WAF) est mise en correspondance. Vous pouvez choisir l'une des actions suivantes à appliquer lorsqu'une requête correspond à une règle personnalisée.

    • Autoriser : le WAF autorise le traitement de la requête, enregistre une entrée dans les journaux WAF et se termine.
    • Bloquer : la requête est bloquée. Le WAF envoie une réponse à un client sans transmettre davantage la requête. Le WAF enregistre une entrée dans les journaux WAF et se termine.
    • Journal : le WAF enregistre une entrée dans les journaux du WAF et continue d'évaluer la règle suivante dans l'ordre de priorité.
    • Rediriger : le WAF redirige la requête vers un URI spécifié, enregistre une entrée dans les journaux WAF et se termine.
  • Condition de correspondance

    Définit une variable de correspondance, un opérateur et une valeur de correspondance. Chaque règle peut contenir plusieurs conditions de correspondance. Une condition de correspondance peut être basée sur la géolocalisation, les adresses IP client (CIDR), la taille ou la correspondance de chaîne. La correspondance de chaîne peut correspondre à une liste de variables de correspondance.

    • Variable de correspondance

      • RequestMethod
      • QueryString
      • PostArgs
      • RequestUri
      • RequestHeader
      • RequestBody
      • Cookies
    • Opérateur

      • Any : souvent utilisé pour définir une action par défaut si aucune règle ne correspond. Any est un opérateur qui fait correspondre tous les éléments.
      • Égal à
      • Contient
      • LessThan : contrainte de taille
      • GreaterThan : contrainte de taille
      • LessThanOrEqual : contrainte de taille
      • GreaterThanOrEqual : contrainte de taille
      • BeginsWith
      • EndsWith
      • Expression régulière
    • Regex

      Ne prend pas en charge les opérations suivantes :

      • Références arrière et capture de sous-expressions
      • Assertions arbitraires de largeur nulle
      • Références de sous-routines et modèles récursifs
      • Modèles conditionnels
      • Verbes de contrôle de retours sur trace
      • La directive \C mono-octet
      • La directive de correspondance de saut de ligne \R
      • La directive de début de correspondance de réinitialisation \K
      • Légendes et code incorporé
      • Regroupement atomique et quantificateurs de possession
    • Négation [facultatif] :

      Vous pouvez définir la condition negate sur true si le résultat d'une condition doit être inversé.

    • Transform [facultatif]

      Liste de chaînes avec les noms des transformations à effectuer avant la tentative de la mise en correspondance. Il peut s’agir des transformations suivantes :

      • Majuscules
      • Minuscules
      • SupprEspace
      • RemoveNulls
      • UrlDecode
      • UrlEncode
    • Valeur de correspondance

      Les valeurs de la méthode de requête HTTP prises en charge incluent :

      • GET
      • POST
      • PUT
      • HEAD
      • Suppression
      • LOCK
      • UNLOCK
      • PROFILE
      • OPTIONS
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • COPY
      • MOVE
      • PATCH
      • CONNECT

Exemples

Voici quelques exemples.

Correspondance basée sur des paramètres de requête HTTP

Supposons que vous deviez configurer une règle personnalisée pour autoriser les requêtes qui correspondent aux deux conditions suivantes :

  • La valeur de l’en-tête Referer équivaut à une valeur connue.
  • La chaîne de requête ne contient pas le mot password.

Voici un exemple de description JSON de la règle personnalisée :

{
  "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"
}

Bloquer des requêtes HTTP PUT

Supposons que vous deviez bloquer toute requête qui utilise la méthode HTTP PUT.

Voici un exemple de description JSON de la règle personnalisée :

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

Contrainte de taille

Un WAF Azure Front Door vous permet de créer des règles personnalisées qui appliquent une contrainte de longueur ou de taille sur une partie d'une requête entrante. Cette contrainte de taille est mesurée en octets.

Supposons que vous deviez bloquer les requêtes dont l’URL contient plus de 100 caractères.

Voici un exemple de description JSON de la règle personnalisée :

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

Mettre en correspondance en fonction de l’URI de requête

Supposons que vous devez autoriser des requêtes dans lesquelles l’URI contient « login ».

Voici un exemple de description JSON de la règle personnalisée :

{
  "name": "URIContainsLogin",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "Contains",
      "negateCondition": false,
      "matchValue": [
        "login"
      ]
    }
  ],
  "action": "Allow"
}

Copie et duplication de règles personnalisées

Les règles personnalisées peuvent être dupliquées au sein d’une stratégie donnée. Lors de la duplication d’une règle, vous devez spécifier un nom unique pour la règle et une valeur de priorité unique. De plus, les règles personnalisées peuvent être copiées d’une stratégie WAF Azure Front Door vers une autre tant que les stratégies se trouvent dans le même abonnement. Lorsque vous copiez une règle d’une stratégie vers une autre, vous devez sélectionner la stratégie WAF Azure Front Door dans laquelle vous souhaitez copier la règle. Une fois que vous avez sélectionné la stratégie WAF, vous devez attribuer un nom unique à la règle et attribuer un rang de priorité.

Étapes suivantes