Drosselung konfigurieren

Die vorherige Version der Regeln zur Ratenbegrenzung ist veraltet. Aktive Regeln aus der vorherigen Version funktionieren nicht mehr.

Drosselungen (nur Enterprise-Plan) schützen vor Denial-of-Service-Angriffen, Brute-Force-Anmeldeversuchen und anderen Arten missbräuchlichen Verhaltens, das auf die Anwendungsebene zielt.

Erstellen einer benutzerdefinierten Regel zur Ratenbegrenzung in der Konsole

Um eine benutzerdefinierte Regel zur Ratenbegrenzung zu erstellen, führen Sie die folgenden Schritte aus:

  1. Navigieren Sie in der „ Cloud Internet Services (CIS) “-Konsole zu „ Sicherheit > Ratenbegrenzung “ und klicken Sie anschließend auf „ Regel erstellen “.
  2. Geben Sie einen Namen für die Regel ein.
  3. Definieren Sie die Übereinstimmungsbedingung für die Regel:
    1. Wählen Sie ein Anfragefeld aus (z. B. URI-Pfad, HTTP-Methode oder Header).
    2. Wählen Sie einen Operator aus (z. B. „ist gleich“, „enthält“ oder „stimmt überein“).
    3. Geben Sie einen Wert ein oder wählen Sie einen aus.
    4. Optional: Verwenden Sie den Ausdrucksgenerator, um einen benutzerdefinierten Ausdruck für eine komplexere Abgleichlogik zu erstellen.
    5. Optional: Kombinieren Sie mehrere Bedingungen mithilfe der Operatoren „Und“ und „Oder“, um zusammengesetzte Regeln zu erstellen.
    6. Optional: Deaktivieren Sie den Cache-Status, wenn die Regel zur Ratenbegrenzung nur Anfragen berücksichtigen soll, die den Ursprungsserver erreichen. Standardmäßig werden zwischengespeicherte Anfragen in die Ratenberechnung einbezogen.
  4. Wählen Sie unter „Mit denselben Merkmalen“ das Merkmal aus, anhand dessen „ Cloud Internet Services (CIS) “ übereinstimmende Anfragen identifiziert. Zu den gängigen Optionen gehören die IP-Adresse, die IP-Adresse mit NAT-Unterstützung, die Sitzung, Header, Cookies, Abfrageparameter oder der Fingerabdruck von „ JA3 “.
  5. Optional: So definieren Sie einen benutzerdefinierten Zählausdruck:
    1. Aktivieren Sie die Option „ Benutzerdefinierten Zählausdruck verwenden “.
    2. Geben Sie den Zählausdruck ein. Standardmäßig stimmt der Zählausdruck mit dem Regelausdruck überein. Mit einem benutzerdefinierten Zählausdruck können Sie Anfragen anders zählen, als sie abgeglichen werden.
  6. Wenn die Rate überschritten wird, konfigurieren Sie den Schwellenwert für die Anforderung:
    1. Geben Sie die maximal zulässige Anzahl von Anfragen ein.
    2. Wählen Sie den Zeitraum aus, den „ Cloud Internet Services (CIS) “ zur Auswertung der Anfragerate heranzieht (z. B. 10 Sekunden, 1 Minute oder 1 Stunde).
  7. Wählen Sie unter „ Dann Maßnahme ergreifen “ die Maßnahme aus, die bei Überschreitung des Schwellenwerts angewendet werden soll. Zu den Optionen gehören „Blockieren“ (Anfragen ablehnen), „Challenge“ (eine CAPTCHA anzeigen), „JS Challenge“ (eine JavaScript-Challenge anzeigen), „Protokollieren“ (ohne weitere Aktion protokollieren) oder „Managed Challenge“ (eine geeignete Challenge basierend auf den Client-Merkmalen anzeigen). Wählt man beispielsweise „Block“ aus, weist „ Cloud Internet Services (CIS) “ Anfragen zurück, die das konfigurierte Ratenlimit überschreiten.
  8. Wählen Sie unter „ Mit folgendem Verhalten “ das entsprechende Abhilfeverhalten aus:
    1. Wählen Sie ein Zeitlimit für die Abhilfemaßnahme aus, um Anfragen für einen bestimmten Zeitraum nach Überschreiten des Schwellenwerts zu blockieren (z. B. 1 Minute, 10 Minuten oder 1 Stunde).
    2. Unternehmenskunden mit dem Add-on zur Ratenbegrenzung können die Option „Anfragen über der konfigurierten Höchstrate drosseln“ auswählen, um Anfragen zu begrenzen, anstatt die konfigurierte Aktion anzuwenden.
  9. Wählen Sie unter „An Ort“ die Reihenfolge der Regeln aus. Regeln werden der Reihe nach ausgewertet; platzieren Sie daher spezifischere Regeln vor allgemeinen Regeln.
  10. Klicken Sie auf Bereitstellen.

