分享方式:


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 除外) 的要求。

顯示 Azure Front Door WAF 計量的螢幕快照。

JavaScript 挑戰 (預覽) 計量

若要存取 JavaScript 挑戰 WAF 計量:

  • 新增 Web 應用程式防火牆 JS Challenge Request Count 計量,以追蹤符合 JavaScript 挑戰 WAF 規則的要求數目。

下列篩選條件會作為此計量的一部分提供:

  • PolicyName:這是 WAF 原則名稱
  • 規則:這可以是任何自定義規則或 Bot 規則
  • 動作:JS 挑戰動作有四個可能的值
    • 發行:第一次叫用 JS 挑戰
    • 已傳遞:JS 挑戰計算成功,並收到答案
    • 有效:JS 挑戰有效性 Cookie 已存在
    • 已封鎖:JS 挑戰計算失敗

顯示 JavaScript 挑戰計量的螢幕快照。

記錄與診斷

Azure Front Door WAF 會提供每個要求的詳細報告,以及其偵測到的每個威脅。 記錄會與 Azure 的診斷記錄和警示整合,方法是使用 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 要求的 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