Direkt zum Inhalt

Wie lasse ich Anfragen von einem Bot zu, der von einer AWS WAF Bot Control-Regelgruppe blockiert wird?

Lesedauer: 7 Minute
0

Ich möchte Anfragen von einem legitimen Bot zulassen, der von einer AWS WAF Bot Control-Regelgruppe blockiert wird.

Lösung

Gehe wie folgt vor, um Anfragen von einem legitimen Bot zuzulassen, der von einer Bot-Control-Regelgruppe blockiert wurde.

Hinweis: Die AWS WAF Bot Control-Regelgruppe verwendet IP-Adressen von AWS WAF, um Bots zu verifizieren. Einige verifizierte Bots leiten über einen Proxy oder ein CDN weiter, das die Client-IP-Adresse nicht beibehält, wenn Anfragen weitergeleitet werden. Wenn der Bot auf diese Weise weiterleitet, musst du diesen Bot ausdrücklich zulassen.

Die Bot-Control-Regel identifizieren, die die Anfragen aus den AWS-WAF-Protokollen blockiert

Analysiere die AWS-WAF-Protokolle, um die Regel zu identifizieren, die die legitime Bot-Anfrage blockiert. Verwende eine Amazon Athena-Abfrage oder Amazon CloudWatch Log-Insights.

Eine Athena-Abfrage verwenden, um AWS-WAF-Protokolle zu analysieren

Führe die folgenden Schritte aus:

  1. Verwende die Partitionsprojektion, um eine Tabelle für AWS-WAF-Protokolle in Athena zu erstellen.
  2. Führe die folgende Athena-Abfrage aus, um die Details der blockierten Anfrage zu finden:
    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
    Hinweis: Ersetze waf_logs durch den Tabellennamen, waf_data durch den Datenbanknamen, time > now() - interval '3' day durch den Zeitraum und pingdom% durch den Bot-Namen.
    Zum Beispiel Athena-Abfragen, die Datensätze für einen bestimmten Zeitraum filtern, findest du unter Abfragen von AWS-WAF-Protokollen.
  3. Überprüfe die Spalte matchedRule, um die Regel zu identifizieren, die legitime Bot-Anfragen blockiert. Das Folgende ist die Beispielausgabe der Athena-Abfrage aus Schritt 2:
    #: 1
    timestamp: 2024-04-10 15:11:18.000
    Aktion**:** BLOCKIEREN
    **terminatingRuleId:**AWS-AWSManagedRulesBotControlRuleSet
    matchedRule: CategoryMonitoring
    UserAgent: Mozilla/5.0 (X11; Linux x86\ _64) AppleWebKit/537.36 (KHTML, wie 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: falsch
    Client-IP: 192.0.2.0
    Land: USA
    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}]
    Hinweis: Die Athena-Abfrageausgabe wird als Tabelle angezeigt.

Eine CloudWatch Log Insights-Abfrage verwenden

Führe die folgenden Schritte aus:

  1. Öffne die CloudWatch-Konsole.

  2. Wähle im Navigationsbereich Protokolle und dann Protokoll-Insights.

  3. Öffne unter Protokoll-Insights das Drop-down Auswahlkriterien,

  4. Wähle eine oder mehrere Protokollgruppen für die Abfrage aus oder wähle Protokollgruppen durchsuchen.

  5. Wähle deine Protokollgruppen aus.

  6. (Optional) Wähle einen Zeitraum für die Abfrage.

  7. Füge die folgende Abfrage in den Abfrage-Editor ein.

    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. (Optional) Um einen Bot mit einer bestimmten IP-Adresse zu finden, füge der vorherigen Abfrage den folgenden Filter hinzu:

    | filter IP = '10.0.0.0/8'

    Hinweis: Ersetze 10.0.0.0/8 durch die IP-Adresse.

  9. (Optional) Um einen Bot mit einem bestimmten User-Agent-Wert zu finden, füge der vorherigen Abfrage den folgenden Filter hinzu:

    | filter userAgent like 'user-agent value'

    Hinweis: Ersetze den Wert „user-agent“ durch den User-Agent-Wert.

  10. Um die gesamte Protokollmeldung zu sehen, erweitere die Protokolleinträge.

  11. Um die Regel zu finden, die legitime Bot-Anfragen blockiert, suche nach terminatingRuleId und ruleGroupList.x.terminatingRule.ruleId. Die an diese Felder angehängten Label geben den Grund an, warum die Anfrage blockiert wurde. Im folgenden Beispiel ist ruleGroupList.0.terminatingRule.ruleID aufgrund von CategoryMonitoring blockiert:

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

Einer Anfrage können mehrere Labels beigefügt sein. Für die Zwecke dieser Anweisungen sind nur die Anfragen relevant, die sich auf Blockregeln beziehen.

