다음을 통해 공유


웹 애플리케이션 방화벽 제외 목록 구성

경우에 따라 Azure Front Door의 Azure Web Application Firewall이 합법적인 요청을 차단할 수 있습니다. WAF(웹 애플리케이션 방화벽) 튜닝의 일환으로 애플리케이션에 대한 요청을 허용하도록 WAF를 구성할 수 있습니다. WAF 제외 목록을 사용하면 WAF 평가에서 특정 요청 특성을 생략할 수 있습니다. 나머지 요청은 정상으로 평가됩니다. 제외 목록에 대한 자세한 내용은 Azure Front Door Service 제외 목록이 있는 Azure Web Application Firewall을 참조하세요.

제외 목록은 Azure PowerShell, Azure CLI, REST API, Bicep, Azure Resource Manager 템플릿 및 Azure Portal을 사용하여 구성할 수 있습니다.

시나리오

API를 만들었다고 가정해 보겠습니다. 클라이언트는 이름에 useriduser-id와 같은 헤더를 포함하는 요청을 API에 보냅니다.

WAF를 튜닝하는 동안 사용자 헤더에 WAF가 SQL 삽입 공격으로 감지한 문자 시퀀스가 포함되어 있기 때문에 일부 합법적인 요청이 차단된 것으로 확인되었습니다. 특히 규칙 ID 942230은 요청 헤더를 검색하고 요청을 차단합니다. 규칙 942230은 SQLI 규칙 그룹의 일부입니다.

이러한 합법적인 요청이 WAF 차단 없이 통과되도록 제외를 만들기로 결정했습니다.

제외 만들기

  1. Azure Front Door WAF 정책을 엽니다.

  2. 관리형 규칙>제외 관리를 선택합니다.

    Screenshot that shows the Azure portal showing the WAF policy's Managed rules page, with the Manage exclusions button highlighted.

  3. 추가를 선택합니다.

    Screenshot that shows the Azure portal with the exclusion list Add button.

  4. 제외의 적용 대상 섹션을 구성합니다.

    필드
    규칙 집합 Microsoft_DefaultRuleSet_2.0
    규칙 그룹 SQLI
    규칙 942230 조건부 SQL 삽입 시도 감지
  5. 제외 일치 조건을 구성합니다.

    필드
    일치 변수 요청 헤더 이름
    연산자 다음으로 시작
    선택기 사용자
  6. 다음 스크린샷과 같이 표시되는 제외를 검토합니다.

    Screenshot that shows the Azure portal showing the exclusion configuration.

    이 제외는 단어 user로 시작하는 모든 요청 헤더에 적용됩니다. 일치 조건은 대/소문자를 구분하지 않으므로 User로 시작하는 헤더에도 제외가 적용됩니다. WAF 규칙 942230이 이러한 헤더 값에서 위험을 감지하면 헤더를 무시하고 계속 진행합니다.

  7. 저장을 선택합니다.

제외 선택기 정의

New-AzFrontDoorWafManagedRuleExclusionObject cmdlet을 사용하여 새 제외 선택기를 정의합니다.

다음 예제에서는 단어 user로 시작하는 요청 헤더를 식별합니다. 일치 조건은 대/소문자를 구분하지 않으므로 User로 시작하는 헤더에도 제외가 적용됩니다.

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

규칙별 제외 정의

New-AzFrontDoorWafManagedRuleOverrideObject cmdlet을 사용하여 이전 단계에서 만든 선택기를 포함하는 새 규칙별 제외를 정의합니다.

다음 예제에서는 규칙 ID 942230에 대한 제외를 만듭니다.

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

규칙 그룹에 제외 적용

New-AzFrontDoorWafRuleGroupOverrideObject cmdlet을 사용하여 적절한 규칙 그룹에 제외를 적용하는 규칙 그룹 재정의를 만듭니다.

다음 예제에서는 그룹에 규칙 ID 942230이 포함되어 있으므로 SQLI 규칙 그룹을 사용합니다.

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

관리형 규칙 집합 구성

New-AzFrontDoorWafManagedRuleObject cmdlet을 사용하여 이전 단계에서 만든 규칙 그룹 재정의를 비롯한 관리형 규칙 집합을 구성합니다.

다음 예제에서는 규칙 그룹 재정의 및 제외를 사용하여 DRS 2.0 규칙 집합을 구성합니다.

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

WAF 프로필에 관리형 규칙 집합 구성 적용

Update-AzFrontDoorWafPolicy cmdlet을 사용하여 앞서 만든 구성을 포함하도록 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 파일은 다음 작업을 수행하는 방법을 보여줍니다.

  • Azure Front Door WAF 정책을 만듭니다.
  • DRS 2.0 규칙 집합을 사용하도록 설정합니다.
  • SQLI 규칙 그룹 내에 있는 규칙 942230에 대한 제외를 구성합니다. 이 제외는 단어 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에 대해 자세히 알아봅니다.