다음을 통해 공유


Azure Web Application Firewall 모니터링 및 로깅

Azure Front Door의 Azure Web Application Firewall은 WAF(웹 애플리케이션 방화벽)가 수행되는 방식과 수행하는 작업을 이해하는 데 도움이 되는 광범위한 로깅 및 원격 분석을 제공합니다.

Azure Front Door WAF 로그는 Azure Monitor와 통합됩니다. Azure Monitor를 통해 WAF 경고 및 로그를 포함하여 진단 정보를 추적할 수 있습니다. 진단 탭 아래의 Azure Portal에 있는 Azure Front Door 리소스 내에서 코드 접근 방식의 인프라를 통해 또는 직접 Azure Monitor를 사용하여 WAF 모니터링을 구성할 수 있습니다.

메트릭

Azure Front Door는 WAF의 동작을 이해하는 데 도움이 되는 메트릭을 자동으로 기록합니다.

WAF의 메트릭에 액세스하려면 다음을 수행합니다.

  1. Azure Portal에 로그인하고 Azure Front Door 프로필로 이동합니다.
  2. 모니터링 아래의 맨 왼쪽 창에서 메트릭 탭을 선택합니다.
  3. Web Application Firewall 요청 수 메트릭을 추가하여 WAF 규칙과 일치하는 요청 수를 추적합니다.

작업 유형 및 규칙 이름을 기반으로 사용자 지정 필터를 만들 수 있습니다. 메트릭에는 Log를 제외한 모든 작업이 포함된 요청이 포함됩니다.

Azure Front Door WAF에 대한 메트릭을 보여 주는 스크린샷.

JavaScript 챌린지(미리 보기) 메트릭

JavaScript 챌린지 WAF 메트릭에 액세스하려면 다음을 수행합니다.

  • 웹 애플리케이션 방화벽 JS Challenge Request Count 메트릭을 추가하여 JavaScript 챌린지 WAF 규칙과 일치하는 요청 수를 추적합니다.

다음 필터는 이 메트릭의 일부로 제공됩니다.

  • PolicyName: WAF 정책 이름입니다.
  • 규칙: 사용자 지정 규칙 또는 봇 규칙일 수 있습니다.
  • 작업: JS 챌린지 작업에 사용할 수 있는 4가지 값이 있습니다.
    • 발급됨: JS 챌린지가 처음 호출됨
    • 통과: JS 챌린지 계산에 성공하고 답변을 받았습니다.
    • 유효: JS 챌린지 유효성 쿠키가 있음
    • 차단됨: JS 챌린지 계산 실패

JavaScript 챌린지 메트릭을 보여 주는 스크린샷

로그 및 진단

Azure Front Door WAF는 각 요청과 탐지된 각 위협에 대한 상세 보고를 제공합니다. 로깅은 Azure Monitor 로그를 사용하여 Azure의 진단 로그 및 경고와 통합됩니다.

로그는 기본적으로 사용되지 않습니다. 로그를 명시적으로 사용하도록 설정해야 합니다. 진단 설정 탭을 사용하여 Azure Portal에서 로그를 구성할 수 있습니다.

WAF 로그를 사용하도록 설정하는 방법을 보여 주는 스크린샷.

로깅을 사용하도록 설정하고 WAF 규칙이 트리거되면 일치하는 패턴이 일반 텍스트로 기록되어 WAF 정책 동작을 분석하고 디버그하는 데 도움이 됩니다. 제외를 사용하여 규칙을 미세 조정하고 로그에서 제외하려는 데이터를 제외할 수 있습니다. 자세한 내용은 Azure Front Door의 웹 애플리케이션 방화벽 제외 목록을 참조하세요.

세 가지 형식의 Azure Front Door 로그를 사용하도록 설정할 수 있습니다.

  • WAF 로그
  • 액세스 로그
  • 상태 프로브 로그

활동 로그는 기본적으로 사용하도록 설정되며 Azure Front Door 프로필의 구성 변경과 같이 Azure 리소스에서 수행되는 작업에 대한 표시 여부를 제공합니다.

WAF 로그

로그 FrontDoorWebApplicationFirewallLog에는 WAF 규칙과 일치하는 요청이 포함됩니다.

로그 FrontdoorWebApplicationFirewallLog에는 WAF 규칙과 일치하는 모든 요청이 포함됩니다.

