Configurer des listes d’exclusions de pare-feu d'applications web
Il peut arriver que l’Azure Web Application Firewall d’Azure Front Door bloque une demande légitime. Au moment de régler votre pare-feu d’applications web (WAF), vous pouvez le configurer de sorte qu’il autorise les demandes de votre application. Les listes d’exclusion WAF vous permettent d’omettre certains attributs de demande dans une évaluation WAF. Le reste de la requête est évalué comme étant normal. Pour plus d’informations sur les listes d’exclusions, consultez Listes d’exclusions Azure Web Application Firewall avec Azure Front Door.
Une liste d’exclusions peut être configurée à l’aide d’Azure PowerShell, d’Azure CLI, de l’API REST, de Bicep, de modèles Azure Resource Manager et du portail Azure.
Scénario
Supposez que vous avez créé une API. Vos clients envoient des demandes à votre API qui incluent des en-têtes avec des noms comme userid
et user-id
.
Pendant le réglage de votre pare-feu WAF, vous remarquez que certaines demandes légitimes avaient été bloquées, car les en-têtes utilisateur contenaient des séquences de caractères que WAF a prises pour des attaques par injection de code SQL. Plus précisément, l’ID de règle 942230 détecte les en-têtes des demandes et bloque celle-ci. La règle 942230 fait partie du groupe de règles SQLI.
Vous décidez de créer une exclusion pour permettre à ces demandes légitimes de passer sans être bloquées par WAF.
Créer une exclusion
Ouvrez votre stratégie WAF Azure Front Door.
Sélectionnez Règles managées>Gérer les exclusions.
Sélectionnez Ajouter.
Configurez la section S’applique à de l’exclusion :
Champ Valeur Ensemble de règles Microsoft_DefaultRuleSet_2.0 Groupe de règles SQLI Règle 942230 Détecte des tentatives d’injection de code SQL conditionnel Configurez les conditions de correspondance d’exclusion :
Champ Valeur Variable de correspondance Nom de l’en-tête de la demande Opérateur Starts With (Commence par) Sélecteur Utilisateur Examinez l’exclusion, qui doit se présenter comme dans la capture d’écran suivante :
Cette exclusion s’applique à tous les en-têtes de demandes qui commencent par le mot
user
. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent parUser
sont également visés par l’exclusion. Si la règle WAF 942230 détecte un risque dans ces valeurs d’en-tête, elle ignore l’en-tête et continue.Sélectionnez Enregistrer.
Définir un sélecteur d’exclusion
Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleExclusionObject pour définir un nouveau sélecteur d’exclusion.
L’exemple suivant identifie les en-têtes de demandes qui commencent par le mot user
. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User
sont également visés par l’exclusion.
$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
-Variable RequestHeaderNames `
-Operator StartsWith `
-Selector 'user'
Définir une exclusion par règle
Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleOverrideObject pour définir une nouvelle exclusion par règle, qui inclut le sélecteur que vous avez créé à l’étape précédente.
L’exemple suivant crée une exclusion pour l’ID de règle 942230.
$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
-RuleId '942230' `
-Exclusion $exclusionSelector
Appliquer l’exclusion au groupe de règles
Utilisez l’applet de commande New-AzFrontDoorWafRuleGroupOverrideObject pour créer un remplacement de groupe de règles, qui applique l’exclusion au groupe de règles approprié.
L’exemple suivant utilise le groupe de règles SQLI, car ce groupe contient l’ID de règle 942230.
$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
-RuleGroupName 'SQLI' `
-ManagedRuleOverride $exclusion
Configurer l’ensemble de règles managé
Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleObject pour configurer l’ensemble de règles managées, y compris le remplacement de groupe de règles que vous avez créé à l’étape précédente.
L’exemple suivant configure l’ensemble de règles DRS 2.0 avec le remplacement de groupe de règles et son exclusion.
$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
-Type 'Microsoft_DefaultRuleSet' `
-Version '2.0' `
-Action Block `
-RuleGroupOverride $ruleGroupOverride
Appliquer la configuration d’ensemble de règles managées au profil WAF
Utilisez la cmdlet Update-AzFrontDoorWafPolicy pour mettre à jour votre stratégie WAF afin d’inclure la configuration que vous avez créée. Vérifiez que vous utilisez le nom de groupe de ressources et le nom de stratégie WAF appropriés pour votre propre environnement.
Update-AzFrontDoorWafPolicy `
-ResourceGroupName 'FrontDoorWafPolicy' `
-Name 'WafPolicy'
-ManagedRule $managedRuleSet
Créer une exclusion
Utilisez la commande az network front-door waf-policy managed-rules exclusion add
pour mettre à jour votre stratégie WAF en y ajoutant une nouvelle exclusion.
L’exclusion identifie les en-têtes de demandes qui commencent par le mot user
. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User
sont également visés par l’exclusion.
Vérifiez que vous utilisez le nom de groupe de ressources et le nom de stratégie WAF appropriés pour votre propre environnement.
az network front-door waf-policy managed-rules exclusion add \
--resource-group FrontDoorWafPolicy \
--policy-name WafPolicy \
--type Microsoft_DefaultRuleSet \
--rule-group-id SQLI \
--rule-id 942230 \
--match-variable RequestHeaderNames \
--operator StartsWith \
--value user
Exemple de fichier Bicep
L'exemple de fichier Bicep suivant montre comment :
- Créer un profil WAF Azure Front Door.
- Activez l’ensemble de règles DRS 2.0.
- Configurez une exclusion pour la règle 942230, qui existe dans le groupe de règles SQLI. Cette exclusion s’applique à tous les en-têtes de demandes qui commencent par le mot
user
. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent parUser
sont également visés par l’exclusion. Si la règle WAF 942230 détecte un risque dans ces valeurs d’en-tête, elle ignore l’en-tête et continue.
param wafPolicyName string = 'WafPolicy'
@description('The mode that the WAF should be deployed using. In "Prevention" mode, the WAF will block requests it detects as malicious. In "Detection" mode, the WAF will not block requests and will simply log the request.')
@allowed([
'Detection'
'Prevention'
])
param wafMode string = 'Prevention'
resource wafPolicy 'Microsoft.Network/frontDoorWebApplicationFirewallPolicies@2022-05-01' = {
name: wafPolicyName
location: 'Global'
sku: {
name: 'Premium_AzureFrontDoor'
}
properties: {
policySettings: {
enabledState: 'Enabled'
mode: wafMode
}
managedRules: {
managedRuleSets: [
{
ruleSetType: 'Microsoft_DefaultRuleSet'
ruleSetVersion: '2.0'
ruleSetAction: 'Block'
ruleGroupOverrides: [
{
ruleGroupName: 'SQLI'
rules: [
{
ruleId: '942230'
enabledState: 'Enabled'
action: 'AnomalyScoring'
exclusions: [
{
matchVariable: 'RequestHeaderNames'
selectorMatchOperator: 'StartsWith'
selector: 'user'
}
]
}
]
}
]
}
]
}
}
}
Étapes suivantes
En savoir plus sur Azure Front Door.