Die Rate-Limiting-Regel wurde erstellt und bereitgestellt. Die Regel tritt sofort in Kraft und beginnt, den Datenverkehr gemäß Ihrer Konfiguration zu überwachen.

Aktualisieren einer Regel zur Ratenbegrenzung in der Konsole

Um eine Regel zur Ratenbegrenzung zu aktualisieren, führen Sie die folgenden Schritte aus:

  1. Navigieren Sie in der „ Cloud Internet Services (CIS) “-Konsole zu „Sicherheit“ > „ Ratenbegrenzung “.
  2. Suchen Sie in der Tabelle mit den Regeln zur Ratenbegrenzung die Regel, die Sie ändern möchten.
  3. Klicken Sie rechts neben der Zeile auf das Menü „Aktionen“ und wählen Sie dann „Bearbeiten“ aus.
  4. Passen Sie die Regeleinstellungen nach Bedarf an.
  5. Klicken Sie auf „Speichern“, um die Regel zu aktualisieren.

Eine Regel zur Ratenbegrenzung in der Konsole löschen

Um eine Regel zur Ratenbegrenzung in der Konsole zu löschen, gehen Sie wie folgt vor:

  1. Navigieren Sie in der „ Cloud Internet Services (CIS) “-Konsole zu „Sicherheit“ > „ Ratenbegrenzung “.
  2. Suchen Sie in der Tabelle mit den Regeln zur Ratenbegrenzung die Regel, die Sie löschen möchten.
  3. Klicken Sie auf das Menü „Aktionen“ der Regel und wählen Sie anschließend „Löschen“ aus.
  4. Überprüfen Sie die Bestätigungsmeldung und klicken Sie zur Bestätigung auf „ Löschen “.

Antwort konfigurieren

Wählen Sie aus den aufgelisteten Aktionen aus und geben Sie das Zeitlimitintervall an. In diesem Fall bezieht sich das Zeitlimit ausschließen auf den Zeitraum, in dem die Aktion ausgeführt wird. Eine Zeitüberschreitung von 60 Sekunden bedeutet, dass die Aktion 60 Sekunden lang angewendet wird.

Maßnahmen zur Ratenbegrenzung
Aktion Beschreibung
Block Gibt den Fehler 429 aus, wenn der Schwellenwert überschritten wird.
Prüffrage Der Benutzer muss eine reCAPTCHA-Prüfung unter Google bestehen, bevor er fortfahren kann. Bei Erfolg wird die Anfrage angenommen. Andernfalls wird die Anforderung blockiert.
JS-Abfrage Der Benutzer muss eine „ JavaScript “-Prüfung bestehen, bevor er fortfahren kann. Bei Erfolg wird die Anfrage angenommen. Andernfalls wird die Anforderung blockiert.
Simulieren Sie könne diese Option zum Testen Ihrer Regel verwenden, bevor Sie sie auf andere Optionen in Ihrer Liveumgebung anwenden.

Abrufen des Eintrittspunkts für die Rate-Limiting-Regel für die API

Alle API-Operationen für Regeln zur Ratenbegrenzung erfordern einen RULESET_ID des Einstiegspunkt-Regelsatzes für die Phase der Regeln zur Ratenbegrenzung. Dieser Einstiegspunkt-Regelsatz ist möglicherweise bereits vorhanden oder muss gegebenenfalls angelegt werden, falls er noch nicht existiert.

