IBM Cloud Docs
Arbeiten mit benutzerdefinierten WAF-Regeln

Arbeiten mit benutzerdefinierten WAF-Regeln

Die benutzerdefinierten WAF-Regeln bieten Leistung und Flexibilität, indem sie auf den HTTP-Datenverkehr abzielen und benutzerdefinierte Kriterien anwenden, um bestimmte Anfragen zu blockieren, abzulehnen, zu protokollieren oder zuzulassen.

Sie können viele Arten von benutzerdefinierten WAF-Regeln erstellen. Die Anzahl der aktiven Regeln auf Ihrer Website wird jedoch durch Ihren Kundenplan begrenzt. Weitere Informationen zu den Berechtigungen finden Sie unter "Vergleich der CIS-Pläne ".

Die Anzahl der aktiven Regeln pro Plan ist festgelegt. Derzeit können Sie keine aktiveren Regeln erwerben.

Bevor Sie beginnen, sollten Sie sich mit der Verwendung von Feldern, Funktionen und Ausdrücken vertraut machen.

Sie können eine benutzerdefinierte Regel über die Benutzeroberfläche, CLI, API oder Terraform erstellen, aktualisieren und löschen.

Arbeiten mit benutzerdefinierten WAF-Regeln in der Konsole

Erstellen einer benutzerdefinierten Regel in der Konsole

Gehen Sie folgendermaßen vor, um eine benutzerdefinierte Regel in der Konsole zu erstellen:

Benutzerdefinierte WAF-Regeln werden über die vorhandene Seite "Firewall-Regeln" konfiguriert. Alle zuvor in Ihrer Domain erstellten Legacy-Firewall-Regeln werden automatisch in benutzerdefinierte WAF-Regeln umgewandelt.

  1. Navigieren Sie zu Sicherheit > Firewallregeln.

  2. Klicken Sie auf Erstellen.

  3. Geben Sie eine optionale Beschreibung ein.

  4. Geben Sie optional eine Priorität ein, falls erforderlich. Eine Priorität von Null ist eine Null-Priorität und wird zuletzt ausgewertet.

  5. Verwenden Sie das Erstellungsprogramm für Benutzerschnittstellen im Abschnitt für Eingehende Anforderungen, um eine Bedingung hinzuzufügen. Klicken Sie zum Erstellen eines Ausdrucks mit mehreren Bedingungen auf eine der folgenden Optionen:

    • Und – um Bedingungen zu bewerten, die Logik verwenden
    • Oder- um Bedingungen oder Gruppen von zuvor und 'ed Bedingungen auszuwerten, die oder Logik verwenden

    Sie sehen beim Erstellen einer Bedingung, dass die Vorschau für Ausdrücke den Ausdruck in Klartext anzeigt.

    Sie können in der Vorschau für Ausdrücke klicken, um Ihren Ausdruck manuell und nicht mithilfe des visuellen Ausdruckserstellungsprogramms (Visual Expression Builder) zu bearbeiten, oder Sie können zwischen beiden wechseln. Je nach Komplexität kann ein manuell erstellter Ausdruck von Visual Expression Builder (visuelles Ausdruckserstellungsprogramm) möglicherweise nicht dargestellt werden.

  6. Wählen Sie eine Aktion aus dem Listenmenü Antwort aus.

  7. Wählen Sie die zum Speichern Ihrer Regel geeignetste Option aus, indem Sie auf eine der folgenden Optionen klicken:

    • Als Entwurf speichern: Die Regel wird gespeichert, aber sie bleibt inaktiviert.
    • Speichern und bereitstellen: Die Regel wird gespeichert und aktiviert.

Aktualisieren einer benutzerdefinierten Regel in der Konsole

Gehen Sie folgendermaßen vor, um eine vorhandene benutzerdefinierte Regel in der Konsole zu aktualisieren:

  1. Navigieren Sie zu Sicherheit > Firewallregeln.
  2. Suchen Sie in der Tabelle der Firewall-Regeln die Regel, die Sie ändern möchten, und klicken Sie dann auf das Menü Aktionen rechts neben der Zeile.
  3. Wählen Sie Bearbeiten aus.
  4. Nehmen Sie die gewünschten Änderungen an der Regel vor.
  5. Wählen Sie die zum Speichern Ihrer Regel geeignetste Option aus, indem Sie auf eine der folgenden Optionen klicken:
    • Als Entwurf speichern: Die Regel wird gespeichert, aber sie bleibt inaktiviert.
    • Speichern und bereitstellen: Die Regel wird gespeichert und aktiviert.

