你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

Azure Front Door 中的 Azure Web 应用程序防火墙提供了广泛的日志记录和遥测,可帮助你了解 Web 应用程序防火墙 (WAF) 的执行情况及其采取的操作。

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

指标

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

若要访问 WAF 的指标,请执行以下操作:

  1. 登录到 Azure 门户,再转到你的 Azure Front Door 配置文件。
  2. 在最左侧窗格的“监视”下,选择“指标”选项卡。
  3. 添加“Web 应用程序防火墙请求计数”指标,跟踪与 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 规则,则任何匹配模式都会以纯文本形式记录,以帮助你分析和调试 WAF 策略行为。 可以使用排除项来微调规则,并排除要从日志中排除的任何数据。 有关详细信息,请参阅 Azure Front Door 中的 Web 应用程序防火墙排除列表

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

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

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

WAF 日志

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

FrontdoorWebApplicationFirewallLog 日志包含与 WAF 规则匹配的任何请求。

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

属性 说明
操作 针对请求执行的操作。 日志包含所有操作的请求。 操作包括:
  • 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 标头。
策略 处理了此请求的 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