Aplique WAF e um rate limit a um caminho
Crie uma regra de firewall que avalia as requisições a um caminho com um rule set do WAF e limita a taxa de cada cliente nele.
Você aplica um rule set do WAF e um rate limit a um caminho de um workload, como /api/, com uma regra de firewall, pelo Azion Console, pela Azion CLI ou pela API. Para aplicar um rule set a toda requisição, consulte Aplique um rule set a toda requisição, e para aplicar um rate limit aos clientes de uma network list, consulte Aplique um rate limit aos endereços de uma lista.
Um caminho como uma API ou um formulário de login precisa de proteções de que o resto do domínio não precisa. O WAF é cobrado pelas requisições que avalia, então uma regra limitada ao caminho avalia só esse tráfego, e o rate limit dela conta só as requisições a esse caminho.
- O firewall compara a URI da requisição com o caminho. Uma requisição a qualquer outro caminho não corresponde, e a regra não executa nada nela.
- Na correspondência, Set WAF avalia a requisição contra o rule set. No modo Blocking, uma requisição que o rule set bloqueia recebe
400. - Set Rate Limit então conta a requisição contra a taxa do endereço IP do cliente. Uma requisição além do burst recebe
429. - Uma requisição que passa pelos dois segue para a aplicação.
Pré-requisitos
- Um firewall vinculado ao workload que serve o caminho, com o WAF ativado nas configurações principais. Para vinculá-lo, consulte Vincule um firewall a um workload, e para ativar o WAF, consulte Defina as configurações principais de um firewall.
- Um rule set do WAF, e o ID dele para a CLI e a API. Para criar um, consulte Crie um rule set em sensibilidade média.
- Um personal token, para a API e a CLI.
- A Azion CLI instalada e autorizada, para o procedimento pela CLI.
- Acesso ao Azion Console, para o procedimento pelo Console. Consulte Acesse o Azion Console.
Os exemplos protegem /api/ em www.example.com com o rule set <waf-id>, no firewall <firewall-id>. Substitua-os pelo seu caminho, rule set e firewall.
Crie a regra para o caminho
O critério é Request Uri starts with /api/, que também corresponde a caminhos mais profundos, como /api/v1/orders. Corresponda à URI, não à query string: uma variável vazia não corresponde, então Request Args matches .* ignora todo POST cujo payload fica no corpo. Os comportamentos seguem uma ordem fixa. Set WAF é um dos dois comportamentos que outro comportamento pode seguir, e escolher Set Rate Limit remove todo comportamento depois dele, então Set WAF vem primeiro.
Set WAF começa em Logging, que avalia, registra e serve cada requisição, porque os registros mostram o que o rule set sinaliza no seu próprio tráfego. A taxa é de 10 requisições por segundo por endereço IP de cliente, com um burst de 10. As requisições acima da taxa entram em fila e são liberadas na taxa, e só as requisições simultâneas além do burst recebem 429. Mantenha o burst em até dez vezes a taxa, para que a fila guarde no máximo 10 segundos de tráfego.
Para criar a regra no Azion Console:
Acesse Azion Console > Firewalls e selecione o firewall.
Insira api - waf and rate limit.
Na seção Criteria, selecione a variável Request Uri, o operador starts with e /api/ como argumento.
Na seção Behaviors, selecione Set WAF, depois o seu rule set e Logging como modo.
Selecione Add Behavior e depois Set Rate Limit. Defina Rate Limit Type como Req/s e Limit By como Client IP address. Insira 10 em Average Rate Limit e 10 em Maximum Burst Size.
A regra aparece na aba Rules Engine, abaixo das regras criadas antes dela.
Toda requisição a /api/ é avaliada pelo rule set e contada contra a taxa antes de chegar à aplicação. Esta regra não avalia nem conta as requisições a nenhum outro caminho. Para recusar o que o rule set sinaliza, mude o modo para Blocking quando 3 dias de Tuning não tiverem nenhuma requisição que deveria ter sido servida, como descreve Mude um rule set para blocking.
Confirme que a regra age no caminho
Uma regra que você adiciona chega ao tráfego de 6 minutos e 29 segundos a 9 minutos e 18 segundos depois de salva, e até lá as requisições alternam entre a resposta anterior e a nova. Repita cada verificação até que as respostas concordem.
Para confirmar os dois comportamentos:
-
Envie 30 requisições simultâneas ao caminho a partir de um endereço:
Algumas das respostas imprimem
429: as requisições simultâneas além do burst de10. Uma requisição recusada recebe a página de erro padrão da Azion, sem nenhum header de rate limit:Texto -
Envie as mesmas 30 requisições a um caminho fora de
/api/. Nenhuma delas imprime429, porque a regra não corresponde a esse caminho. -
Envie ao caminho uma requisição com uma query string em formato de injeção:
Em Logging, a aplicação responde normalmente, e o
x-azion-request-idda requisição encontra o registro dela no WAF. Depois da mudança para Blocking, a mesma requisição recebe:
A regra recusa com 429 as requisições a /api/ além do burst e registra o que o rule set sinaliza no caminho. Nenhuma resposta nomeia o firewall nem traz um tempo de nova tentativa, então o x-azion-request-id de uma requisição recusada é o que leva ao registro dela. Para lê-lo, consulte Encontre o score de uma requisição bloqueada.