Regras personalizadas do Firewall de Aplicativo Web v2 no Gateway de Aplicativo do Azure

O WAF (Firewall do Aplicativo Web) do Gateway de Aplicativo do Azure v2 vem com um conjunto de regras pré-configurado gerenciado pela plataforma que oferece proteção contra muitos tipos diferentes de ataques. Esses ataques incluem scripts entre sites, injeção de SQL e outros. Se você for um administrador do WAF, talvez queira escrever suas próprias regras para aumentar as regras do conjunto de regras principais (CRS). As regras personalizadas podem bloquear, permitir ou registrar o tráfego solicitado com base nos critérios de correspondência. Se a política do WAF estiver definida como modo de detecção e uma regra de bloqueio personalizada for disparada, a solicitação será registrada e nenhuma ação de bloqueio será executada.

As regras personalizadas permitem que você crie regras próprias avaliadas para cada solicitação que passa pelo WAF. Essas regras têm uma prioridade mais alta do que o restante das regras nos conjuntos de regras gerenciadas. As regras personalizadas contêm um nome de regra, prioridade de regra e a matriz de condições de correspondência. Se essas condições forem atendidas, será executada uma ação (para permitir, bloquear ou registrar). Se uma regra personalizada for disparada e uma ação de permissão ou bloqueio for executada, nenhuma outra regra personalizada ou gerenciada será avaliada. As regras personalizadas podem ser habilitadas ou desabilitadas sob demanda.

Por exemplo, você pode bloquear todas as solicitações provenientes de endereços IP pertencentes ao intervalo 192.168.5.0/24. Nessa regra, o operador é o IPMatch, os valores de correspondência são o intervalo de endereços IP (192.168.5.0/24) e a ação é bloquear o tráfego. Você também define o nome da regra, a prioridade e o estado habilitado/desabilitado.

As regras personalizadas dão suporte ao uso da lógica de composição para fazer regras mais avançadas que atendam às suas necessidades de segurança. Por exemplo, você pode usar duas regras personalizadas para criar a seguinte lógica ((rule1:Condição 1 e rule1:Condição 2) ou rule2:Condição 3). Essa lógica significa que, se a Condição 1 e a Condição 2 forem atendidas ou se a Condição 3 for atendida, o WAF deverá executar a ação especificada nas regras personalizadas.

Diferentes condições de correspondência dentro da mesma regra sempre são compostas usando e. Por exemplo, bloqueie o tráfego de um endereço IP específico, somente se ele estiver usando um determinado navegador.

Se você quiser usar ou entre duas condições diferentes, ambas deverão estar em regras diferentes. Por exemplo, bloqueie o tráfego de um endereço IP específico ou bloqueie o tráfego se ele estiver usando um navegador específico.

Também há suporte para expressões regulares nas regras personalizadas, assim como nos conjuntos de regras do CRS. Para ver mais exemplos, confira os exemplos 3 e 5 em Criar e usar regras personalizadas de Firewall de Aplicativo Web.

Observação

O número máximo de regras personalizadas do WAF é 100. Para obter mais informações sobre os limites do Gateway de Aplicativo, confira Assinatura do Azure e limites de serviços, cotas e restrições.

Cuidado

Todas regras de redirecionamento aplicadas no nível do gateway de aplicativo ignorarão as regras personalizadas de WAF. Consulte a visão geral de redirecionamento do Gateway de Aplicativo para obter mais informações sobre as regras de redirecionamento.

Permitindo vs. bloqueando

Permitir e bloquear o tráfego é simples com regras personalizadas. Por exemplo, é possível bloquear todo o tráfego proveniente de um intervalo de endereços IP. Você pode fazer outra regra para permitir o tráfego se a solicitação vier de um navegador específico.

Para permitir algo, verifique se o parâmetro -Action está definido como Permitir. Para bloquear algo, verifique se o parâmetro -Action está definido como Bloquear.

$AllowRule = New-AzApplicationGatewayFirewallCustomRule `
   -Name example1 `
   -Priority 2 `
   -RuleType MatchRule `
   -MatchCondition $condition `
   -Action Allow `
   -State Enabled

$BlockRule = New-AzApplicationGatewayFirewallCustomRule `
   -Name example2 `
   -Priority 2 `
   -RuleType MatchRule `
   -MatchCondition $condition `
   -Action Block `
   -State Enabled

O $BlockRule anterior é mapeado para a seguinte regra personalizada no Azure Resource Manager:

"customRules": [
      {
        "name": "blockEvilBot",
        "priority": 2,
        "ruleType": "MatchRule",
        "action": "Block",
        "state": "Enabled",
        "matchConditions": [
          {
            "matchVariables": [
              {
                "variableName": "RequestHeaders",
                "selector": "User-Agent"
              }
            ],
            "operator": "Contains",
            "negationCondition": false,
            "matchValues": [
              "evilbot"
            ],
            "transforms": [
              "Lowercase"
            ]
          }
        ]
      }
    ], 

Essa regra personalizada contém um nome, uma prioridade, uma ação e a matriz de condições de correspondência que devem ser atendidas para que a ação ocorra. Para obter mais explicações sobre esses campos, confira as descrições de campo a seguir. Para ver exemplos de regras personalizadas, confira Criar e usar regras personalizadas de Firewall de Aplicativo Web.