Wenn Sie eine Regel aus der Liste der vorhandenen Regeln anhalten oder aktivieren möchten, klicken Sie auf das Umschaltsteuerelement Aktiviert.

Löschen einer benutzerdefinierten Regel in der Konsole

Gehen Sie folgendermaßen vor, um eine vorhandene benutzerdefinierte Regel in der Konsole zu löschen:

  1. Navigieren Sie zu Sicherheit > Firewallregeln.
  2. Suchen Sie in der Tabelle der Firewall-Regeln die zu ändernde Regel und klicken Sie auf das Menü Aktionen rechts neben der Zeile.
  3. Wählen Sie Löschen aus.
  4. Bestätigen Sie das Löschen der Regel.

Arbeiten mit benutzerdefinierten WAF-Regeln über die CLI

Erstellen einer benutzerdefinierten Regel über die CLI

Gehen Sie folgendermaßen vor, um eine benutzerdefinierte Regel über die CLI zu erstellen:

  1. Konfigurieren Sie die Umgebung der Befehlszeilenschnittstelle.

  2. Melden Sie sich über die CLI bei Ihrem Konto an. Nachdem Sie das Kennwort eingegeben haben, fordert das System Sie auf, das Konto und die Region anzugeben, die Sie verwenden möchten:

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

    ibmcloud cis custom-waf rule-create DNS_DOMAIN_ID --match EXPRESSION --action ACTION [--description DESCRIPTION] [--enabled true|false] [-i, --instance INSTANCE] [--output FORMAT]
    
    
    
    

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

Where:

`DNS_DOMAIN_ID`
:   The ID of DNS domain.

`--match`
:   Specifies the conditions that must be matched for the rule to run. For match value, reference documentation `https://cloud.ibm.com/docs/cis?topic=cis-fields-and-expressions`

`--action`
:The rule action to perform. Valid values: "block", "challenge", "js_challenge", "managed_challenge", "log", "skip". For "block" and "skip" actions, use JSON file or JSON string instead.

`--enabled`
:  Indicates if the rule is active. Default is "false".

`--description`
:  A brief description of the rule.

`--json`
:  The JSON file or JSON string used to describe a custom rule.

- The required fields in JSON data are `expression`, `action`.

   `expression`: Specifies the conditions that must be matched for the rule to run.
   `action`: The rule action to perform. Valid values: "block", "challenge", "js_challenge", "managed_challenge", "log", "skip".

- The optional fields are `description`, `enabled`, `logging`, `action_parameters`.

   `action_parameters`: The rule action parameters.
     `ruleset`: Skip all remaining rules or one or more WAF managed rulesets. Valid value: `current`.
     `phases`: Skips WAF components for matching requests. Valid values: "http_ratelimit", "http_request_firewall_managed", "http_request_sbfm".
     `products`: Skips specific security products for matching requests. Valid values: "waf", "rateLimit", "securityLevel", "hot", "bic", "uaBlock", "zoneLockdown".
     `response`:  Define a custom response for 'block' action.
         `status_code`:  Choose an HTTP status code for the response, in the range 400-499.
         `content_type`: The content type of a custom response. Valid response types are :`text/html`,`text/plain`, `application/json`, `text/xml`.
         `content`: The response body.
   `description`: Briefly describes the rule.
   `enabled`: Indicates if the rule is active.
   `logging`: Log requests matching the skip rule. This field is only available for the "skip" action.
      - `enabled`: When disabled, matched requests don't appear in firewall events.

Sample JSON data:

      {
        "description": "test-custom-rule",
        "expression": "(http.cookie contains \"test\")",
        "action": "skip",
        "logging": {
                "enabled": true
            },
        "action_parameters": {
          "ruleset": "current",
            "phases": [
                    "http_ratelimit",
                    "http_request_firewall_managed",
                    "http_request_sbfm"
                ],
                "products": [
                    "waf",
                    "rateLimit",
                    "securityLevel",
                    "hot",
                    "bic",
                    "uaBlock",
                    "zoneLockdown"
                ]
        },
        "enabled": true
      }
`-i, --instance`
:   Instance name or ID. If not set, the context instance specified by `ibmcloud cis instance-set INSTANCE` is used.

`--output`
:   Specify output format, only `JSON` is supported.

### Updating a custom rule from the CLI {: #update-custom-rule-cli}

Run the following command to update a custom rule in the CLI:

```sh {: pre}
ibmcloud cis custom-waf rule-update DNS_DOMAIN_ID [--match EXPRESSION] [--action ACTION] [--description DESCRIPTION] [--enabled true|false] [-i, --instance INSTANCE] [--output FORMAT]


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

Dabei gilt:

DNS_DOMAIN_ID
Die ID der DNS-Domäne.
RULE_ID
Die ID der Regel.
--match
Gibt die Bedingungen an, die erfüllt sein müssen, damit die Regel ausgeführt wird. Für den Übereinstimmungswert siehe die Dokumentation https://cloud.ibm.com/docs/cis?topic=cis-fields-and-expressions.

--action :Die auszuführende Regelaktion. Gültige Werte: "block", "challenge", "js_challenge", "managed_challenge", "log", "skip" Für die Aktionen "block" und "skip" ist stattdessen eine JSON-Datei oder ein JSON-String zu verwenden.

--enabled

Gibt an, ob die Regel aktiv ist. Die Voreinstellung ist "false".

--description

Eine kurze Beschreibung der Regel.

--json

Die JSON-Datei oder die JSON-Zeichenfolge, die zur Beschreibung einer benutzerdefinierten Regel verwendet wird.

  • Die erforderlichen Felder in JSON-Daten sind expression, action.

    expression: Gibt die Bedingungen an, die erfüllt sein müssen, damit die Regel ausgeführt werden kann. action: Die auszuführende Regelaktion. Gültige Werte: "block", "challenge", "js_challenge", "managed_challenge", "log", "skip".

  • Die fakultativen Felder sind description, enabled, logging, action_parameters.

    action_parameters: Die Aktionsparameter der Regel. ruleset: Überspringen Sie alle verbleibenden Regeln oder einen oder mehrere verwaltete WAF-Regelsätze. Gültige Werte: current. phases: Überspringt WAF-Komponenten für Abgleichsanforderungen. Gültige Werte: "http_ratelimit", "http_request_firewall_managed", "http_request_sbfm". products: Überspringt bestimmte Sicherheitsprodukte für passende Anfragen. Gültige Werte: "waf", "rateLimit", "securityLevel", "hot", "bic", "uaBlock", "zoneLockdown". response: Definieren Sie eine benutzerdefinierte Antwort für die Aktion 'Blockieren'. status_code: Wählen Sie einen HTTP-Statuscode für die Antwort aus dem Bereich 400–499 aus. content_type: Der Inhaltstyp einer benutzerdefinierten Antwort. Gültige Antworttypen sind:text/html,text/plain, application/json, text/xml. content: Der Antwortkörper. description: Beschreibt kurz die Regel. enabled: Gibt an, ob die Regel aktiv ist. logging: Anforderungen protokollieren, die der Regel für Überspringen entsprechen. Dieses Feld ist nur für die Aktion "Überspringen" verfügbar.

    • enabled wenn diese Option deaktiviert ist, werden übereinstimmende Anfragen nicht in Firewall-Ereignissen angezeigt.

JSON-Beispieldaten:

    {
      "description": "test-custom-rule",
      "expression": "(http.cookie contains \"test\")",
      "action": "block",
      "action_parameters": {
        "response": {
        "status_code": 429,
        "content_type": "text/xml",
        "content": "reject"
        }
      },
      "enabled": true
    }
-i, --instance

Instanzname oder ID. Wenn diese Option nicht definiert ist, wird die durch ibmcloud cis instance-set INSTANCE angegebene Kontextinstanz verwendet.

--output

Geben Sie das Ausgabeformat an, nur JSON wird unterstützt.

Löschen einer benutzerdefinierten Regel über die CLI

Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Regel in der CLI zu löschen:

ibmcloud cis custom-waf rule-delete DNS_DOMAIN_ID RULE_ID [-f, --force] [-i, --instance INSTANCE] [--output FORMAT]

Dabei gilt:

DNS_DOMAIN_ID
Die ID der DNS-Domäne.
RULE_ID
Die ID der benutzerdefinierten Regel.
-i, --instance
Instanzname oder ID. Wenn diese Option nicht definiert ist, wird die durch ibmcloud cis instance-set INSTANCE angegebene Kontextinstanz verwendet.
-f, --force
Versucht, eine benutzerdefinierte Regel ohne Aufforderung zur Bestätigung zu löschen.
--output
Geben Sie das Ausgabeformat an, nur JSON wird unterstützt.

Befehlsbeispiele

  • So erstellen Sie eine benutzerdefinierte Regel:

    ibmcloud cis custom-waf rule-create 601b728b86e630c744c81740f72570c3 --action challenge --description "rule 1" --enabled true --match "(http.host eq \"www.example.com\")"

  • So aktualisieren Sie eine benutzerdefinierte Regel:

    ibmcloud cis custom-waf rule-update 601b728b86e630c744c81740f72570c3 4d37cb6f87654e96a18bc531628a4d27 --enabled true

  • So löschen Sie eine benutzerdefinierte Regel:

    ibmcloud cis custom-waf rule-delete 601b728b86e630c744c81740f72570c3 4d37cb6f87654e96a18bc531628a4d27

Arbeiten mit benutzerdefinierten WAF-Regeln mit der API

Abrufen des benutzerdefinierten Regel-Einstiegspunkts für die API

Alle API-Vorgänge für benutzerdefinierte Regeln erfordern eine RULESET_ID des Einstiegsregelsatzes für die Phase der benutzerdefinierten Regeln. Dieser Einstiegsregelsatz kann bereits existieren oder muss erstellt werden, wenn er nicht existiert.

Gehen Sie folgendermaßen vor, um den Regelsatz für den benutzerdefinierten Einstiegspunkt 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. Wenn alle Variablen initiiert sind, erhalten Sie den Einstiegspunkt-Regelsatz:

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

Die Regelsatz-ID wird in der Antwort auf die erfolgreiche Anfrage enthalten sein. Wenn der obige Aufruf eine 404 Not Found-Antwort zurückgibt, verwenden Sie die folgende API, um den Einstiegspunkt-Regelsatz für die benutzerdefinierte Regelphase 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 entry point",
  "kind": "zone",
  "description": "Custom rule entry point ruleset.",
  "phase": "http_request_firewall_custom"
}'

Erstellen einer benutzerdefinierten Regel mit der API

Gehen Sie folgendermaßen vor, um eine benutzerdefinierte Regel 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 benutzerdefinierten Einstiegspunkt.

  3. Wenn alle Variablen initiiert sind, erstellen Sie die benutzerdefinierte Regel:

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 custom rule with plain text response",
  "expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
  "action": "block",
  "action_parameters": {
    "response": {
      "status_code": 403,
      "content": "Your request was blocked.",
      "content_type": "text/plain"
    }
  }
}'

Aktualisieren einer benutzerdefinierten Regel mit der API

Gehen Sie folgendermaßen vor, um eine vorhandene benutzerdefinierte Regel 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 benutzerdefinierten Einstiegspunkt.

    RULE_ID: Die ID der zu ändernden benutzerdefinierten Regel.

  3. Wenn alle Variablen initiiert sind, aktualisieren Sie die benutzerdefinierte Regel:

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": false,
  "description": "block GB and FR or based on IP Reputation (temporarily disabled)"
}'

Löschen einer benutzerdefinierten Regel mit der API

Gehen Sie folgendermaßen vor, um eine vorhandene benutzerdefinierte Regel 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 benutzerdefinierten Einstiegspunkt.

    RULE_ID: Die ID der zu ändernden benutzerdefinierten Regel.

  3. Wenn alle Variablen initiiert sind, löschen Sie die benutzerdefinierte Regel:

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"

Arbeiten mit benutzerdefinierten WAF-Regeln mit Terraform

Erstellen einer benutzerdefinierten Regel mit Terraform

Das folgende Beispiel erstellt eine benutzerdefinierte Regel mit Terraform:

# First get the entrypoint ruleset ID for the phase `http_request_firewall_custom`.

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

# To create a custom rule:

  resource ibm_cis_ruleset_rule "config" {
    cis_id    = ibm_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"
      description = "var.description"
      expression = "true"
      enabled = "false"
      action_parameters {
        response {
          status_code = var.status_code
          content =  var.content
          content_type = "text/plain"
        }
      }
      position {
        index = var.index
        after = <id of any existing rule>
        before = <id of any existing rule>
      }
    }
  }

Für weitere Informationen über die Argumente und Attribute siehe ibm_cis_ruleset_rule in der Terraform-Registrierung.

Sie können eine benutzerdefinierte Regel mit Terraform aktualisieren, indem Sie das vorangegangene Beispiel für die Erstellung der benutzerdefinierten Regel abändern und den Befehl terraform apply ausführen. Um die Regel zu löschen, entfernen Sie einfach die Konfiguration und führen Sie terraform apply aus.