Ir para o conteúdo

Como permitir solicitações de um bot bloqueado por um grupo de regras de controle de bots do AWS WAF?

7 minuto de leitura
0

Quero permitir solicitações de um bot legítimo que esteja bloqueado por um grupo de regras de controle de bots do AWS WAF.

Resolução

Para permitir que solicitações de um bot legítimo sejam bloqueadas por um grupo de regras de controle de bots, conclua as etapas a seguir.

Observação: o grupo de regras de controle de bots do AWS WAF usa endereços IP do AWS WAF para verificar bots. Alguns bots verificados são roteados por meio de um proxy ou CDN que não preserva o endereço IP do cliente ao encaminhar solicitações. Se o seu bot roteia dessa maneira, você deve permitir especificamente esse bot.

Identifique a regra de controle de bots que bloqueia as solicitações dos seus logs do AWS WAF

Para identificar a regra que bloqueia a solicitação legítima do bot, analise seus logs do AWS WAF. Use uma consulta do Amazon Athena ou do Amazon CloudWatch Log Insights.

Use uma consulta do Athena para analisar os logs do AWS WAF

Conclua as etapas a seguir:

  1. Use a projeção de partição para criar uma tabela dos logs do AWS WAF no Athena.
  2. Para encontrar os detalhes da solicitação bloqueada, execute a seguinte consulta do Athena:
    WITH waf_data AS
    (SELECT from_unixtime(waf.timestamp / 1000) as time,
    waf.terminatingRuleId,
    waf.action,
    waf.httprequest.clientip as clientip,
    waf.httprequest.requestid as requestid,
    waf.httprequest.country as country,
    rulegroup.terminatingrule.ruleid as matchedRule,
    labels as Labels,
    map_agg(LOWER(f.name),
    f.value) AS kv
    FROM waf_logs waf,
    UNNEST(waf.httprequest.headers)
    AS t(f), UNNEST(waf.rulegrouplist) AS t(rulegroup)
    WHERE rulegroup.terminatingrule.ruleid IS NOT NULL
    GROUP BY 1, 2, 3, 4, 5, 6, 7,8)
    SELECT waf_data.time,
    waf_data.action,
    waf_data.terminatingRuleId,
    waf_data.matchedRule,
    waf_data.kv['user-agent'] as UserAgent,
    waf_data.kv['user-agent'] like 'pingdom%',
    waf_data.clientip,
    waf_data.country,
    waf_data.Labels
    FROM waf_data
    Where terminatingRuleId='AWS-AWSManagedRulesBotControlRuleSet'
    and time > now() - interval '3' day
    ORDER BY time
    DESC
    Observação: substitua waf_logs pelo nome da tabela, waf_data pelo nome do banco de dados, time > now() - interval '3' day pelo intervalo de tempo e pingdom% pelo nome do bot.
    Para obter exemplos de consultas do Athena que filtram registros por um intervalo especificado, consulte Consultar logs do AWS WAF.
  3. Verifique a coluna matchedRule para identificar a regra que bloqueia solicitações legítimas de bots. Veja a seguir o exemplo de saída da consulta do Athena da etapa 2:
    #: 1
    timestamp: 2024-04-10 15:11:18.000
    Action**:** BLOCK
    terminatingRuleId: AWS-AWSManagedRulesBotControlRuleSet
    matchedRule: CategoryMonitoring
    UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/61.0.3163.100 Chrome/61.0.3163.100 Safari/537.36 PingdomPageSpeed/1.0 (pingbot/2.0; +http://www.pingdom.com/)
    _col5: falso
    clientip: 192.0.2.0
    country: US
    labels: [{name=awswaf:managed:token:absent}, {name=awswaf:managed:aws:bot-control:bot:name:pingdom}, {name=awswaf:managed:aws:bot-control:bot:unverified}, {name=awswaf:managed:aws:bot-control:bot:category:monitoring},{name=awswaf:managed:captcha:absent}, {name=awswaf:managed:aws:bot-control:signal:non_browser_user_agent}]
    Observação: a saída da consulta do Athena aparece como uma tabela.

Usar uma consulta do CloudWatch Log Insights

Conclua as etapas a seguir:

  1. Abra o console do CloudWatch.

  2. No painel de navegação, selecione Logs e, depois, Log Insights.

  3. Em insights de logs, abra o menu suspenso Critérios de seleção,

  4. Escolha um ou mais grupos de logs para consultar ou escolha Procurar grupos de logs.

  5. Selecione seus grupos de logs.

  6. (Opcional) Escolha um intervalo de tempo para sua consulta.

  7. Cole a consulta a seguir no editor de consultas.

    fields @timestamp, @message
    | parse @message '{"name":"User-Agent","value":"*"}' as userAgent
    | filter @message like 'awswaf:managed:aws:bot-control'
    | parse @message '"labels":[*]' as Labels
    | parse @message '"httpRequest":{"clientIp":"*","country":"*"' as IP, Country
    | parse @message '"terminatingRule":{"ruleId":"*","action":"*"' as ruleID, action
    | filter action = "BLOCK"
    | display @timestamp, userAgent, IP, Country, ruleID, action, terminatingRuleId, Labels
    | sort by @timestamp DESC
    | limit 100
  8. (Opcional) Para encontrar um bot de um endereço IP específico, adicione o filtro a seguir à consulta anterior:

    | filter IP = '10.0.0.0/8'

    Observação: substitua 10.0.0.0/8 pelo seu endereço IP.

  9. (Opcional) Para encontrar um bot com um valor de agente de usuário específico, adicione o filtro a seguir à consulta anterior:

    | filter userAgent like 'user-agent value'

    Observação: substitua o valor user-agent pelo valor do agente do usuário.

  10. Para ver toda a mensagem do log, expanda as entradas do log.

  11. Para encontrar a regra que bloqueia solicitações legítimas de bots, pesquise o terminatingRuleId e ruleGroupList.x.terminatingRule.ruleId. Os rótulos anexados a esses campos mostram o motivo pelo qual a solicitação foi bloqueada. No exemplo a seguir, ruleGroupList.0.terminatingRule.ruleID é bloqueado devido a CategoryMonitoring:

httpSourceName                             ALB
labels.0.name                              awswaf:managed:token:absent
labels.1.name                              awswaf:managed:aws:bot-control:bot:name:pingdom
labels.2.name                              awswaf:managed:aws:bot-control:bot:unverified
labels.3.name                              awswaf:managed:aws:bot-control:bot:category:monitoring
labels.4.name                              awswaf:managed:captcha:absent
ruleGroupList.0.customerConfig.0.name      InspectionLevel
ruleGroupList.0.customerConfig.0.value     COMMON
ruleGroupList.0.customerConfig.1.name      EnableMachineLearning
ruleGroupList.0.customerConfig.1.value     null
ruleGroupList.0.ruleGroupId                AWS#AWSManagedRulesBotControlRuleSet
ruleGroupList.0.terminatingRule.action     BLOCK
ruleGroupList.0.terminatingRule.ruleId     CategoryMonitoring
terminatingRuleId                          AWS-AWSManagedRulesBotControlRuleSet
terminatingRuleType                        MANAGED_RULE_GROUP

Uma solicitação pode ter vários rótulos anexados. Para os fins dessas instruções, somente as solicitações relacionadas às regras de bloqueio são relevantes.

Definir a regra de controle de bots que bloqueia a contagem das solicitações

Conclua as etapas a seguir:

  1. Abra o console do AWS WAF.
  2. No painel de navegação, escolha AWS WAF.
  3. Selecione Pacotes de recursos e proteção.
  4. Encontre seu pacote de proteção e selecione Exibir e editar ao lado de Regras.
  5. No painel direito, selecione o grupo de regras AWSManagedRulesBotControlRuleSet.
  6. Em Substituições de regras, altere a ação para Contar para a regra que está bloqueando.
  7. Escolha Salvar regra.

Observação: o AWS WAF verifica e anexa rótulos às solicitações que correspondem à regra, mas não as bloqueia.

Crie uma regra personalizada para todas as solicitações correspondentes, exceto para o bot que você deseja permitir

Para bloquear solicitações ilegítimas, crie uma regra que corresponda aos rótulos para permitir solicitações com características específicas e bloqueie outras solicitações. Por exemplo:

Name: name of the rule
 IF (Statement 1):the request contains the label
   AND
NOT
 IF (Statement 2):the request contains the label(enter the bot label you want to allow)
Then Action: Block

Observação: se a regra que bloqueia tiver o rótulo awswaf:managed:aws:bot-control:bot:category, o Controle de Bots anexará outro rótulo ao nome do bot. É possível usar esse rótulo de nome de bot para identificar bots legítimos. Caso contrário, use o cabeçalho user-agent para identificar bots legítimos.

Para criar uma regra personalizada, conclua as seguintes etapas:

  1. Abra o console do AWS WAF.
  2. No painel de navegação, escolha AWS WAF.
  3. Selecione Pacotes de recursos e proteção.
  4. Encontre seu pacote de proteção e selecione Exibir e editar ao lado de Regras.
  5. No painel direito, escolha Adicionar regras.
    Selecione Regra personalizada e clique em Próximo.
    Selecione Regra personalizada novamente e clique em Próximo.
  6. Atualize a Ação da regra para BLOQUEAR.
  7. Insira o Nome da regra.
  8. Em Se for uma solicitação, expanda a lista suspensa e selecione corresponde a todas as declarações (AND).
  9. Na Declaração 1, conclua as seguintes etapas:
    Em Inspecionar, escolha Tem uma etiqueta.
    Em Declaração, selecione Rótulo.
    Em Chave correspondente, selecione awswaf:managed:aws:bot-control:bot:category: category-name.
    Observação: substitua category-name pelo nome da categoria da regra.
  10. Em Declaração 2, conclua as seguintes etapas:
    Em Inspecionar, escolha Tem um rótulo. Em Declaração, escolha Rótulo.
    Em Chave correspondente, selecione awswaf:managed:aws:bot-control:bot:name: bot-name.
    Observação: substitua bot-name pelo nome do seu bot.
    Expanda Configuração da regra, em Negar declaração (NOT), selecione Negar resultados da declaração.
  11. Selecione Criar regra.
  12. Para definir a prioridade da regra, clique em Editar ordem de regras no painel direito e arraste a regra abaixo da regra de controle de bots.
  13. Escolha Salvar ordem de regras.

O exemplo a seguir é uma regra personalizada que usa rótulos para permitir que bots legitimam bots e bloqueie todos os demais:

{
  "Name": "expection-rule",
  "Priority": 2,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "LabelMatchStatement": {
            "Scope": "LABEL",
            "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
              }
            }
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "expection-rule"
  }
}

Valide se o AWS WAF permite tráfego legítimo de bots

Para verificar se o AWS WAF permite o rastreamento legítimo de bots, verifique os logs do AWS WAF novamente. Se o bot ainda estiver bloqueado, repita o processo anterior com regras adicionais. Às vezes, mais de uma regra bloqueia o tráfego legítimo. Nesse caso, você deve repetir o processo anterior várias vezes.

Informações relacionadas

Exemplo de controle de bots: permitir um bot bloqueado específico

Exemplo de controle de bots: criar uma exceção para um agente de usuário bloqueado

Campos de logs do pacote de proteção ou do tráfego de ACL da web

Gerenciando o comportamento do grupo de regras

AWS OFICIALAtualizada há 7 meses