Expiração escalonada
Use ladder() em Expira em, na ação Adicionar à lista, para manter um valor na lista por mais tempo a cada reincidência. Por exemplo, um IP bloqueado pela primeira vez sai da lista em 1 hora, e um IP reincidente permanece 2 dias.
Sintaxe
ladder(<índice>, <prazo>, <prazo>, ...)
- Índice: um campo (
$tentativas) ou uma leitura publicada por uma ação anterior (%bloqueios.cells.ip.value), com valor numérico. Um número fixo, comoladder(1, 1h, 4h), é recusado ao salvar a regra. - Prazos: de 1 a 10 prazos, cada um com um número inteiro seguido de
m,houd. Cada prazo fica entre5me 2 anos.
O índice escolhe o prazo pela posição, contada a partir de 0:
| Índice | Prazo escolhido |
|---|---|
0 | o primeiro |
1, 2, … | o prazo nessa posição |
| além do último prazo | o último |
| decimal | arredondado para baixo: 2,7 escolhe a posição 2 |
| ausente ou negativo | o primeiro |
Com ladder(%bloqueios.cells.ip.value, 1h, 4h, 16h), o índice 0 escolhe 1 hora, o índice 1 escolhe 4 horas e o índice 2 ou maior escolhe 16 horas.
Bloqueio por reincidência
O índice costuma ser a contagem de bloqueios anteriores do mesmo valor. A análise bloqueios tem uma célula sem gatilho ip, que conta os eventos por $ip em 30 dias. A regra registra um evento nessa análise apenas quando o IP entra na lista de fato:
Condição 1: "ip_velocity" in %risco.triggered_cells
Ações: Executar análise: bloqueios (resultado: bloqueios)
Adicionar à lista → $ip em @ips_bloqueados,
expira em ladder(%bloqueios.cells.ip.value, 1h, 4h, 16h, 2d) (resultado: ip_bloqueado)
Condição 2: %ip_bloqueado.added == true
Ações: Registrar análise: bloqueios
O campo Resultado da ação publica %ip_bloqueado.added. A leitura é true apenas quando a execução incluiu o IP na lista. Enquanto o IP está na lista, os eventos seguintes leem false e não contam como um novo bloqueio. Em uma rajada de eventos do mesmo IP, apenas uma execução lê true.
A célula ip conta, assim, os bloqueios do IP, e não cada evento suspeito:
| Bloqueio | Contagem na célula ip | Prazo na lista |
|---|---|---|
| primeiro | 0 | 1 hora |
| segundo | 1 | 4 horas |
| terceiro | 2 | 16 horas |
| quarto em diante | 3 ou mais | 2 dias |
A janela da célula define por quanto tempo um bloqueio conta como reincidência. No exemplo, um IP sem bloqueios em 30 dias volta ao prazo de 1 hora.
Pontos a considerar
- O prazo nunca encurta: se o valor já estiver na lista, a execução mantém o prazo mais longo entre o atual e o escolhido, conforme Adicionar à lista.
- Observação e simulação não escrevem na lista: em observação e em simulação, a ação não inclui o valor e não publica o resultado.