Befolgen Sie diese Schritte, um den Regelsatz für den Einstiegspunkt der Ratenbegrenzungsregel zu erhalten:

  1. Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.

  2. Speichern Sie die folgenden Werte in Variablen, damit diese im API-Befehl verwendet werden können:

    CRN: Der vollständige URL-kodierte Cloud Resource Name (CRN) der Dienstinstanz.

    ZONE_ID: Die Domänen-ID.

  3. Sobald alle Variablen initialisiert sind, rufe den Einstiegs-Regelsatz ab:

    curl -X GET "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"
    

    Die Regelsatz-ID befindet sich in der Antwort auf die erfolgreiche Anfrage. Wenn der vorangegangene Aufruf eine Antwort 404 Not Found zurückgibt, verwenden Sie die folgende API, um den Einstiegsregelsatz für die Phase der Ratenbegrenzungsregel zu erstellen:

    curl -x POST https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "name": "Zone-level phase entrypoint",
      "kind": "zone",
      "description": "Rate-limting rule entrypoint ruleset.",
      "phase": "http_ratelimit"
    }'
    

Erstellen einer Regel zur Ratenbegrenzung über die API

Gehen Sie folgendermaßen vor, um eine Ratenbegrenzungsregel mit der API zu erstellen:

  1. Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.

  2. Speichern Sie die folgenden Werte in Variablen, damit diese im API-Befehl verwendet werden können:

    CRN: Der vollständige URL-kodierte Cloud Resource Name (CRN) der Dienstinstanz.

    ZONE_ID: Die Domänen-ID.

    RULESET_ID: Die ID des Regelsatzes für den Einstiegspunkt der Ratenbegrenzungsregel.

  3. Wenn alle Variablen initialisiert sind, erstellen Sie die Regel zur Begrenzung der Rate:

    curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "description": "My rate limiting rule",
      "expression": "(http.request.uri.path matches \"^/api/\")",
      "action": "block",
      "ratelimit": {
        "characteristics": [
          "cf.colo.id",
          "ip.src"
        ],
        "period": 60,
        "requests_per_period": 100,
        "mitigation_timeout": 600
      }
    }'
    

Aktualisieren einer Ratenbegrenzungsregel mit der API

Gehen Sie folgendermaßen vor, um eine vorhandene Ratenbegrenzungsregel mit der API zu aktualisieren:

  1. Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.

  2. Speichern Sie die folgenden Werte in Variablen, damit diese im API-Befehl verwendet werden können:

    CRN: Der vollständige URL-kodierte Cloud Resource Name (CRN) der Dienstinstanz.

    ZONE_ID: Die Domänen-ID.

    RULESET_ID: Die ID des Regelsatzes für den Einstiegspunkt der Ratenbegrenzungsregel.

    RULE_ID: Die ID der zu ändernden Ratenbegrenzungsregel.

  3. Sobald alle Variablen initialisiert sind, aktualisieren Sie die Regel zur Begrenzung der Rate:

    curl -X PATCH "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "enabled": true,
      "description": "rate limit IPs for API"
    }'
    

Löschen einer Ratenbegrenzungsregel mit der API

Gehen Sie folgendermaßen vor, um eine vorhandene Ratenbegrenzungsregel mit der API zu löschen:

  1. Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.

  2. Speichern Sie die folgenden Werte in Variablen, damit diese im API-Befehl verwendet werden können:

    CRN: Der vollständige URL-kodierte Cloud Resource Name (CRN) der Dienstinstanz.

    ZONE_ID: Die Domänen-ID.

    RULESET_ID: Die ID des Regelsatzes für den Einstiegspunkt der Ratenbegrenzungsregel.

    RULE_ID: Die ID der zu ändernden Ratenbegrenzungsregel.

  3. Wenn alle Variablen initialisiert sind, lösche die Regel zur Begrenzung der Rate:

    curl -X DELETE "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"
    

Überprüfung der Ratenbegrenzungsregeln und der Konsistenz der Antworten mit Hilfe von HTTP status