Die Bot Control-Regel einstellen, die das Zählen der Anfragen blockiert

Führe die folgenden Schritte aus:

  1. Öffne die AWS-WAF-Konsole.
  2. Wähle im Navigationsbereich AWS WAF.
  3. Wähle Ressourcen und Schutzpakete.
  4. Suche das Schutzpaket und wähle neben Regeln die Option Anzeigen und Bearbeiten.
  5. Wähle im rechten Bereich die Regelgruppe AWSManagedRulesBotControlRuleSet aus.
  6. Ändere unter Regelüberschreibungen die Aktion für die Regel, die blockiert, in Zählen.
  7. Wähle Regel speichern.

Hinweis: AWS WAF verifiziert Anfragen, die der Regel entsprechen und fügt Bezeichnungen an, blockiert sie jedoch nicht.

Eine benutzerdefinierte Regel für alle übereinstimmenden Anfragen außer dem Bot erstellen, den du zulassen möchtest

Um unzulässige Anfragen zu blockieren, erstelle eine Regel, die Bezeichnungen abgleicht, um Anfragen mit bestimmten Merkmalen zuzulassen und andere Anfragen zu blockieren. Zum Beispiel:

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

Hinweis: Wenn die Regel, die blockiert, das Label awswaf:managed:aws:bot-control:bot:category hat, fügt Bot Control dem Bot-Namen ein weiteres Label hinzu. Du kannst dieses Bot-Namens-Label verwenden, um legitime Bots zu identifizieren. Verwende andernfalls den User-Agent-Header, um legitime Bots zu identifizieren.

Gehe wie folgt vor, um eine benutzerdefinierte Regel zu erstellen:

  1. Öffne die AWS-WAF-Konsole.
  2. Wähle im Navigationsbereich AWS WAF.
  3. Wähle Ressourcen und Schutzpakete.
  4. Suche das Schutzpaket und wähle neben Regeln die Option Anzeigen und Bearbeiten.
  5. Wähle im rechten Bereich Regeln hinzufügen.
    Wähle Benutzerdefinierte Regel und dann Weiter aus.
    Wähle erneut Benutzerdefinierte Regel und wähle dann Weiter aus.
  6. Aktualisiere die Regel Aktion zu BLOCKIEREN.
  7. Gib den Regelnamen ein.
  8. Erweitere für Wenn eine Anfrage das Drop-down-Menü und wähle Entspricht allen Anweisungen (UND).
  9. Fülle in Anweisung 1 Folgendes aus:
    Wählen für Prüfen Hat ein Label.
    Wähle für Anweisung die Option Label.
    Wähle für abgleichschlüssel awswaf:managed:aws:bot-control:bot:category: category-name aus.
    Hinweis: Ersetze category-name durch den Namen der Regelkategorie.
  10. Fülle in Anweisung 2 die folgenden Angaben aus:
    Wähle Untersuchen Hat ein Label. Wähle für Anweisung die Option Label.
    Wähle für Abgleichschlüssel awswaf:managed:aws:bot-control:bot:name: bot-name aus.
    Hinweis: Ersetze bot-name durch den Bot-Namen.
    Erweitere die Regelkonfiguration und wähle unter Anweisung negieren (NICHT) die Option Anweisungsergebnisse negieren.
  11. Wähle Regel erstellen.
  12. Um die Regelpriorität festzulegen, klicke im rechten Bereich auf Regelreihenfolge bearbeiten und ziehe die Regel unter die Bot Controll-Regel.
  13. Wähle Regelreihenfolge speichern.

Das folgende Beispiel ist eine benutzerdefinierte Regel, die Labels verwendet, um Bots legitime Bots zuzulassen und alle anderen Bots zu blockieren:

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

Sicherstellen, dass AWS WAF legitimen Bot-Datenverkehr zulässt

Um zu überprüfen, ob AWS WAF legitimen Bot-Track zulässt, überprüfe erneut die AWS-WAF-Protokolle. Wenn der Bot immer noch blockiert ist, wiederhole den vorherigen Vorgang mit zusätzlichen Regeln. Manchmal blockiert mehr als eine Regel legitimen Datenverkehr. In diesem Fall musst du den vorherigen Vorgang mehrmals wiederholen.

Ähnliche Informationen

Beispiel für Bot Control: Einen bestimmten blockierten Bot zulassen

Beispiel für Bot Control: Eine Ausnahme für einen blockierten User-Agent erstellen

Protokollfelder für Schutzpaket- oder Web-ACL-Datenverkehr

Verwaltung des Verhaltens von Regelgruppen

AWS OFFICIALAktualisiert vor 8 Monaten