Arbeiten mit benutzerdefinierten WAF-Regeln
Benutzerdefinierte WAF-Regeln bieten Leistungsfähigkeit und Flexibilität, da sie den Datenverkehr unter HTTP gezielt überwachen und anhand benutzerdefinierter Kriterien bestimmte Anfragen blockieren, überprüfen, protokollieren oder zulassen.
Sie können viele verschiedene Arten von benutzerdefinierten WAF-Regeln erstellen. Die Anzahl der aktiven Regeln auf Ihrer Website wird jedoch durch Ihren Kundenplan begrenzt. Weitere Informationen zu Ansprüchen finden Sie unter CIS im Vergleich.
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 mithilfe der Konsole, der CLI, der API oder Terraform erstellen, aktualisieren und löschen.
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 Seite mit den bestehenden Firewall-Regeln konfiguriert. Alle zuvor in Ihrer Domain erstellten Legacy-Firewall-Regeln werden automatisch in benutzerdefinierte WAF-Regeln umgewandelt.
-
Navigieren Sie in der Konsole CIS zum Bereich Sicherheit.
-
Wählen Sie die Registerkarte „ Benutzerdefinierte Regeln “ aus und klicken Sie anschließend auf „ Erstellen “.
-
Geben Sie eine optionale Beschreibung ein.
-
Geben Sie optional eine Priorität ein, falls erforderlich. Eine Priorität von Null entspricht einer Nullpriorität und wird als Letztes ausgewertet.
-
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 – zur Auswertung von Bedingungen oder Gruppen von zuvor mit „und“ verknüpften Bedingungen, die 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.
-
Wählen Sie eine Aktion aus dem Listenmenü Antwort aus.
-
Wählen Sie die zum Speichern Ihrer Regel geeignetste Option aus, indem Sie auf eine der folgenden Optionen klicken:
- Als Entwurf speichern um Ihre Regel zu speichern, sie aber deaktiviert zu lassen.
- 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:
- Navigieren Sie in der Konsole CIS zum Bereich Sicherheit.
- Wählen Sie die Registerkarte „ Benutzerdefinierte Regeln “ aus.
- Suchen Sie in der Tabelle „Benutzerdefinierte Regeln“ die Regel, die Sie bearbeiten möchten, und klicken Sie dann auf das Menü „Aktionen“ rechts neben der Zeile.
- Wählen Sie Bearbeiten aus.
- Nehmen Sie die gewünschten Änderungen an der Regel vor.
- Wählen Sie die zum Speichern Ihrer Regel geeignetste Option aus, indem Sie auf eine der folgenden Optionen klicken:
- Als Entwurf speichern um Ihre Regel zu speichern, sie aber deaktiviert zu lassen.
- 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:
- Navigieren Sie in der Konsole CIS zum Bereich Sicherheit.
- Suchen Sie in der Tabelle „Benutzerdefinierte Regeln“ die zu löschende Regel und klicken Sie auf das Menü „Aktionen“ rechts neben der Zeile.
- Wählen Sie im Aktionsmenü die Option „Löschen“ aus.
- Klicken Sie auf Benutzerdefinierte WAF-Regel löschen, um die Regel zu löschen.
Erstellen einer benutzerdefinierten Regel über die CLI
Gehen Sie folgendermaßen vor, um eine benutzerdefinierte Regel über die CLI zu erstellen:
-
Konfigurieren Sie die Umgebung der Befehlszeilenschnittstelle.
-
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 -
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]Sie können auch eine benutzerdefinierte Regel erstellen, indem Sie eine JSON-Datei oder einen JSON-String direkt bereitstellen:
ibmcloud cis custom-waf 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.
--match-
Gibt die Bedingungen an, die erfüllt sein müssen, damit die Regel ausgeführt wird. Für den Abgleichswert, siehe Verwendung von Feldern, Funktionen und Ausdrücken.
--action-
Die auszuführende Regelaktion. Gültige Werte: "block", "challenge", "js_challenge", "managed_challenge", "log", "skip". Verwenden Sie für die Aktionen „Blockieren“ und „Überspringen“ stattdessen eine JSON-Datei oder einen JSON-String.
--enabled-
Gibt an, ob die Regel aktiv ist. Die Standardeinstellung ist "false".
--description-
Eine kurze Beschreibung der Regel.
--json-
Die JSON-Datei oder der JSON-String, der zur Beschreibung einer benutzerdefinierten Regel verwendet wird.
-
Die Pflichtfelder in den JSON-Daten sind „
expression“ und „action“.expression: Legt die Bedingungen fest, die erfüllt sein müssen, damit die Regel ausgeführt wird.action: Die auszuführende Regelaktion. Gültige Werte sindblock,challenge,js_challenge,managed_challenge,log, undskip.
-
Die optionalen Felder sind
description,enabled,loggingundaction_parameters.action_parameters: Die Aktionsparameter der Regel.rulesetüberspringen aller verbleibenden Regeln oder eines oder mehrerer WAF-verwalteter Regelsätze. Ein gültiger Wert ist „current“.phases: Überspringt WAF-Komponenten bei entsprechenden Anfragen. Gültige Werte sindhttp_ratelimit,http_request_firewall_managed, undhttp_request_sbfm.productsüberspringt bestimmte Sicherheitsprodukte für passende Anfragen. Gültige Werte sindwaf,rateLimit,securityLevel,hot,bic,uaBlock, undzoneLockdown.response: Definieren Sie eine benutzerdefinierte Antwort für die Aktion „block“.status_code: Wählen Sie für die Antwort einen „ HTTP “-Statuscode aus dem Bereich „400-499“ aus.content_typeder Inhaltstyp einer benutzerdefinierten Antwort. Gültige Antworttypen sind:text/html,text/plain,application/json,text/xml.content: Der Antworttext.
description: Beschreibt kurz die Regel.enabled: Gibt an, ob die Regel aktiv ist oder nicht. Wenn dieses Feld deaktiviert ist, werden übereinstimmende Anfragen nicht in Firewall-Anfragen angezeigt.logging: Protokolliere Anfragen, die der Überspringregel entsprechen. Dieses Feld ist nur für die Aktion 'Überspringen' verfügbar.
-
JSON-Beispieldaten:
{
"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- 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.
Aktualisieren einer benutzerdefinierten Regel über die CLI
Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Regel über die CLI zu aktualisieren:
ibmcloud cis custom-waf rule-update DNS_DOMAIN_ID [--match EXPRESSION] [--action ACTION] [--description DESCRIPTION] [--enabled true|false] [-i, --instance INSTANCE] [--output FORMAT]
Sie können eine benutzerdefinierte Regel auch aktualisieren, indem Sie eine JSON-Datei oder einen JSON-String direkt bereitstellen:
ibmcloud cis custom-waf rule-update DNS_DOMAIN_ID (--json @JSON_FILE | JSON_STRING) [-i, --instance INSTANCE] [--output FORMAT]
Befehlsoptionen
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 Abgleichswert, siehe Verwendung von Feldern, Funktionen und Ausdrücken.
--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. Der Standardwert ist 'false'.
--description-
Eine kurze Beschreibung der Regel.
--json-
Die JSON-Datei oder der JSON-String, der zur Beschreibung einer benutzerdefinierten Regel verwendet wird.
-
Die Pflichtfelder in den JSON-Daten sind „
expression“ und „action“.expression: Legt die Bedingungen fest, die erfüllt sein müssen, damit die Regel ausgeführt wird.action: Die auszuführende Regelaktion. Gültige Werte sindblock,challenge,js_challenge,managed_challenge,log, undskip.
-
Die optionalen Felder sind
description,enabled,loggingundaction_parameters.action_parameters: Die Aktionsparameter der Regel.rulesetüberspringen aller verbleibenden Regeln oder eines oder mehrerer WAF-verwalteter Regelsätze. Ein gültiger Wert istcurrentphases: Überspringt WAF-Komponenten bei entsprechenden Anfragen. Gültige Werte sindhttp_ratelimit,http_request_firewall_managed, undhttp_request_sbfm.productsüberspringt bestimmte Sicherheitsprodukte für passende Anfragen. Gültige Werte sindwaf,rateLimit,securityLevel,hot,bic,uaBlock, undzoneLockdown.response: Definieren Sie eine benutzerdefinierte Reaktion für die Aktion „blockieren“.status_code: Wählen Sie für die Antwort einen „ HTTP “-Statuscode aus dem Bereich „400-499“ aus.content_typeder Inhaltstyp einer benutzerdefinierten Antwort. Gültige Antworttypen sindtext/html,text/plain,application/json, undtext/xml.content: Der Antworttext.
description: Beschreibt kurz die Regel.enabled: Gibt an, ob die Regel aktiv ist oder nicht. Wenn dieses Feld deaktiviert ist, werden übereinstimmende Anfragen nicht in Firewall-Anfragen angezeigt.logging: Protokolliere Anfragen, die der Überspringregel entsprechen. Dieses Feld ist nur für die Aktion 'Überspringen' verfügbar.
-
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 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.
Löschen einer benutzerdefinierten Regel über die CLI
Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Regel über die CLI zu löschen:
ibmcloud cis custom-waf rule-delete DNS_DOMAIN_ID RULE_ID [-f, --force] [-i, --instance INSTANCE] [--output FORMAT]
Befehlsoptionen
DNS_DOMAIN_ID- Die ID der DNS-Domäne.
RULE_ID- Die ID der benutzerdefinierten Regel.
-i, --instance- Instanzname oder ID. Wenn dieser Wert nicht festgelegt ist, wird die durch „
ibmcloud cis instance-set INSTANCE“ angegebene Kontextinstanz verwendet. -f, --force- Versuch, eine benutzerdefinierte Regel zu löschen, ohne eine Bestätigung anzufordern.
--output- Geben Sie das Ausgabeformat an; es wird ausschließlich „
JSON“ 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
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.
Gehen Sie folgendermaßen vor, um den Regelsatz für den benutzerdefinierten Einstiegspunkt zu erhalten:
- Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.
- 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.
-
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 befindet sich in der Antwort auf die erfolgreiche Anfrage. Wenn der vorhergehende Aufruf eine Antwort 404 Not Found zurückgibt, verwenden Sie die folgende API, um den Einstiegsregelsatz 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 über die API
Gehen Sie folgendermaßen vor, um eine benutzerdefinierte Regel mit der API zu erstellen:
- Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.
- 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.
-
Sobald alle Variablen initialisiert 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:
- Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.
- 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.
-
Wenn alle Variablen initialisiert 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:
- Richten Sie Ihre API-Umgebung mit den richtigen Variablen ein.
- 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.
-
Wenn alle Variablen initialisiert 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"
Erstellen einer benutzerdefinierten Regel mit Terraform
Um eine benutzerdefinierte Regel zu erstellen, müssen Sie zunächst einen Einstiegspunkt und dann die benutzerdefinierte Regel erstellen. Führen Sie hierzu die folgenden Schritte aus:
-
Führen Sie den folgenden Befehl aus, um einen Einstiegspunkt-Regelsatz zu erstellen:
resource "ibm_cis_ruleset_entrypoint_version" "test" { cis_id = "<cis-id>" domain_id = "<domain-id>" phase = "http_request_firewall_custom" rulesets { description = "Entry point ruleset for custom ruleset" } lifecycle { ignore_changes = [ rulesets ] } } -
Um eine benutzerdefinierte Regel zu erstellen, führen Sie den folgenden Befehl aus:
resource ibm_cis_ruleset_rule "config" { cis_id = ibm_cis.instance.id domain_id = data.ibm_cis_domain.cis_domain.domain_id ruleset_id = resource.ibm_cis_ruleset_entrypoint_version.rulesets[0].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> } } }
Das folgende Beispiel zeigt, wie Sie einen Einstiegspunkt und eine benutzerdefinierte WAF-Regel 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_request_firewall_custom"
rulesets {
description = "Entrypoint ruleset for custom ruleset"
}
lifecycle {
ignore_changes = [
rulesets
]
}
}
data ibm_cis_ruleset_entrypoint_versions custom_rule_ep {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
phase = "http_request_firewall_custom"
depends_on = [
ibm_cis_ruleset_entrypoint_version.test
]
}
resource ibm_cis_ruleset_rule "custom_rule1" {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.custom_rule_ep.rulesets[0].ruleset_id
rule {
action = "skip"
description = "adding custom rule via terraform"
expression = "true"
enabled = "true"
action_parameters{
ruleset = "current"
phases = ["http_ratelimit", "http_request_sbfm","http_request_firewall_managed"]
products = ["zoneLockdown","uaBlock", "bic", "hot", "securityLevel", "rateLimit","waf"]
}
}
}
resource ibm_cis_ruleset_rule "custom_rule2" {
cis_id = ibm_cis.instance.id
domain_id = data.ibm_cis_domain.cis_domain.domain_id
ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.custom_rule_ep.rulesets[0].ruleset_id
rule {
action = "block"
description = "adding custom rule via terraform2"
expression = "(http.request.uri.path eq \"/path1\")"
enabled = "false"
}
}
Für weitere Informationen siehe ibm_cis_ruleset_rule in der Terraform-Registrierung.
Sie können eine benutzerdefinierte Regel mit Terraform aktualisieren, indem Sie das vorangegangene Beispiel 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.