Wenn Sie Regeln zur Ratenbegrenzung auf eine Webadresse oder einen Dienst anwenden, müssen Sie sicherstellen, dass die Regeln korrekt durchgesetzt werden. Ein einfacher Test bestätigt, dass das System mit den folgenden entsprechenden HTTP Statuscodes antwortet:

  • 200 OK oder 404 Not Found für erlaubte Anfragen
  • 429 Too Many Requests bei Überschreitung der Tarifgrenzen.

Führen Sie den folgenden Befehl aus, um die Regeln zur Ratenbegrenzung und die Konsistenz der Antworten zu überprüfen:

for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done

Befehlsoptionen

N
Anzahl der Anfragen, die Sie senden möchten.
your-target-url
URL des Dienstes oder Endpunkts, den Sie testen möchten.

Dieser Befehl gibt den Statuscode HTTP für jede Anfrage aus und ermöglicht es Ihnen zu beobachten, wann der Schwellenwert für die Übertragungsrate erreicht ist.

Erstellen einer Regel zur Ratenbegrenzung über die CLI

Um über die CLI eine Regel zur Ratenbegrenzung zu erstellen, führen Sie die folgenden Schritte aus:

  1. Konfigurieren Sie die Umgebung der Befehlszeilenschnittstelle.

  2. Melden Sie sich über die Befehlszeilenschnittstelle bei Ihrem Konto an. Nachdem Sie das Passwort eingegeben haben, werden Sie aufgefordert, das Konto und die Region anzugeben, die Sie verwenden möchten:

    ibmcloud login --sso
    
  3. Führen Sie den folgenden Befehl aus, um eine Regel zur Ratenbegrenzung zu erstellen:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID --url URL [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]
    

    Sie können eine Regel zur Ratenbegrenzung auch erstellen, indem Sie eine JSON-Datei oder einen JSON-String direkt angeben:

    ibmcloud cis ratelimit-rule-create DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
    

Befehlsoptionen

