Sobre as regras personalizadas do WAF

Use o recurso de regras personalizadas do WAF para controlar o tráfego de entrada filtrando as solicitações para um domínio. Você pode executar ações como Block (bloquear ) ou Managed challenge (desafio gerenciado ) nas solicitações recebidas de acordo com as regras que você definir.

Como outras regras avaliadas pelo Ruleset Engine, as regras personalizadas do WAF exigem os seguintes parâmetros básicos:

  • Uma expressão que especifica os critérios pelos quais você está fazendo a correspondência do tráfego usando a linguagem de regras.
  • Uma ação que especifica o que fazer quando há uma correspondência para a regra.

As regras personalizadas são avaliadas na ordem em que são definidas, da primeira à última posição, na tabela de regras personalizadas. Você pode visualizar a tabela navegando até Segurança > Regras de firewall. Algumas ações, como Block, interrompem a avaliação de outras regras. Para obter mais detalhes sobre as ações e seu comportamento, consulte Ações de regras do Ruleset Engine.

Casos de uso comuns

As seções a seguir detalham exemplos de casos de uso comuns para regras personalizadas do WAF.

Permitir apenas o tráfego de países específicos

Usando a ação Block (Bloquear ), este exemplo bloqueia solicitações com base no código do país usando o campo ip.src.country, permitindo solicitações de apenas dois países: Estados Unidos e México:

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

Bloquear solicitações por reputação de IP

A reputação de IP é uma pontuação de 0 (risco zero) a 100 (alto risco), que classifica a reputação de IP de um visitante.

A reputação de IP é calculada com base no Project Honeypot, em informações externas sobre IPs públicos e em inteligência de ameaças internas provenientes de regras gerenciadas e do site DDoS.

Usando a ação Bloquear, este exemplo bloqueia solicitações com base em códigos de país (formato ISO 3166-1 Alpha 2) de endereços IP com pontuação maior que 0:

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

Permitir apenas o tráfego de endereços IP especificados

A ação Bloquear restringe o acesso ao seu domínio, permitindo apenas solicitações de endereços IP especificados e negando todas as outras.

Por exemplo, para permitir o tráfego somente dos IPs 192.0.2.10 e 203.0.113.25, execute a seguinte expressão:

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

Use uma das expressões a seguir, dependendo do protocolo que você deseja restringir:

  • Se você quiser especificar sub-redes em vez de endereços IP únicos, o site IBM Cloud CIS suporta apenas:

    IPv4: /16 e /24

    IPv6: /32, /48, e /64

  • Sempre inclua os sites IPv4 e IPv6 para obter uma cobertura completa.

  • O bloqueio apenas de IPv4 ( 0.0.0.0/0 ) ainda permite o tráfego de IPv6. Para bloquear ambos:

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

Configuração de uma regra para ignorar outros recursos do CIS

A ação de ignorar é compatível com diferentes opções de ignorar, de acordo com os recursos ou produtos de segurança que você deseja ignorar.

Esta seção contém exemplos de diferentes cenários de regra de ignorar para regras personalizadas do WAF. Leve em conta as seguintes considerações:

  • O valor {zone_id} é o ID da zona à qual você deseja adicionar a regra.

  • O valor {ruleset_id} é a ID do conjunto de regras do ponto de entrada da fase http_request_firewall_custom. Para obter detalhes sobre como obter esse ID de conjunto de regras, consulte Listar e visualizar conjuntos de regras. Os exemplos de API a seguir adicionam uma regra de ignorar a um conjunto de regras existente usando a operação de regra Criar um conjunto de regras de zona.

    No entanto, o conjunto de regras do ponto de entrada pode ainda não existir. Nesse caso, use a operação Atualizar conjunto de regras de ponto de entrada para criar o conjunto de regras de ponto de entrada com uma regra de ignorar.

  • Embora cada exemplo inclua apenas um parâmetro de ação, você pode usar várias opções de ignorar na mesma regra especificando simultaneamente os parâmetros de ação conjunto de regras, fases e produtos.

Ignorar as regras restantes no conjunto de regras atual

Este exemplo usa a operação de regra Criar um conjunto de regras de zona para adicionar uma regra de ignorar ao conjunto de regras existente. http_request_firewall_custom conjunto de regras de ponto de entrada de fase com ID RULESET_ID. Se você não souber o ID do conjunto de regras do ponto de entrada, consulte Obter o ponto de entrada da regra personalizada para a API. A regra ignora todas as regras restantes no conjunto de regras atual para solicitações que correspondem à expressão da regra:

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

Pular uma fase

Este exemplo usa o conjunto de regras Criar uma zona para adicionar uma regra ao conjunto de regras de ponto de entrada de fase http_request_firewall_custom existente com ID RULESET_ID. A regra ignora a fase http_ratelimit para solicitações que correspondem à expressão da regra:

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

Ignorar uma fase e não registrar solicitações correspondentes

Este exemplo usa a operação de regra Criar um conjunto de regras de zona para adicionar uma regra que ignora o http_ratelimit fase e desabilita o registro de eventos para a regra atual:

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

Ignorar produtos de segurança

Este exemplo usa a operação de regra Criar um conjunto de regras de zona para adicionar uma regra que ignora os produtos Bloqueio de zona e Bloqueio de agente de usuário para solicitações que correspondem à expressão da regra:

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