Campos para regras personalizadas

Nome [opcional]

O nome da regra. Aparece nos logs.

Habilitar a regra [opcional]

Ativar/desativar essa regra. As regras personalizadas estão ativadas por padrão.

Prioridade [obrigatório]

  • Determina a ordem de avaliação da regra. Quanto menor o valor, mais cedo será a avaliação da regra. O intervalo permitido é de 1-100.
  • Deve ser exclusivo para cada regra personalizada. A regra com prioridade 40 será avaliada antes da regra com prioridade 80.

Tipo de regra [obrigatório]

No momento, deve ser MatchRule.

Variável de correspondência [obrigatório]

Deve ser uma das variáveis:

  • RemoteAddr – Endereço IPv4/Intervalo da conexão com o computador remoto
  • RequestMethod – Método de solicitação HTTP
  • QueryString – Variável no URI
  • PostArgs – Argumentos enviados no corpo do POST. As regras personalizadas que usam essa variável de correspondência só serão aplicadas se o cabeçalho 'Content-Type' estiver definido como 'application/x-www-form-urlencoded' e 'multipart/form-data'. Há suporte para o tipo de conteúdo de application/json adicional com a versão 3.2 ou superior do CRS, conjunto de regras de proteção contra bots e regras personalizadas de correspondência de área geográfica.
  • RequestUri – URI da solicitação
  • RequestHeaders – Cabeçalhos da solicitação
  • RequestBody – Essa variável contém todo o corpo da solicitação como um todo. As regras personalizadas que usam essa variável de correspondência serão aplicadas apenas se o cabeçalho 'Content-Type' estiver definido como o tipo de mídia application/x-www-form-urlencoded. Há suporte para os tipos de conteúdo de application/soap+xml, application/xml, text/xml adicionais com a versão 3.2 ou superior do CRS, conjunto de regras de proteção contra bots e regras personalizadas de correspondência de área geográfica.
  • RequestCookies – Cookies da solicitação

Seletor [opcional]

Descreve o campo da coleção matchVariable. Por exemplo, se matchVariable for RequestHeaders, o seletor poderá estar no cabeçalho User-Agent.

Operador [obrigatório]

Deve ser um dos seguintes operadores:

  • IPMatch – Usado somente quando a variável de correspondência é RemoteAddr e só dá suporte ao IPv4
  • Igual – A entrada é a mesma que o MatchValue
  • Qualquer – Não deverá ter um MatchValue. É recomendável para Variável de Correspondência com um Selector válido.
  • Contém
  • LessThan
  • GreaterThan
  • LessThanOrEqual
  • GreaterThanOrEqual
  • BeginsWith
  • EndsWith
  • Regex
  • Geomatch

Negar condição [opcional]

Nega a condição atual.

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:

  • Letras minúsculas
  • Letras Maiúsculas
  • Trim
  • UrlDecode
  • UrlEncode
  • RemoveNulls
  • HtmlEntityDecode

Valores de correspondência [obrigatório]

Lista de valores com os quais fazer correspondência, que pode aplicados com o operador OR. Por exemplo, podem ser endereços IP ou outras cadeias de caracteres. O formato do valor depende do operador anterior.

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

  • GET
  • HEAD
  • POST
  • OPÇÕES
  • PUT
  • DELETE
  • PATCH

Ação [obrigatório]

No modo de detecção de política do WAF, se uma regra personalizada for disparada, a ação sempre será registrada, independentemente do valor da ação definido na regra personalizada.

  • Permitir – Autoriza a transação, ignorando todas as outras regras. A solicitação especificada é adicionada à lista de permissões e, quando correspondida, a solicitação interrompe a avaliação adicional e é enviada ao pool de back-end. As regras que estão na lista de permitidos não são avaliadas quanto a outras regras personalizadas ou gerenciadas.
  • Bloquear – Bloqueia ou registra a transação com base em SecDefaultAction (modo de detecção/prevenção).
    • Modo de prevenção – Bloqueia a transação com base em SecDefaultAction. Assim como a ação Allow, quando a solicitação é avaliada e adicionada à lista de bloqueios, a avaliação é interrompida e a solicitação é bloqueada. Qualquer solicitação posterior que atenda às mesmas condições não será avaliada e será bloqueada.
    • Modo de detecção – Registra a transação com base em SecDefaultAction e posteriormente a avaliação será interrompida. Qualquer solicitação posterior que atenda às mesmas condições não será avaliada e será apenas registrada.
  • Log – Permite que a regra grave no log, mas permite que o restante das regras seja executado para avaliação. As outras regras personalizadas são avaliadas em ordem de prioridade, seguidas pelas regras gerenciadas.

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 de WAF do Gateway de Aplicativo 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 Gateway de Aplicativo para o 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.

Regras personalizadas do Geomatch

As regras personalizadas permitem que você crie regras adaptadas para atender às necessidades exatas dos seus aplicativos e das suas políticas de segurança. Você pode restringir o acesso aos seus aplicativos Web por país/região. Para obter mais informações, consulte Regras personalizadas do Geomatch.

Próximas etapas