DNS_DOMAIN_ID
Die ID der DNS-Domäne. Erforderlich.
--json
Die JSON-Datei oder der JSON-String, der zur Beschreibung einer Regel zur Ratenbegrenzung verwendet wird.
  • Die Pflichtfelder in den JSON-Daten sind „ match “, „ threshold “, „ period “ und „ action “:
    • match: Legt fest, welcher Datenverkehr bei der Berechnung des Schwellenwerts durch die Regel zur Ratenbegrenzung berücksichtigt wird.
      • request: Entspricht den Suchanfragen „ HTTP “.
        • methods: HTTP Methoden, die entweder eine Teilmenge von [POST,PUT] oder alle von [_ALL_] sein können. Dieses Feld ist nicht zum Erstellen einer Drosselungsregel erforderlich. Gültige Werte sind GET, POST, PUT, DELETE, PATCH, HEAD, _ALL_.
        • schemes: HTTP Schemes, kann eines sein [HTTPS], beide [HTTP,HTTPS] oder alle [_ALL_]. Dieses Feld ist nicht erforderlich.
        • url: Das Muster „ URL “, das aus dem Host und dem Pfad besteht, zum Beispiel example.org/path. Platzhalterzeichen werden auf den zutreffenden Datenverkehr erweitert, Abfragezeichenfolgen werden nicht abgeglichen. Verwenden Sie * für den gesamten Datenverkehr in Ihrer Zone. Die maximale Länge beträgt 1024.
      • response: Passt auf „ HTTP “-Antworten, bevor diese an den Client zurückgesendet werden. Wenn diese Option definiert ist, dann erfolgt die gesamte Zählung des Verkehrs in dieser Phase.
        • status: HTTP Statuscodes; es kann sich um einen einzelnen Wert handeln ( [403]), um mehrere Werte ( [401,403] ) oder um alle Werte, wenn dieser Wert nicht angegeben wird. Dieses Feld ist nicht erforderlich. Der Minimalwert lautet 100 und der Maximalwert 999.
        • headers: Array der zu suchenden Antwort-Header. Wenn eine Antwort die Header-Kriterien nicht erfüllt, wird die Anfrage nicht auf die Rate-Limiting-Regel angerechnet. Die Kriterien für den Abgleich der Kopfzeilen umfassen die folgenden Eigenschaften.
          • name: Der Name des Antwort-Headers, der abgeglichen werden soll.
          • op: Der Operator beim Abgleich; „eq“ bedeutet „gleich“, „ne“ bedeutet „ungleich“. Gültige Werte sind eq und ne.
          • value: Der Wert des Headers, der exakt übereinstimmt.
    • threshold: Der Schwellenwert, ab dem die Maßnahmen zur Begrenzung der Zugriffsrate ausgelöst werden; dieser ist mit einem Zeitraum verknüpft. Zum Beispiel der Schwellenwert pro Zeitraum. Der Minimalwert lautet 2 und der Maximalwert 1000000.
    • period: Die Zeit in Sekunden, die benötigt wird, um den übereinstimmenden Datenverkehr zu zählen. Wenn der Wert innerhalb dieses Zeitraums den Schwellenwert überschreitet, wird die Aktion ausgeführt. Der Minimalwert lautet 10 und der Maximalwert 86400.
    • action: Die Aktion, die ausgeführt wird, wenn der Schwellenwert für den übereinstimmenden Datenverkehr innerhalb des festgelegten Zeitraums überschritten wird.
      • mode: Die Art der durchgeführten Aktion. Gültige Werte sind: simulate, ban, challenge, js_challenge.
      • timeout: Die Zeit in Sekunden (als Ganzzahl), innerhalb derer die Abhilfemaßnahme durchgeführt werden soll. Die Auszeit kann genauso lang oder länger als die Spielzeit sein. Dieses Feld ist nur gültig, wenn der Modus „ simulate “ oder „ ban “ ist. Der Minimalwert lautet 10 und der Maximalwert 86400.
      • response: Benutzerdefinierter Inhaltstyp und Textkörper, die zurückgegeben werden sollen. Dadurch wird der angepasste Fehler für die Zone überschrieben. Dieses Feld ist nicht erforderlich. Wird dieses Feld nicht angegeben, ist das Ergebnis die HTML-Standardfehlerseite. Dieses Feld ist nur gültig, wenn für 'mode' der Wert simulate oder ban angegeben ist.
        • content_type: Der Content-Type des Hauptteils, der einer der folgenden sein muss: text/plain, text/xml, application/json.
        • body: Der Körper soll zurückgebracht werden. Der Inhalt muss dem Inhaltstyp (content_type) entsprechen. Die maximale Länge beträgt 10240.
  • Die optionalen Felder sind id, disabled, description, correlate und bypass:
    • id: Kennung der geschwindigkeitsbegrenzenden Regel.
    • disabled: Ob diese Regel zur Ratenbegrenzung derzeit deaktiviert ist.
    • description: Eine Anmerkung, mit der Sie den Grund für eine Regel zur Ratenbegrenzung beschreiben können.
    • correlate: Ob die NAT-basierte Ratenbegrenzung aktiviert werden soll.
      • by: Ein gültiger Wert ist „ nat “.
    • bypass: Kriterien, unter denen die Ratenbegrenzung umgangen werden kann. Um beispielsweise anzugeben, dass für eine Reihe von URLs kein Ratenlimit gelten soll.
      • name: Ein gültiger Wert ist „ url “.
      • value: Die URL, die umgangen werden soll.

JSON-Beispieldaten:

{
   "id": "92f17202ed8bd63d69a66b86a49a8f6b",
   "disabled": false,
   "description": "Prevent multiple login failures to mitigate brute force attacks",
   "bypass": [
      {
         "name": "url",
         "value": "api.example.com/*"
      }
   ],
   "threshold": 60,
   "period": 900,
   "correlate": {
      "by": "nat"
   },
   "action": [
      {
         "mode": "simulate",
         "timeout": 86400,
         "response": {
            "content_type": "text/plain",
            "body": "<error>This request has been rate-limited.</error>"
         }
      }
   ],
   "match": {
      "request": {
               "methods": [
                  "GET"
               ],
               "schemes": [
                  "HTTP",
                  "HTTPS"
               ],
               "url": "*.example.org/path*"
      },
      "response": {
         "status": [
               403, 401
         ],
         "headers": [
            {
               "name": "Cf-Cache-Status",
               "op": "eq",
               "value": "HIT"
            }
         ]
      }
   }
}
-i, --instance
Instanzname oder ID. Wenn kein Instanzname oder keine Instanz-ID festgelegt ist, wird die Kontextinstanz verwendet, die durch „ ibmcloud cis instance-set INSTANCE “ angegeben wird.
--output
Das Ausgabeformat. Derzeit ist „ json “ der einzige unterstützte Wert.

Aktualisieren einer Rate-Limiting-Regel über die CLI

Führen Sie den folgenden Befehl aus, um eine Regel zur Ratenbegrenzung über die CLI zu aktualisieren:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID [--url URL] [--description DESCRIPTION] [--threshold NUM] [--period SECONDS] [...]

Sie können eine Regel zur Ratenbegrenzung auch aktualisieren, indem Sie eine JSON-Datei oder eine JSON-Zeichenkette direkt angeben:

ibmcloud cis ratelimit-rule-update DNS_DOMAIN_ID RATELIMIT_RULE_ID  (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]

Befehlsoptionen

