Azure Web 應用程式防火牆監視與記錄

Azure Front Door 中的 Azure Web 應用程式防火牆提供廣泛的記錄和遙測,可協助您了解 Web 應用程式防火牆 (WAF) 的執行方式及其採取的動作。

Azure Front Door WAF 記錄會與 Azure 監視器整合。 Azure 監視器可讓您追蹤診斷資訊,包括 WAF 警示與記錄。 您可以在 Azure 入口網站的 [診斷] 索引標籤底下,透過基礎結構即程式碼方法,或直接使用 Azure 監視器,在 Azure Front Door 資源中設定 WAF 監視。

計量

Azure Front Door 會自動記錄計量,以協助您了解 WAF 的行為。

若要存取 WAF 的計量:

  1. 登入 Azure 入口網站,然後移至您的 Azure Front Door 設定檔。
  2. 在 [監視] 底下的最左邊窗格上,選取 [計量] 索引標籤。
  3. 新增 Web 應用程式防火牆要求計數計量,以追蹤符合 WAF 規則的要求數目。

您可以根據動作類型和規則名稱建立自訂篩選。 計量包含所有動作 (Log 除外) 的要求。

Screenshot that shows the metrics for an Azure Front Door WAF.

記錄與診斷

Azure Front Door WAF 會提供每個要求的詳細報告,以及其偵測到的每個威脅。 記錄會與 Azure 的診斷記錄和警示整合,方法是使用 Azure 監視器記錄

預設不會啟用記錄。 您必須明確啟用記錄。 您可以使用 [診斷設定] 索引標籤,在 Azure 入口 網站中設定記錄。

Screenshot that shows how to enable the WAF logs.

如果已啟用記錄並觸發 WAF 規則,則會以純文字記錄任何相符模式,協助您分析和偵錯 WAF 原則行為。 您可使用排除來微調規則,並排除您想要從記錄中排除的任何資料。 如需詳細資訊,請參閱 Azure Front Door 中的 Web 應用程式防火牆排除清單

Azure Front Door 會提供兩種類型的記錄:存取記錄和 WAF 記錄。

存取記錄

記錄 FrontDoorAccessLog 檔包含通過 Azure Front Door 的所有要求。 如需 Azure Front Door 存取記錄的詳細資訊 (包括記錄架構描述),請參閱監視 Azure Front Door 中的計量和記錄

記錄 FrontdoorAccessLog 檔包含通過 Azure Front Door 的所有要求。 如需 Azure Front Door 存取記錄的詳細資訊 (包括記錄架構描述),請參閱監視 Azure Front Door 中的計量和記錄 (傳統)

下列範例查詢會傳回存取記錄項目:

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorAccessLog"

下列程式碼片段顯示範例記錄項目:

{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontDoorAccessLog",
  "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}
{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontdoorAccessLog",
  "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}

WAF 記錄

記錄 FrontDoorWebApplicationFirewallLog 包含符合 WAF 規則的要求。

記錄 FrontdoorWebApplicationFirewallLog 包含任何符合 WAF 規則的要求。

下表會顯示針對每個要求所記錄的值。

屬性 說明
動作 對要求採取的動作。 記錄包含具有所有動作的要求。 動作包括:
  • Allowallow:允許要求繼續處理。
  • Blockblock:要求符合設定為封鎖要求的 WAF 規則。 或者,已達到異常評分閾值,並封鎖要求。
  • Loglog:要求符合設定為使用 Log 動作的 WAF 規則。
  • AnomalyScoringlogandscore:要求符合 WAF 規則。 此規則會影響異常分數。 根據在相同要求上執行的其他規則,要求不一定會遭到封鎖。
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