Salta al contenuto

Come posso consentire le richieste provenienti da un bot bloccato da un gruppo di regole di Rilevamento dei bot in AWS WAF?

8 minuti di lettura
0

Desidero consentire le richieste provenienti da un bot legittimo bloccato da un gruppo di regole di Rilevamento dei bot in AWS WAF Bot Control.

Risoluzione

Per consentire le richieste provenienti da un bot legittimo bloccato da un gruppo di regole di Rilevamento dei bot, completa i seguenti passaggi.

Nota: il gruppo di regole di Rilevamento dei bot in AWS WAF utilizza gli indirizzi IP di AWS WAF per verificare i bot. Alcuni bot verificati vengono indirizzati tramite un proxy o una CDN che non conserva l'indirizzo IP del client quando inoltra le richieste. Se il bot viene indirizzato in questo modo, devi autorizzare specificamente il bot.

Identifica la regola di Rilevamento dei bot che blocca le richieste nei log di AWS WAF

Per identificare la regola che blocca la richiesta di un bot legittimo, analizza i log di AWS WAF. Utilizza una query Amazon Athena o Amazon CloudWatch Log Insights.

Utilizza una query Athena per analizzare i log di AWS WAF

Completa i seguenti passaggi:

  1. Utilizza la proiezione delle partizioni per creare una tabella per i log di AWS WAF in Athena.
  2. Per trovare i dettagli della richiesta bloccata, esegui questa query 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
    Nota: sostituisci waf_logs con il nome della tua tabella, waf_data con il nome del tuo database, time > now() - interval '3' day con il tuo intervallo di tempo e pingdom% con il nome del tuo bot.
    Per esempi di query Athena che filtrano i record per un intervallo di tempo specificato, consulta Query sui log di AWS WAF.
  3. Controlla la colonna matchedRule per identificare la regola che blocca le richieste provenienti dal bot legittimo. Di seguito è riportato a titolo di esempio l'output della query Athena del passaggio 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: false
    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}]
    Nota: l'output della query Athena appare come una tabella.

Utilizza una query CloudWatch Log Insights

Completa i seguenti passaggi:

  1. Apri la console CloudWatch.

  2. Nel pannello di navigazione, scegli Log, quindi Log Insights.

  3. In Log Insights, apri il menu a discesa Criteri di selezione.

  4. Scegli uno o più gruppi di log su cui eseguire la query o seleziona Scegli i gruppi di log.

  5. Seleziona i gruppi di log.

  6. (Facoltativo) Scegli un intervallo di tempo per la query.

  7. Incolla la seguente query nell'editor di query.

    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. (Facoltativo) Per trovare un bot da un indirizzo IP specifico, aggiungi il seguente filtro alla query precedente:

    | filter IP = '10.0.0.0/8'

    Nota: sostituisci 10.0.0.0/8 con il tuo indirizzo IP.

  9. (Facoltativo) Per trovare un bot con un valore user agent specifico, aggiungi il seguente filtro alla query precedente:

    | filter userAgent like 'user-agent value'

    Nota: sostituisci user-agent value con il tuo valore user agent.

  10. Per visualizzare l'intero messaggio del log, espandine le voci.

  11. Per trovare la regola che blocca le richieste del bot legittimo, cerca terminatingRuleId e ruleGroupList.x.terminatingRule.ruleId. Le etichette associate a questi campi mostrano il motivo per cui la richiesta è stata bloccata. Nell'esempio seguente, ruleGroupList.0.terminatingRule.ruleID è bloccato a causa di 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

Una richiesta può avere più etichette associate. Ai fini delle presenti istruzioni, sono rilevanti solo le richieste relative alle regole di blocco.

Imposta la regola di Rilevamento dei bot che blocca le richieste su Count (Conta)

Completa i seguenti passaggi:

  1. Apri la console AWS WAF.
  2. Nel pannello di navigazione, scegli AWS WAF.
  3. Scegli Resources & protection packs (Risorse e pacchetti di protezione).
  4. Individua il pacchetto di protezione e scegli View and edit (Visualizza e modifica) accanto a Rules (Regole).
  5. Nel pannello destro, seleziona il gruppo di regole AWSManagedRulesBotControlRuleSet.
  6. In Rule Overrides (Sostituzioni delle regole), modifica l'azione in Count (Conta) per la regola bloccante.
  7. Scegli Save Rule (Salva regola).