DNS_DOMAIN_ID
Die ID der DNS-Domäne. Erforderlich.
RATELIMIT_RULE_ID
Die ID der Regel zur Begrenzung der Übertragungsrate. Erforderlich.
--json
Die JSON-Datei oder der JSON-String, der zur Beschreibung einer Regel zur Ratenbegrenzung verwendet wird.
  • Die Pflichtfelder in den JSON-Daten sind „ match “, „ threshold “, „ period “ und „ action “:
    • match: Legt fest, welcher Datenverkehr bei der Berechnung des Schwellenwerts durch die Regel zur Ratenbegrenzung berücksichtigt wird.
      • request: Entspricht den Suchanfragen „ HTTP “.
        • methods: HTTP Methoden, die entweder eine Teilmenge von [POST,PUT] oder alle von [ALL] sein können. Dieses Feld ist nicht zum Erstellen einer Drosselungsregel erforderlich. Gültige Werte sind GET, POST, PUT, DELETE, PATCH, HEAD, ALL.
        • schemes: HTTP Schemes, kann eines sein [HTTPS], beide [HTTP,HTTPS] oder alle [_ALL_]. Dieses Feld ist nicht erforderlich.
        • url: Das zu vergleichende Muster „ URL “ bestand aus dem Host und dem Pfad, zum Beispiel example.org/path. Platzhalterzeichen werden auf den zutreffenden Datenverkehr erweitert, Abfragezeichenfolgen werden nicht abgeglichen. Verwenden Sie * für den gesamten Datenverkehr in Ihrer Zone. Die maximale Länge beträgt 1024.
      • response: Passt auf „ HTTP “-Antworten, bevor diese an den Client zurückgesendet werden. Wenn dieses Feld definiert ist, erfolgt die gesamte Verkehrszählung in dieser Phase.
        • status: HTTP Statuscodes; es kann sich um einen einzelnen Wert handeln ( [403]), um mehrere Werte ( [401,403] ) oder um alle Werte, wenn dieser Wert nicht angegeben wird. Dieses Feld ist nicht erforderlich. Der Minimalwert lautet 100 und der Maximalwert 999.
        • headers: Array der zu suchenden Antwort-Header. Wenn eine Antwort die Header-Kriterien nicht erfüllt, wird die Anfrage nicht auf die Rate-Limiting-Regel angerechnet. Zu den verschiedenen Kriterien für den Abgleich von Kopfzeilen gehören die folgenden Eigenschaften.
          • name: Der Name des Antwort-Headers, der abgeglichen werden soll.
          • op: Der Operator beim Abgleich; „eq“ bedeutet „gleich“, „ne“ bedeutet „ungleich“. Gültige Werte sind eq und ne.
          • value: Der Wert des Headers, der exakt übereinstimmt.
    • threshold: Der Schwellenwert, ab dem die Maßnahmen zur Begrenzung der Zugriffsrate ausgelöst werden; dieser wird mit dem Zeitraum kombiniert. Zum Beispiel der Schwellenwert pro Zeitraum. Der Minimalwert lautet 2 und der Maximalwert 1000000.
    • period: Die Zeit in Sekunden, die benötigt wird, um den übereinstimmenden Datenverkehr zu zählen. Wenn der Zählwert innerhalb dieses Zeitraums den Schwellenwert überschreitet, wird die Aktion ausgeführt. Der Minimalwert lautet 1 und der Maximalwert 3600.
    • action: Die Aktion wird ausgeführt, wenn der Schwellenwert für den übereinstimmenden Datenverkehr innerhalb des festgelegten Zeitraums überschritten wird.
      • mode: Die Art der durchgeführten Aktion. Gültige Werte sind simulate, ban, challenge und js_challenge.
      • timeout: Die Zeit in Sekunden (als Ganzzahl) für die Durchführung der Abhilfemaßnahme. Die Auszeit ist genauso lang oder länger als die Spielzeit. Dieses Feld ist nur gültig, wenn für 'mode' der Wert simulate oder ban angegeben ist. Der Minimalwert lautet 10 und der Maximalwert 86400.
      • response: Benutzerdefinierter Inhaltstyp und Textkörper, die zurückgegeben werden sollen. Dadurch wird der angepasste Fehler für die Zone überschrieben. Dieses Feld ist nicht erforderlich. Wird dieses Feld nicht angegeben, ist das Ergebnis die HTML-Standardfehlerseite. Dieses Feld ist nur gültig, wenn für 'mode' der Wert simulate oder ban angegeben ist.
        • content_type: Der Content-Type des Hauptteils, der einer der folgenden sein muss: text/plain, text/xml, application/json.
        • body: Der Körper soll zurückgebracht werden. Der Inhalt muss dem Inhaltstyp (content_type) entsprechen. Die maximale Länge beträgt 10240.
  • Die optionalen Felder sind disabled, description, correlate und bypass:
    • disabled: Ob diese Regel zur Ratenbegrenzung derzeit deaktiviert ist.
    • description: Eine Anmerkung, mit der Sie den Grund für eine Regel zur Ratenbegrenzung beschreiben können.
    • correlate: Ob die NAT-basierte Ratenbegrenzung aktiviert werden soll.
      • by: Ein gültiger Wert ist „ nat “.
    • bypass: Kriterien, unter denen die Ratenbegrenzung umgangen werden kann. Um beispielsweise anzugeben, dass für eine Reihe von URLs kein Ratenlimit gelten soll.
      • name: Ein gültiger Wert ist „ url “.
      • value: Die URL, die umgangen werden soll.

JSON-Beispieldaten:

{
   "disabled": false,
   "description": "Prevent multiple login failures to mitigate brute force attacks",
   "bypass": [
      {
         "name": "url",
         "value": "api.example.com/*"
      }
   ],
   "threshold": 60,
   "period": 900,
   "correlate": {
      "by": "nat"
   },
   "action": [
      {
         "mode": "simulate",
         "timeout": 86400,
         "response": {
            "content_type": "text/plain",
            "body": "<error>This request has been rate-limited.</error>"
         }
      }
   ],
   "match": {
      "request": {
               "methods": [
                  "GET"
               ],
               "schemes": [
                  "HTTP",
                  "HTTPS"
               ],
               "url": "*.example.org/path*"
      },
      "response": {
         "status": [
               403, 401
         ],
         "headers": [
            {
               "name": "Cf-Cache-Status",
               "op": "eq",
               "value": "HIT"
            }
         ]
      }
   }
}
-i, --instance
Instanzname oder ID. Wenn dieser Wert nicht festgelegt ist, wird die durch „ ibmcloud cis instance-set INSTANCE “ angegebene Kontextinstanz verwendet.
--output
Geben Sie das Ausgabeformat an; es wird ausschließlich „ JSON “ unterstützt.

