分享方式:


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 原則名稱
  • 規則:這可以是任何自訂規則或機器人規則
  • 動作: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