Nota: AWS WAF verifica e associa etichette alle richieste che corrispondono alla regola, ma non le blocca.

Crea una regola personalizzata per tutte le richieste corrispondenti ad eccezione del bot che desideri consentire

Per bloccare le richieste illegittime, crea una regola che abbini le etichette per consentire le richieste con caratteristiche specifiche e blocchi le altre. Ad esempio:

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

Nota: se la regola che blocca ha l'etichetta awswaf:managed:aws:bot-control:bot:category, Rilevamento dei bot associa un'altra etichetta al nome del bot. Puoi utilizzare questa etichetta associata al nome del bot per identificare i bot legittimi. Altrimenti utilizza l'intestazione user-agent per identificare i bot legittimi.

Per creare una regola personalizzata, completa i seguenti passaggi:

  1. Apri la console AWS WAF.
  2. Nel pannello di navigazione, scegli AWS WAF.
  3. Scegli Resources & protection packs (Risorse e pacchetti di protezione).
  4. Individua il pacchetto di protezione e scegli View and edit (Visualizza e modifica) accanto a Rules (Regole).
  5. Nel pannello destro, scegli Add rules (Aggiungi regole).
    Scegli Custom rule (Regola personalizzata) e seleziona Next (Avanti).
    Scegli nuovamente Custom rule (Regola personalizzata) e seleziona Next (Avanti).
  6. Aggiorna l'Azione della regola impostandola su BLOCK (BLOCCA).
  7. Inserisci il Rule name (Nome della regola).
  8. Per If a request (Se una richiesta), espandi l'elenco a discesa e scegli matches all the statements (AND) (corrisponde a tutte le istruzioni (AND)).
  9. In Statement 1 (Istruzione 1), completa quanto segue:
    Per Inspect (Ispeziona), scegli Has a label (Ha un'etichetta).
    Per Statement (Istruzione), scegli Label (Etichetta).
    Per Match key (Chiave corrispondenza), seleziona awswaf:managed:aws:bot-control:bot:category: category-name.
    Nota: sostituisci category-name con il nome della categoria della tua regola.
  10. In Statement 2 (Istruzione 2), completa quanto segue:
    Per Inspect (Ispeziona), scegli Has a label (Ha un'etichetta). Per Statement (Istruzione), scegli Label (Etichetta).
    Per Match key (Chiave corrispondenza), seleziona awswaf:managed:aws:bot-control:bot:name: bot-name.
    Nota: sostituisci bot-name con il nome del tuo bot.
    Espandi Rule configuration (Configurazione della regola) e, in Negate statement (NOT) (Istruzione negativa (NOT), scegli Negate statement results (Risultati dell'istruzione negativa).
  11. Scegli Create rule (Crea regola).
  12. Per impostare la priorità delle regole, fai clic su Edit Rule Order (Modifica ordine delle regole) nel pannello destro e trascina la regola sotto la regola di Rilevamento dei bot.
  13. Scegli Save Rule order (Salva l'ordine delle regole).

L'esempio seguente è una regola personalizzata che utilizza le etichette per consentire i bot legittimi e bloccare tutti gli altri bot:

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

Verifica che AWS WAF consenta il traffico di bot legittimi

Per verificare che AWS WAF consenta il traffico di bot legittimi, controlla nuovamente i log di AWS WAF. Se il bot è ancora bloccato, ripeti la procedura precedente con regole aggiuntive. A volte, più di una regola blocca il traffico legittimo. In questo caso, devi ripetere più volte la procedura precedente.

Informazioni correlate

Esempio di Rilevamento dei bot: consentire uno specifico bot bloccato

Esempio di Rilevamento dei bot: creazione di un'eccezione per un agente utente bloccato

Campi di log per il pacchetto di protezione o il traffico ACL web

Gestione del comportamento dei gruppi di regole

AWS UFFICIALEAggiornata un anno fa