Eine Regel zur Ratenbegrenzung über die CLI löschen

Führen Sie den folgenden Befehl aus, um eine Regel zur Ratenbegrenzung über die CLI zu löschen:

ibmcloud cis ratelimit-rule-delete DNS_DOMAIN_ID RATELIMIT_RULE_ID [--instance INSTANCE]

Befehlsoptionen

DNS_DOMAIN_ID
Die ID der DNS-Domäne. Erforderlich.
RATELIMIT_RULE_ID
Die ID der Rate-Limit-Regel. Erforderlich.
-i, --instance
Instanzname oder ID. Wenn dieser Wert nicht festgelegt ist, wird die durch „ ibmcloud cis instance-set INSTANCE “ angegebene Kontextinstanz verwendet.

Weitere Informationen finden Sie unter „ CLI-Ratenbegrenzung “.

Erstellen einer benutzerdefinierten Regel zur Ratenbegrenzung mit Terraform

Um einen Regelkatalog für die Ratenbegrenzung zu erstellen, müssen Sie zunächst einen Einstiegspunkt erstellen und anschließend den Regelkatalog für die Ratenbegrenzung erstellen. Führen Sie hierzu die folgenden Schritte aus:

  1. Um einen Eintritts-Regelsatz zu erstellen, führen Sie den folgenden Befehl aus:

    resource "ibm_cis_ruleset_entrypoint_version" "config" {
      cis_id    = data.ibm_cis.cis_instance.id
      domain_id = data.ibm_cis_domain.cis_domain.domain_id
      phase     = "http_ratelimit"
    
      rulesets {
        description = "Zone rate limit entrypoint"
      }
      lifecycle {
        ignore_changes = [
          rulesets
        ]
      }
    }
    

    Verwenden Sie einen lifecycle Block, um zu verhindern, dass Terraform den Entrypoint-Regelsatz aktualisiert. Einige Einstiegsparameter werden bei jedem terraform apply aktualisiert, was zu unbeabsichtigten Konfigurationsänderungen führen kann. Der lifecycle Block hilft Ihnen, diese Aktualisierungen zu ignorieren und die Stabilität der Ressourcen aufrechtzuerhalten.

  2. Um einen Regelsatz zur Ratenbegrenzung zu erstellen, führen Sie den folgenden Befehl aus:

    resource "ibm_cis_ruleset_rule" "config" {
      cis_id     = data.ibm_cis.cis_instance.id
      domain_id  = data.ibm_cis_domain.cis_domain.domain_id
      ruleset_id = "data.ibm_cis_ruleset_entrypoint_versions.ruleset_id"
      rule {
        action      = "block"
        enabled     = true
        description = "Block IPs making over 100 requests/minute to /api/"
        expression  = "(http.request.uri.path matches \"^/api/\")"
        ratelimit {
          characteristics     = ["cf.colo.id", "ip.src"]
          period              = 60
          requests_per_period = 100
          mitigation_timeout  = 300
        }
      }
    }
    

Das folgende Beispiel zeigt, wie Sie mit Terraform einen Einstiegspunkt und eine Regel zur Ratenbegrenzung erstellen:

resource ibm_cis_ruleset_entrypoint_version test {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  phase = "http_ratelimit"
  rulesets {
      description = "Entrypoint ruleset for ratelimit ruleset"
    }
    lifecycle {
      ignore_changes = [
        rulesets
      ]
  }
}

data ibm_cis_ruleset_entrypoint_versions test {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  phase = "http_ratelimit"
   depends_on = [
    ibm_cis_ruleset_entrypoint_version.ratelimit_ep
  ]
}

resource "ibm_cis_ruleset_rule" "ratelimit_rule_1" {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.ratelimit_data.rulesets[0].ruleset_id

    rule {
      action      = "block"
      description = "Block IPs making over 100 requests/minute to /api/"
      enabled     = true
      expression  = "(http.request.uri.path matches \"^/api/\")"

      rate_limit {
      characteristics     = ["cf.colo.id","ip.src"]
      mitigation_timeout  = 300
      period              = 120
      requests_per_period = 100
      }
    }
  }