Regras personalizadas para o Firewall de Aplicativo Web com o Azure Front Door

Usar o WAF (Firewall de Aplicativo Web) do Azure com o Front Door permite controlar o acesso aos seus aplicativos Web com base nas condições que você definir. Uma regra WAF personalizada consiste em itens como: número de prioridade, tipo de regra, condições de correspondência e 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 de correspondência, ao passo que uma regra de limite de taxa controla o acesso com base em condições de correspondência e taxas de solicitações de entrada. Será 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 Service?.

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 abaixo quando uma solicitação corresponde a uma regra personalizada.

    • Permitir – WAF permite que a solicitação processe, registre uma entrada em logs do WAF e saia.
    • Bloquear – A solicitação está bloqueada. O WAF envia resposta ao cliente sem encaminhar ainda mais a solicitação. O WAF registra uma entrada nos logs do WAF e sai.
    • Registrar – O WAF registra uma entrada nos logs do WAF e prossegue para avaliar a próxima regra na ordem de prioridade.
    • Redirecionar – 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 poderá 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

      • Qualquer uma: geralmente é usada 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 negação 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

Exemplos

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 "senha".

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

O WAF do Front Door permite criar regras personalizadas que aplicam uma restrição de tamanho ou comprimento em uma parte de uma solicitação de entrada.

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

Próximas etapas