我建立了自訂 AWS WAF 規則,但沒有按預期運作。我該怎麼做才能對該問題進行疑難排解?
解決方案
如果您的自訂 AWS WAF 規則沒有按預期運作,請檢查以下各項:
規則的優先順序
檢查您是否已將自訂規則設定為正確的優先順序。如需詳細資訊,請參閱在 Web ACL 中處理規則和規則群組的順序。
您可以在規則群組或定義規則的 Web ACL 中,依名稱存取規則。
AWS WAF 規則評估順序按從上到下排序,然後在第一個符合終止 Allow (允許)、Block (封鎖) 或 CAPTCHA 的規則處停止。如果您的請求與自訂規則上方放置的其中一個終止規則相符,AWS WAF 將採取該規則中指定的動作。系統不會根據您的自訂規則來評估請求。如需詳細資訊,請參閱 Web ACL 中規則和規則群組動作的基本處理。
例如,假設您正在建立自訂允許規則,以允許 AWS 受管規則群組 (AMR) 封鎖的請求。您必須將自訂規則置於封鎖請求的 AMR 之上 (優先順序較低)。
您可以透過 AWS WAF 主控台 Rule Builder 管理優先順序,這適用於 Web ACL 和規則群組。若要使用 AWS API 變更優先順序,請使用 UpdateWebACL 和 UpdateRuleGroup API 呼叫。若要使用 AWS CLI 變更優先順序,請使用 update-web-acl 和 update-rule-group 命令。
文字轉換
如果您在自訂規則中使用文字轉換,請檢查您是否已經以正確的方式套用。如需詳細資訊,請參閱 AWS WAF 文字轉換。
AWS WAF 會在檢查請求之前套用轉換。如果您指定多個轉換,AWS WAF 會按列出的順序處理這些轉換。如果您在自訂規則中使用多個轉換,則必須驗證轉換和轉換的順序。
例如,如果您建立了自訂規則,針對查詢引數中的字串執行 Base64 解碼和 URL 解碼。AWS WAF 會先執行傳入請求中查詢字串的 Base64 解碼。Base64 解碼結果字串使用 URL 解碼來進一步轉換。然後,將會根據您在規則組態中提供的字串,檢查 URL 解碼結果字串。
布林逻辑
如果您使用邏輯規則陳述式,請確認用於自訂規則的 AND、OR 或 NOT 邏輯是否正確。如需詳細資訊,請參閱規則陳述式清單,並遵循邏輯規則陳述式 中的指示。
若要使用布林邏輯對此進行驗證,請考慮此範例:
如果您建立自訂規則,並且與具有以下條件的請求相符:請求具有 URI "/test" 且來源 IP 位於 IP 集 X 中,則為 Block (封鎖)。
請求 1
如果請求具有 URI "/test" (布林 1) 且 IP 不在 IP 集 X (布林 0) 中,則布林 1 和 布林 0 會產生布林 0。
此請求不符合您的自訂規則。
請求 2
如果請求沒有 URI "/test" (布林 0) 且 IP 不在 IP 集 X (布林 0) 中,則布林 0 和 布林 0 會產生布林 0。
此請求不符合您的自訂規則。
請求 3
如果請求具有 URI "/test" (布林 1) 且 IP 在 IP 集 X (布林 1) 中,則布林 1 和 布林 1 會產生布林 1。
此請求將符合您的自訂規則。