Настройка списков исключений брандмауэра веб-приложения

Иногда Брандмауэр веб-приложений Azure в Azure Front Door может блокировать законный запрос. В рамках настройки брандмауэра веб-приложения (WAF) вы можете настроить WAF, чтобы разрешить запрос для вашего приложения. Списки исключений WAF позволяют пропускать определенные атрибуты запроса в оценке WAF. Остальная часть запроса оценивается как нормальная. Дополнительные сведения о списках исключений см. в статье Azure Брандмауэр веб-приложений со списками исключений Azure Front Door.

Список исключений можно настроить с помощью Azure PowerShell, Azure CLI, REST API, Bicep, шаблонов Azure Resource Manager и портал Azure.

Сценарий

Предположим, что вы создали API. Клиенты отправляют запросы к API, которые содержат заголовки с такими именами, как userid и user-id.

При настройке WAF вы заметили, что некоторые допустимые запросы были заблокированы, так как заголовки пользователей включали последовательности символов, обнаруженные WAF как атаки путем внедрения кода SQL. В частности, правило с идентификатором 942230 обнаруживает заголовки запросов и блокирует запросы. Правило 942230 входит в группу правил SQLI.

Вы решили создать исключение, чтобы разрешить этим законным запросам проходить без блокировки WAF.

Создание исключения

  1. Откройте политику WAF Azure Front Door.

  2. Выберите Управляемые правила>Управление исключениями.

    Снимок экрана: портал Azure со страницей управляемых правил политики WAF с выделенной кнопкой Управление исключениями.

  3. Выберите Добавить.

    Снимок экрана: портал Azure с кнопкой

  4. Настройте раздел исключения Применяется к :

    Поле Значение
    Набор правил Microsoft_DefaultRuleSet_2.0
    Группа правил SQLI
    Правило 942230 — обнаружение условных попыток внедрения кода SQL
  5. Настройка условий соответствия исключений:

    Поле Значение
    Переменная сопоставления Имя заголовка запроса.
    Оператор Начинается с
    Выбор Пользователь
  6. Просмотрите исключение, которое должно выглядеть так, как показано на следующем снимку экрана:

    Снимок экрана: портал Azure с конфигурацией исключения.

    Это исключение применяется ко всем заголовкам запроса, начинающимся со слова user. Условие соответствия не учитывает регистр, поэтому заголовки, начинающиеся с User , также охватываются исключением. Если правило WAF 942230 обнаруживает риск в этих значениях заголовка, оно игнорирует заголовок и переходит дальше.

  7. Щелкните Сохранить.

Определение селектора исключений

Используйте командлет New-AzFrontDoorWafManagedRuleExclusionObject , чтобы определить новый селектор исключений.

В следующем примере идентифицируются заголовки запросов, начинающиеся со слова user. Условие соответствия не учитывает регистр, поэтому заголовки, начинающиеся с User , также охватываются исключением.

$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
  -Variable RequestHeaderNames `
  -Operator StartsWith `
  -Selector 'user'

Определение исключения для каждого правила

Используйте командлет New-AzFrontDoorWafManagedRuleOverrideObject , чтобы определить новое исключение для каждого правила, включающее селектор, созданный на предыдущем шаге.

В следующем примере создается исключение для правила с идентификатором 942230.

$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
  -RuleId '942230' `
  -Exclusion $exclusionSelector

Применение исключения к группе правил

Используйте командлет New-AzFrontDoorWafRuleGroupOverrideObject , чтобы создать переопределение группы правил, которое применяет исключение к соответствующей группе правил.

В следующем примере используется группа правил SQLI, так как эта группа содержит идентификатор правила 942230.

$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
  -RuleGroupName 'SQLI' `
  -ManagedRuleOverride $exclusion

Настройка управляемого набора правил

Используйте командлет New-AzFrontDoorWafManagedRuleObject , чтобы настроить управляемый набор правил, включая переопределение группы правил, созданное на предыдущем шаге.

В следующем примере настраивается набор правил DRS 2.0 с переопределением группы правил и ее исключением.

$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
  -Type 'Microsoft_DefaultRuleSet' `
  -Version '2.0' `
  -Action Block `
  -RuleGroupOverride $ruleGroupOverride

Применение конфигурации управляемого набора правил к профилю WAF

Используйте командлет Update-AzFrontDoorWafPolicy , чтобы обновить политику WAF, чтобы включить созданную конфигурацию. Убедитесь, что вы используете правильное имя группы ресурсов и имя политики WAF для собственной среды.

Update-AzFrontDoorWafPolicy `
  -ResourceGroupName 'FrontDoorWafPolicy' `
  -Name 'WafPolicy'
  -ManagedRule $managedRuleSet

Создание исключения

Используйте команду , az network front-door waf-policy managed-rules exclusion add чтобы обновить политику WAF, чтобы добавить новое исключение.

Исключение определяет заголовки запросов, начинающиеся со слова user. Условие соответствия не учитывает регистр, поэтому заголовки, начинающиеся с User , также охватываются исключением.

Убедитесь, что вы используете правильное имя группы ресурсов и имя политики WAF для собственной среды.

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

Пример файла Bicep

В следующем примере файла Bicep показано, как:

  • Создайте политику WAF Azure Front Door.
  • Включите набор правил DRS 2.0.
  • Настройте исключение для правила 942230, которое существует в группе правил SQLI. Это исключение применяется ко всем заголовкам запроса, начинающимся со слова user. Условие соответствия не учитывает регистр, поэтому заголовки, начинающиеся с User , также охватываются исключением. Если правило WAF 942230 обнаруживает риск в этих значениях заголовка, оно игнорирует заголовок и переходит дальше.
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'
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

Дальнейшие действия

Узнайте больше о Azure Front Door.