다음 표에서는 각 요청에 대해 기록된 값을 보여 줍니다.

속성 설명
작업 요청에서 수행되는 동작이며, 로그에는 모든 작업이 포함된 요청이 포함됩니다. 작업은 다음과 같습니다.
  • Allowallow: 요청을 계속 처리할 수 있었습니다.
  • Blockblock: 요청이 요청을 차단하도록 구성된 WAF 규칙과 일치합니다. 또는 변칙 채점 임계값에 도달하고 요청이 차단되었습니다.
  • Loglog: 요청이 Log 작업을 사용하도록 구성된 WAF 규칙과 일치합니다.
  • AnomalyScoringlogandscore: 요청이 WAF 규칙과 일치합니다. 규칙은 변칙 점수에 기여합니다. 요청은 동일한 요청에서 실행되는 다른 규칙에 따라 차단되거나 차단되지 않을 수 있습니다.
  • JS ChallengeJSChallengeIssued: 누락/잘못된 챌린지 클리어런스로 인해 발급되었으며, 답변이 누락되었습니다.

    로그는 클라이언트가 처음으로 웹 애플리케이션에 대한 액세스를 요청하고 이전에 이의를 제기하지 않은 경우에 생성됩니다. 이 클라이언트는 JS 챌린지 페이지를 받고 JS 챌린지를 계산합니다. 계산에 성공하면 클라이언트에 유효성 쿠키가 부여됩니다.
  • JS ChallengeJSChallengePass: 유효한 챌린지 답변으로 인해 전달됩니다.

    이 로그는 클라이언트가 JS 챌린지를 해결하고 올바른 답변으로 요청을 다시 제출할 때 생성됩니다. 이 경우 Azure WAF는 쿠키의 유효성을 검사하고 다른 JS 챌린지를 생성하지 않고 나머지 규칙을 처리합니다.
  • JS ChallengeJSChallengeValid: 유효한 챌린지로 인해 기록/통과.

    이 로그는 클라이언트가 이전에 문제를 해결했을 때 생성됩니다. 이 경우 Azure WAF는 요청을 기록하고 나머지 규칙을 처리합니다.
  • JS ChallengeJSChallengeBlock: 차단됨

    이 로그는 JS 챌린지 계산에 실패할 때 생성됩니다.
ClientIP 요청한 클라이언트의 IP 주소입니다. 요청에 X-Forwarded-For 헤더가 있는 경우 클라이언트 IP 주소는 대신 해당 헤더 필드에서 가져옵니다.
ClientPort 요청한 클라이언트의 IP 포트입니다.
세부 정보 검색된 위협을 포함하여 요청에 대한 추가 세부 정보입니다.
matchVariableName: 일치하는 요청의 HTTP 매개 변수 이름(예: 헤더 이름(최대 100자))입니다.
matchVariableValue: 일치 항목을 트리거한 값(최대 100자)입니다.
Host 요청의 Host 헤더입니다.
정책 요청을 처리하는 WAF 정책의 이름입니다.
PolicyMode WAF 정책의 작업 모드입니다. 가능한 값은 PreventionDetection입니다.
RequestUri 요청의 전체 URI입니다.
RuleName 요청에 일치하는 WAF 규칙의 이름입니다.
SocketIP WAF에 표시되는 원본 IP 주소입니다. 이 IP 주소는 TCP 세션을 기반으로 하며 요청 헤더를 고려하지 않습니다.
TrackingReference Azure Front Door에서 제공하는 요청을 식별하는 고유한 참조 문자열입니다. 이 값은 X-Azure-Ref 응답 헤더에서 클라이언트로 전송됩니다. 로그에서 특정 요청을 검색할 때 이 필드를 사용합니다.

다음 예제 쿼리에서는 Azure Front Door WAF가 차단한 요청을 보여 줍니다.

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorWebApplicationFirewallLog" 
| where action_s == "Block" 
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorWebApplicationFirewallLog"
| where action_s == "Block"

다음 코드 조각은 요청이 차단된 이유를 포함하여 예제 로그 항목을 보여줍니다.

{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Cdn/Profiles/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}
{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Network/FrontDoorWebApplicationFirewallLog/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}

다른 Azure Front Door 로그에 대한 자세한 내용은 Azure Front Door에서 메트릭 및 로그 모니터링을 참조하세요.

다음 단계

Azure Front Door에 대해 자세히 알아봅니다.