INTEGRITY Документация

Настройка пользовательских правил WAF с помощью Terraform

На этой странице приведены примеры создания Пользовательские правила WAF в зоне или аккаунте с помощью Terraform. Примеры охватывают следующие сценарии:

В документации WAF есть дополнительные примеры Terraform, см. Дополнительные ресурсы.

Если вы используете Cloudflare API, см. следующие ресурсы в документации по WAF:

Дополнительную информацию о развёртывании и настройке пользовательских наборов правил с помощью Rulesets API см. в Работа с пользовательскими наборами правил в документации по Ruleset Engine.

Прежде чем начать

Получите нужные идентификаторы аккаунта или зоны

Для конфигураций Terraform, приведённых на этой странице, требуется идентификатор зоны (или идентификатор аккаунта), в которой вы будете развёртывать наборы правил.

Импорт или удаление существующих наборов правил

Terraform исходит из того, что полностью контролирует наборы правил аккаунта и зоны. Если у вас уже настроены наборы правил в аккаунте или зоне, выполните одно из следующих действий:


Добавление пользовательского правила в зону

В следующем примере настраивается пользовательское правило во входном наборе правил зоны для http_request_firewall_custom фаза для зоны с ID <ZONE_ID>. Это правило заблокирует весь трафик на нестандартных портах HTTP(S):

Необходимые разрешения API-токена

Хотя бы одно из следующих права доступа токена требуется:

  • Zone WAF Write

Настройте cloudflare_ruleset ↗ ресурс:

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"
  }
}

Чтобы создать ещё одно пользовательское правило, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.


Создание и развёртывание пользовательского набора правил

В следующем примере создаётся пользовательский набор правил в аккаунте с ID <ACCOUNT_ID> содержащий одно пользовательское правило. Затем этот пользовательский набор правил разворачивается с помощью отдельного cloudflare_ruleset ресурс Terraform. Если вы не развернёте пользовательский набор правил, он не будет выполнен.

Следующая конфигурация создаёт пользовательский набор правил с одним правилом:

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Account WAF Write
  • Account Rulesets Write

Настройте cloudflare_ruleset ↗ ресурс:

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"
  }
}

Чтобы создать ещё одно пользовательское правило в пользовательском наборе правил, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.


Следующая конфигурация развёртывает пользовательский набор правил на уровне аккаунта. Она определяет зависимость от account_firewall_custom_ruleset ресурс и использует ID созданного пользовательского набора правил в action_parameters:

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Account WAF Write
  • Account Rulesets Write

Настройте cloudflare_ruleset ↗ ресурс:

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
    }
  }
}

Дополнительную информацию о настройке и развёртывании пользовательских наборов правил см. в Работа с пользовательскими наборами правил в документации по Ruleset Engine.

Дополнительные ресурсы