關於 WAF 自訂規則

使用 WAF 自訂規則功能,透過過濾對網域的要求來控制進入的流量。 您可以根據您定義的規則,對傳入的要求執行封鎖管理挑戰等動作。

與規則集引擎評估的其他規則一樣,WAF 自訂規則需要下列基本參數:

  • 使用規則語言指定流量匹配條件的表達式。
  • 指定當規則出現匹配時要執行的動作。

自訂規則會按照在自訂規則表中從第一個位置到最後一個位置的設定順序進行評估。 您可以導覽安全性 > 防火牆規則來檢視該表。 有些動作(例如 Block) 會停止評估其他規則。 如需關於動作及其行為的詳細資訊,請參閱 Ruleset Engine 規則動作

常見使用案例

以下各節將詳細介紹 WAF 自訂規則的常見用例。

僅允許指定國家的流量

使用 Block 動作,此範例透過 ip.src.country 欄位,根據國家代碼封鎖請求,只允許來自美國和墨西哥這兩個國家的請求:

(not ip.src.country in {"US" "MX"})

依 IP 聲譽封鎖請求

IP 聲譽是從 0(零風險)到 100(高風險)的分數,將訪客的 IP 聲譽分類。

IP 聲譽是根據「Project Honeypot」、外部公共 IP 資訊,以及來自管理規則和 DDoS 的內部威脅情報所計算得出的。

此範例使用封鎖動作,封鎖來自得分大於 0 的 IP 位址的基於國家代碼 (ISO 3166-1 Alpha 2 格式) 的請求:

(ip.src.country in {"CN" "TW" "US" "GB"} and cf.threat_score gt 0)

僅允許指定 IP 位址的流量

封鎖動作會限制對您網域的存取,僅允許指定 IP 位址的請求,拒絕所有其他 IP 位址的請求。

例如,要僅允許來自 IP 192.0.2.10203.0.113.25 的流量,請執行下列表達式:

(not ip.src in {"192.0.2.10" "203.0.113.25"})

根據您要限制的通訊協定,使用下列其中一種表達方式:

  • 如果要指定子網路而非單一 IP 位址,IBM Cloud CIS 僅支援:

    IPv4: /16/24

    IPv6: /32,,和 /48 /64

  • 請務必同時包含 IPv4 和 IPv6,以達到全面覆蓋。

  • 只封鎖 IPv4 ( 0.0.0.0/0 ) 仍然允許 IPv6 的流量。 阻止兩者:

    (ip.src in {0.0.0.0/0} or ip.src in {::/0})
    

設定跳過其他 CIS 功能的規則

根據要跳過的安全功能或產品,跳過動作支援不同的跳過選項。

本節包含 WAF 自訂規則的不同跳過規則情境範例。 考慮以下因素:

  • {zone_id} 值是您要新增規則的區域 ID。

  • {ruleset_id} 值是 http_request_firewall_custom 階段的入口點規則集 ID。 如需取得此規則集 ID 的詳細資訊,請參閱 清單和檢視規則集。 下列 API 範例透過使用 建立區域規則 集規則作業,將跳過規則新增至現有的規則集。

    但是,入口點規則集可能還不存在。 在這種情況下,請使用 更新入口點規則集作業,以跳過規則建立入口點規則集。

  • 雖然每個範例只包含一個動作參數,但您可以同時指定規則集、階段和產品動作參數,在同一個規則中使用多個跳過選項。

跳過當前規則集中的其餘規則

本範例使用 建立區域規則集規則 作業,將跳過規則新增至現有的 http_request_firewall_custom 階段入口點規則集,其 ID 為 RULESET_ID。 如果您不知道您的入口點規則集 ID,請參閱 Getting the custom rule entry point for the API。 對於符合規則表達式的請求,規則會跳過目前規則集中的所有其餘規則:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "ruleset": "current"
  },
  "expression": "http.request.uri.path contains \"/skip-current-ruleset/\"",
  "description": ""
}'

跳過一個階段

本範例使用「建立區域規則集」將一條規則新增至現有的 http_request_firewall_custom 階段入口點規則集,ID 為 RULESET_ID。 對於符合規則表達式的請求,規則會跳過 http_ratelimit 階段:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-phase/\"",
  "description": ""
}'

跳過一個階段,不記錄匹配的請求

本範例使用 建立區域規則集規則 作業,新增一項規則,跳過 http_ratelimit 階段,並關閉目前規則的事件記錄:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "logging": {
    "enabled": false
  },
  "expression": "http.request.uri.path contains \"/disable-logging/\"",
  "description": ""
}'

跳過安全產品

本範例使用「建立區域規則集」規則作業新增一項規則,對於符合規則表達式的要求,跳過「區域鎖定」和「使用者代理程式封鎖」產品:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "products": [
      "zoneLockdown",
      "uaBlock"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-products/\"",
  "description": ""
}'