INTEGRITY Dokumentace

Konfigurace vlastních pravidel WAF pomocí Terraformu

Tato stránka obsahuje příklady vytváření WAF custom rules v zóně nebo účtu pomocí Terraformu. Příklady pokrývají tyto scénáře:

Dokumentace WAF obsahuje další příklady pro Terraform, viz Další zdroje.

Pokud používáte Cloudflare API, podívejte se na následující zdroje v dokumentaci WAF:

Další informace o nasazení a konfiguraci vlastních sad pravidel pomocí Rulesets API najdete v Práce s vlastními sadami pravidel v dokumentaci k Ruleset Engine.

Než začnete

Získejte potřebná ID účtu nebo zóny

Konfigurace Terraformu uvedené na této stránce vyžadují ID zóny (nebo ID účtu) zóny či účtu, do kterého budete rulesety nasazovat.

Import nebo odstranění existujících sad pravidel

Terraform předpokládá, že má nad rulesety účtu a zóny úplnou kontrolu. Pokud již máte v účtu nebo zóně rulesety nakonfigurované, postupujte jedním z následujících způsobů:


Přidání vlastního pravidla do zóny

Následující příklad konfiguruje vlastní pravidlo ve vstupním rulesetu zóny pro http_request_firewall_custom fázi pro zónu s ID <ZONE_ID>. Pravidlo zablokuje veškerý provoz na nestandardních portech HTTP(S):

Požadovaná oprávnění API tokenu

Alespoň jeden z následujících oprávnění tokenu je povinné:

  • Zone WAF Write

Nakonfigurujte cloudflare_ruleset ↗ prostředek:

resource "cloudflare_ruleset" "zone_custom_firewall" {
  zone_id     = var.cloudflare_zone_id
  name        = "Phase entry point ruleset for custom rules in my zone"
  description = ""
  kind        = "zone"
  phase       = "http_request_firewall_custom"

  rules = [{
    ref         = "block_non_default_ports"
    description = "Block ports other than 80 and 443"
    expression  = "(not cf.edge.server_port in {80 443})"
    action      = "block"
  }]
}
resource "cloudflare_ruleset" "zone_custom_firewall" {
  zone_id     = "<ZONE_ID>"
  name        = "Phase entry point ruleset for custom rules in my zone"
  description = ""
  kind        = "zone"
  phase       = "http_request_firewall_custom"

  rules {
    ref         = "block_non_default_ports"
    description = "Block ports other than 80 and 443"
    expression  = "(not cf.edge.server_port in {80 443})"
    action      = "block"
  }
}

Chcete-li vytvořit další vlastní pravidlo, přidejte nové rules objekt do stejného cloudflare_ruleset prostředek.


Vytvoření a nasazení vlastní sady pravidel

Následující příklad vytváří vlastní sada pravidel v účtu s ID <ACCOUNT_ID> obsahující jedno vlastní pravidlo. Tato vlastní sada pravidel se poté nasadí pomocí samostatného cloudflare_ruleset prostředek Terraform. Pokud vlastní sadu pravidel nenasadíte, nespustí se.

Následující konfigurace vytvoří vlastní ruleset s jedním pravidlem:

Požadovaná oprávnění API tokenu

Všechny následující oprávnění tokenu jsou povinné:

  • Account WAF Write
  • Account Rulesets Write

Nakonfigurujte cloudflare_ruleset ↗ prostředek:

resource "cloudflare_ruleset" "account_firewall_custom_ruleset" {
  account_id  = var.cloudflare_account_id
  name        = "Custom ruleset blocking traffic in non-standard HTTP(S) ports"
  description = ""
  kind        = "custom"
  phase       = "http_request_firewall_custom"

  rules = [{
    ref         = "block_non_default_ports"
    description = "Block ports other than 80 and 443"
    expression  = "(not cf.edge.server_port in {80 443})"
    action      = "block"
  }]
}
resource "cloudflare_ruleset" "account_firewall_custom_ruleset" {
  account_id  = "<ACCOUNT_ID>"
  name        = "Custom ruleset blocking traffic in non-standard HTTP(S) ports"
  description = ""
  kind        = "custom"
  phase       = "http_request_firewall_custom"

  rules {
    ref         = "block_non_default_ports"
    description = "Block ports other than 80 and 443"
    expression  = "(not cf.edge.server_port in {80 443})"
    action      = "block"
  }
}

Chcete-li ve vlastním rulesetu vytvořit další vlastní pravidlo, přidejte nové rules objekt do stejného cloudflare_ruleset prostředek.


Následující konfigurace nasadí vlastní ruleset na úrovni účtu. Definuje závislost na account_firewall_custom_ruleset prostředek a použije ID vytvořené vlastní sady pravidel v action_parameters:

Požadovaná oprávnění API tokenu

Všechny následující oprávnění tokenu jsou povinné:

  • Account WAF Write
  • Account Rulesets Write

Nakonfigurujte cloudflare_ruleset ↗ prostředek:

resource "cloudflare_ruleset" "account_firewall_custom_entrypoint" {
  account_id  = var.cloudflare_account_id
  name        = "Account-level entry point ruleset for the http_request_firewall_custom phase deploying a custom ruleset"
  description = ""
  kind        = "root"
  phase       = "http_request_firewall_custom"

  depends_on = [cloudflare_ruleset.account_firewall_custom_ruleset]

  rules = [{
    ref         = "deploy_custom_ruleset_example_com"
    description = "Deploy custom ruleset for example.com"
    expression  = "(cf.zone.name eq \"example.com\") and (cf.zone.plan eq \"ENT\")"
    action      = "execute"
    action_parameters = {
      id = cloudflare_ruleset.account_firewall_custom_ruleset.id
    }
  }]
}
resource "cloudflare_ruleset" "account_firewall_custom_entrypoint" {
  account_id  = "<ACCOUNT_ID>"
  name        = "Account-level entry point ruleset for the http_request_firewall_custom phase deploying a custom ruleset"
  description = ""
  kind        = "root"
  phase       = "http_request_firewall_custom"

  depends_on = [cloudflare_ruleset.account_firewall_custom_ruleset]

  rules {
    ref         = "deploy_custom_ruleset_example_com"
    description = "Deploy custom ruleset for example.com"
    expression  = "(cf.zone.name eq \"example.com\") and (cf.zone.plan eq \"ENT\")"
    action      = "execute"
    action_parameters {
      id = cloudflare_ruleset.account_firewall_custom_ruleset.id
    }
  }
}

Další informace o konfiguraci a nasazení vlastních sad pravidel najdete v Práce s vlastními sadami pravidel v dokumentaci k Ruleset Engine.

Další zdroje