Regras personalizadas para o Firewall de Aplicativo Web do Azure no Azure Front Door

O Firewall de Aplicativo Web do Azure no Azure Front Door permite controlar o acesso aos seus aplicativos Web com base em condições definidas por você. Uma regra de firewall do aplicativo Web (WAF) personalizada consiste em um número de prioridade, um tipo de regra, condições de correspondência e uma ação.

Há dois tipos de regras personalizadas: regras de correspondência e regras de limite de taxa. Uma regra de correspondência controla o acesso com base em um conjunto de condições correspondentes. Uma regra de limite de taxa controla o acesso com base nas condições de correspondência e nas taxas de solicitações de entrada. É possível desabilitar uma regra personalizada para impedir que ela seja avaliada e ainda manter a configuração.

Para obter mais informações sobre a limitação de taxa, confira O que é a limitação de taxa para o Azure Front Door?.

Prioridade, condições de correspondência e tipos de ação

É possível controlar o acesso com uma regra WAF personalizada que define itens como: número de prioridade, tipo de regra, matriz de condições de correspondência e ação.

  • Prioridade

    Um inteiro exclusivo que descreve a ordem de avaliação das regras WAF. As regras com valores de baixa prioridade são avaliadas antes de regras com valores mais altos. A avaliação de regra é interrompida em qualquer ação de regra, exceto para Registrar. Os números de prioridade deverão ser exclusivos entre todas as regras personalizadas.

  • Ação

    Define de que modo rotear uma solicitação caso haja a correspondência de uma regra WAF. É possível escolher aplicar uma das ações mostradas a seguir quando uma solicitação corresponde a uma regra personalizada.

    • Permissão: o WAF permite que a solicitação seja processada, registra uma entrada nos logs do WAF e sai.
    • Bloqueio: a solicitação está bloqueada. O WAF envia uma resposta a um cliente sem encaminhar ainda mais a solicitação. O WAF registra uma entrada nos logs do WAF e sai.
    • Registro: o WAF registra uma entrada nos logs do WAF e prossegue para avaliar a próxima regra na ordem de prioridade.
    • Redirecionamento: o WAF redireciona a solicitação para um URI específico, registra uma entrada em logs do WAF e sai.
  • Condição de correspondência

    Define uma variável de correspondência, um operador e um valor de correspondência. Cada regra pode conter várias condições de correspondência. Uma condição de correspondência poderá ser baseada em localização geográfica, endereços IP do cliente (CIDR), tamanho ou correspondência de cadeia de caracteres. A correspondência de cadeia de caracteres pode ser criada em relação a uma lista de variáveis de correspondência.

    • Variável de correspondência

      • RequestMethod
      • QueryString
      • PostArgs
      • RequestUri
      • RequestHeader
      • RequestBody
      • Cookies
    • Operador

      • Any: geralmente usado para definir uma ação padrão caso nenhuma regra tenha correspondência. O operador any representa uma correspondência para todos os operadores.
      • Igual
      • Contém
      • LessThan: restrição de tamanho
      • GreaterThan: restrição de tamanho
      • LessThanOrEqual: restrição de tamanho
      • GreaterThanOrEqual: restrição de tamanho
      • BeginsWith
      • EndsWith
      • Regex
    • Regex

      Não dá suporte para as seguintes operações:

      • Referências inversas e subexpressões de captura
      • Instruções assert arbitrárias de largura zero
      • Referências e padrões recursivos de sub-rotinas
      • Padrões condicionais
      • Verbos de controle de rastreamento inverso
      • A diretiva \C de byte único
      • A diretiva \R de correspondência de nova linha
      • A diretiva \K de início de redefinição de correspondência
      • Textos explicativos e códigos de inserção
      • Agrupamento atômico e quantificadores possessivos
    • Negação [opcional]

      Caso o resultado de uma condição deva ser negado, será possível definir a condição de negate como true.

    • Transformação [opcional]

      Uma lista de cadeias de caracteres com nomes de transformações a serem realizadas antes da tentativa de correspondência. Elas podem ser as seguintes transformações:

      • Maiúsculas
      • Minúsculas
      • Trim
      • RemoveNulls
      • UrlDecode
      • UrlEncode
    • Valor de correspondência

      Os valores do método de solicitação HTTP com suporte incluem:

      • GET
      • POST
      • PUT
      • HEAD
      • Delete (excluir)
      • LOCK
      • UNLOCK
      • PERFIL
      • OPÇÕES
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • COPIAR
      • MOVE
      • PATCH
      • CONECTAR

Exemplos

Considere os exemplos a seguir.

Corresponder com base nos parâmetros de solicitação HTTP

Suponha que você precise configurar uma regra personalizada para permitir solicitações que correspondam às duas condições a seguir:

  • O valor do cabeçalho Referer é igual a um valor conhecido.
  • A cadeia de caracteres de consulta não contém a palavra password.

Aqui está um exemplo de descrição JSON da regra personalizada:

{
  "name": "AllowFromTrustedSites",
  "priority": 1,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestHeader",
      "selector": "Referer",
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "www.mytrustedsites.com/referpage.html"
      ]
    },
    {
      "matchVariable": "QueryString",
      "operator": "Contains",
      "matchValue": [
        "password"
      ],
      "negateCondition": true
    }
  ],
  "action": "Allow"
}

Bloquear solicitações HTTP PUT

Suponha que você precise bloquear qualquer solicitação que use o método HTTP PUT.

Aqui está um exemplo de descrição JSON da regra personalizada:

{
  "name": "BlockPUT",
  "priority": 2,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestMethod",
      "selector": null,
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "PUT"
      ]
    }
  ],
  "action": "Block"
}

Restrição de tamanho

Um WAF do Azure Front Door permite criar regras personalizadas que aplicam uma restrição de tamanho ou comprimento em uma parte de uma solicitação de entrada. Essa restrição de tamanho é medida em bytes.

Suponha que você precise bloquear solicitações cuja URL tenha mais de 100 caracteres.

Aqui está um exemplo de descrição JSON da regra personalizada:

{
  "name": "URLOver100",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "GreaterThanOrEqual",
      "negateCondition": false,
      "matchValue": [
        "100"
      ]
    }
  ],
  "action": "Block"
}

Correspondência com base no URI da solicitação

Suponha que você precise permitir solicitações nas quais o URI contenha 'login'.

Aqui está um exemplo de descrição JSON da regra personalizada:

{
  "name": "URIContainsLogin",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "Contains",
      "negateCondition": false,
      "matchValue": [
        "login"
      ]
    }
  ],
  "action": "Allow"
}

Copiar e duplicar regras personalizadas

As regras personalizadas podem ser duplicadas em uma determinada política. Ao duplicar uma regra, você precisa especificar um nome exclusivo para a regra e um valor de prioridade exclusivo. Além disso, as regras personalizadas podem ser copiadas de uma política do WAF do Azure Front Door para outra, desde que as políticas estejam na mesma assinatura. Ao copiar uma regra de uma política para outra, você precisa selecionar a política do WAF do Azure Front Door para a qual deseja copiar a regra. Depois de selecionar a política do WAF, você precisará dar um nome exclusivo à regra e atribuir uma classificação de prioridade.

Próximas etapas