Azure Web 应用程序防火墙监视和日志记录

Azure Front Door 上的 Azure Web 应用程序防火墙提供了广泛的日志记录和遥测数据,可帮助你了解 Web 应用程序防火墙(WAF)的执行方式以及它执行的作。

Azure Front Door WAF 日志与 Azure Monitor 集成。 使用 Azure Monitor 可以跟踪诊断信息,包括 WAF 警报和日志。 可以在 Azure 门户的“ 诊断 ”选项卡下的 Azure Front Door 资源中配置 WAF 监视,通过基础结构即代码方法,或者直接使用 Azure Monitor。

Metrics

Azure Front Door 会自动记录指标,以帮助了解 WAF 的行为。

访问 WAF 指标:

  1. 登录到 Azure 门户 并转到 Azure Front Door 配置文件。
  2. 在“ 监视”下的最左侧窗格中,选择“ 指标 ”选项卡。
  3. 添加 Web 应用程序防火墙请求计数 指标以跟踪与 WAF 规则匹配的请求数。

可以根据作类型和规则名称创建自定义筛选器。 指标包括终止作的请求 BlockAllow 以及 WAF 未执行任何作的请求。 由于单个请求可以触发多个非终止 Log 作,因此会从此指标中排除这些作,以避免重复请求计数。

显示 Azure Front Door WAF 指标的屏幕截图。

JavaScript 质询(预览版)指标

访问 JavaScript 质询 WAF 指标:

  • 添加 Web 应用程序防火墙 JS Challenge Request Count 指标以跟踪与 JavaScript 质询 WAF 规则匹配的请求数。

以下筛选器作为此指标的一部分提供:

  • PolicyName:这是 WAF 策略名称
  • 规则:可以是任何自定义规则或机器人规则
  • :JS 质询作有四个可能的值
    • 已发出:首次调用 JS 质询
    • 传递:JS 质询计算成功并收到答案
    • 有效:JS 质询有效性 Cookie 存在
    • 已阻止:JS 质询计算失败

显示 JavaScript 质询指标的屏幕截图。

日志和诊断

Azure Front Door WAF 提供有关每个请求及其检测到的每个威胁的详细报告。 日志记录通过 Azure Monitor 日志与 Azure 的诊断日志和警报集成。

默认情况下不会启用日志。 必须显式启用日志。 可以使用 “诊断设置 ”选项卡在 Azure 门户中配置日志。

如果启用日志记录并触发 WAF 规则,则会以纯文本方式记录任何匹配模式,以帮助分析和调试 WAF 策略行为。 可以使用排除项微调规则,并排除要从日志中排除的任何数据。 有关详细信息,请参阅 Azure Front Door 中的 Web 应用程序防火墙排除列表

可以启用三种类型的 Azure Front Door 日志:

  • WAF 日志
  • 访问日志
  • 运行状况探测日志

默认情况下启用活动日志,并提供对 Azure 资源执行的作的可见性,例如对 Azure Front Door 配置文件的配置更改。

WAF 日志

该日志 FrontDoorWebApplicationFirewallLog 包括与 WAF 规则匹配的请求。

下表显示了为每个请求记录的值。

资产 Description
Action 针对请求执行的操作。 日志包括包含所有作的请求。 作包括:
  • Allowallow:允许请求继续处理。
  • Blockblock:请求匹配配置为阻止请求的 WAF 规则。 或者,达到 异常评分 阈值并阻止了请求。
  • Loglog:请求匹配配置为使用该作的 Log WAF 规则。
  • AnomalyScoringlogandscore:请求匹配 WAF 规则。 该规则有助于 异常分数。 请求可能会阻止或可能不会阻止,具体取决于在同一请求上运行的其他规则。
  • JS ChallengeJSChallengeIssued:由于缺少/无效的质询清除、缺少答案而发出。

    当客户端首次请求访问 Web 应用程序且以前未受到质询时,将创建日志。 此客户端接收 JS 质询页,并继续计算 JS 质询。 成功计算后,客户端将被授予有效性 Cookie。
  • JS ChallengeJSChallengePass:由于有效的质询答案而通过。

    当客户端解决 JS 质询并重新提交具有正确答案的请求时,将创建此日志。 在这种情况下,Azure WAF 会验证 Cookie 并继续处理剩余的规则,而无需生成另一个 JS 质询。
  • JS ChallengeJSChallengeValid:由于有效质询而记录/传递。

    当客户端以前解决了质询时,将创建此日志。 在这种情况下,Azure WAF 会记录请求,并继续处理剩余的规则。
  • JS ChallengeJSChallengeBlock:已阻止

    当 JS 质询计算失败时,将创建此日志。
ClientIP 发出请求的客户端的 IP 地址。 如果请求中有标头 X-Forwarded-For ,则客户端 IP 地址取自该标头字段。
ClientPort 发出请求的客户端的 IP 端口。
详细信息 有关请求的更多详细信息,包括检测到的任何威胁。
matchVariableName:请求的 HTTP 参数名称匹配,例如标头名称(最多 100 个字符)。
matchVariableValue:触发匹配的值(最多 100 个字符)。
Host Host请求的标头。
Policy 处理请求的 WAF 策略的名称。
PolicyMode WAF 策略的作模式。 可能的值为 PreventionDetection
RequestUri 请求的完整 URI。
规则名称 请求匹配的 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" 

以下代码片段显示了一个示例日志条目,包括请求被阻止的原因:

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

有关其他 Azure Front Door 日志的详细信息,请参阅 Azure Front Door 中的监视指标和日志

后续步骤

详细了解 Azure Front Door