-
Notifications
You must be signed in to change notification settings - Fork 116
N1 waf signature sets release #1251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 18 commits
0b1006a
fd22e59
e6d2ca2
0b43b1a
77cf361
960b8f8
09f53a2
7768199
7fd62c0
39442b5
b6f6f36
1691ef3
3bfa92a
2903e3d
b57e50c
1b50a98
1bb9bfc
a742530
2f5bf2d
c984ea8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
--- | ||
title: "Add cookies" | ||
weight: 400 | ||
toc: true | ||
nd-content-type: how-to | ||
nd-product: NGINX One Console | ||
--- | ||
|
||
Cookies can be configured and managed directly within the policy editor by selecting the **Cookies** option. | ||
|
||
## Cookie Properties and Types | ||
Each cookie configuration includes: | ||
- `Cookie Type`: `Explicit` or `Wildcard`. For details on explicit and wildcard matching, see the [Matching Types: Explicit vs Wildcard]({{< ref "/nginx-one/nap-integration/waf-policy-matching-types.md" >}}) section. | ||
- `Cookie Name`: The name of the cookie to be monitored or protected | ||
- `Enforcement Type`: | ||
- **Allow**: Permits the cookie with optional attack signature checks | ||
|
||
- **Disallow**: Blocks the use of the cookie entirely | ||
|
||
- `Attack Signatures`: Indicates whether attack signatures and threat campaigns are enabled, disabled, or not applicable | ||
- `Mask Value in Logs`: When enabled, the cookie's value will be masked in the request log for enhanced security and privacy | ||
|
||
**⚠️ Important:** Attack Signatures are automatically set to "Not Applicable" when Enforcement Type is set to `Disallow` since the URL is explicitly blocked and signature checking is unnecessary. | ||
|
||
|
||
For a complete list of configurable cookie properties and options, see the [Cookie Configuration Parameters]({{< ref "/waf/policies/parameter-reference.md" >}}) documentation under the `cookies` section. | ||
|
||
## Cookie Violations | ||
Click on **Edit Configuration** to configure cookie violations. The following violations can be configured for cookies: | ||
|
||
- `VIOL_COOKIE_EXPIRED`: Triggered when a cookie's timestamp is expired | ||
- `VIOL_COOKIE_LENGTH`: Triggered when cookie length exceeds the configured limit | ||
- `VIOL_COOKIE_MALFORMED`: Triggered when cookies are not RFC-compliant | ||
- `VIOL_COOKIE_MODIFIED`: Triggered when domain cookies have been tampered with | ||
|
||
For each violation type, you can: | ||
- Set the enforcement action | ||
- Toggle `alarm` and `block` settings | ||
|
||
|
||
For more details about enforcement modes, see the [Glossary]({{< ref "/nginx-one/glossary.md#nginx-app-protect-waf-terminology" >}}), specifically the entry: **Enforcement mode**. | ||
|
||
See the [Supported Violations]({{< ref "/waf/policies/violations.md#supported-violations" >}}) for additional details. | ||
|
||
# Adding a Cookie to Your Policy | ||
|
||
1. Choose Cookie Type: | ||
- Select either `Explicit` for exact cookie matching or `Wildcard` for pattern-based matching | ||
|
||
1. Configure Basic Properties: | ||
- Enter the `Cookie Name` | ||
- Choose whether to mask the cookie value in logs | ||
|
||
1. Set Enforcement: | ||
- Choose whether to allow or disallow the cookie | ||
- If `Allow Cookie` is selected, you can optionally enable attack signatures | ||
- **⚠️ Important:** Attack signatures cannot be enabled for disallowed cookies. | ||
|
||
|
||
1. Optional: Configure Attack Signatures | ||
- If enabled, you can overwrite attack signatures for this specific cookie | ||
- For details on signature configuration, refer to the documentation on [Add Signature Sets]({{< ref "/nginx-one/nap-integration/add-signature-sets.md/" >}}) | ||
|
||
1. Select **Add Cookie** to save your configuration |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
--- | ||
title: "Add parameters" | ||
weight: 400 | ||
toc: true | ||
nd-content-type: how-to | ||
nd-product: NGINX One Console | ||
--- | ||
|
||
Parameters can be configured and managed directly within the policy editor by selecting the **Parameters** option. | ||
|
||
|
||
## Parameter Properties and Types | ||
Each parameter configuration includes: | ||
- `Parameter Type`: `Explicit` or `Wildcard`. For details on explicit and wildcard matching, see the [Matching Types: Explicit vs Wildcard]({{< ref "/nginx-one/nap-integration/waf-policy-matching-types.md" >}}) section. | ||
- `Name`: The name of the parameter | ||
|
||
- `Location`: Where the parameter is expected (URL query string, POST data, etc.) | ||
- `Value Type`: The expected type of the parameter value (e.g., alpha-numeric, integer, email) | ||
- `Attack Signatures`: Whether attack signature checking is enabled for this parameter | ||
- `Mask Value in Logs`: When enabled, the parameter's value will be masked in the request log for enhanced security and privacy | ||
|
||
|
||
For a complete list of configurable cookie properties and options, see the [Parameter Configuration Parameters]({{< ref "/waf/policies/parameter-reference.md" >}}) documentation under the `parameters` section. | ||
|
||
|
||
## Parameter Violations | ||
Select **Edit Configuration** to configure parameter violations. The following violations can be configured for parameters: | ||
|
||
- `VIOL_PARAMETER`: Triggered when an illegal parameter is detected | ||
- `VIOL_PARAMETER_ARRAY_VALUE`: Triggered when an array parameter value is illegal | ||
- `VIOL_PARAMETER_DATA_TYPE`: Triggered when parameter data type doesn't match configuration | ||
- `VIOL_PARAMETER_EMPTY_VALUE`: Triggered when a parameter value is empty but shouldn't be | ||
- `VIOL_PARAMETER_LOCATION`: Triggered when a parameter is found in wrong location | ||
- `VIOL_PARAMETER_NAME_METACHAR`: Triggered when illegal meta characters are found in parameter name | ||
- `VIOL_PARAMETER_NUMERIC_VALUE`: Triggered when numeric parameter value is outside allowed range | ||
- `VIOL_PARAMETER_REPEATED`: Triggered when a parameter name is repeated illegally | ||
- `VIOL_PARAMETER_STATIC_VALUE`: Triggered when a static parameter value doesn't match configuration | ||
- `VIOL_PARAMETER_VALUE_LENGTH`: Triggered when parameter value length exceeds limits | ||
- `VIOL_PARAMETER_VALUE_METACHAR`: Triggered when illegal meta characters are found in parameter value | ||
- `VIOL_PARAMETER_VALUE_REGEXP`: Triggered when parameter value doesn't match required pattern | ||
|
||
|
||
For each violation type, you can: | ||
- Set the enforcement action | ||
- Toggle `alarm` and `block` settings | ||
|
||
|
||
For more details about enforcement modes, see the [Glossary]({{< ref "/nginx-one/glossary.md#nginx-app-protect-waf-terminology" >}}), specifically the entry: **Enforcement mode**. | ||
|
||
See the [Supported Violations]({{< ref "/waf/policies/violations.md#supported-violations" >}}) for additional details. | ||
|
||
# Adding a Parameter to Your Policy | ||
|
||
1. Choose Parameter Type: | ||
- Select either `Explicit` for exact parameter matching or `Wildcard` for pattern-based matching | ||
|
||
1. Configure Basic Properties: | ||
- Enter the parameter `Name` | ||
|
||
- Select the `Location` where the parameter is expected | ||
- Choose the `Value Type` (alpha-numeric, integer, email, etc.) | ||
- Set the `Data Type` if applicable | ||
|
||
1. Set Security Options: | ||
- Choose whether to enable attack signatures | ||
|
||
- Decide if parameter value should be masked in logs which sets `sensitiveParameter` in [Parameter Configuration Reference]({{< ref "/waf/policies/parameter-reference.md" >}}) | ||
|
||
1. Optional: Configure Attack Signatures | ||
- If enabled, you can overwrite attack signatures for this specific parameter | ||
- For details on signature configuration, refer to the documentation on [Add Signature Sets]({{< ref "/nginx-one/nap-integration/add-signature-sets.md/" >}}) | ||
|
||
1. Select **Add Parameter** to save your configuration |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
--- | ||
title: "Add signature sets and exceptions" | ||
weight: 300 | ||
toc: true | ||
nd-content-type: how-to | ||
nd-product: NGINX One Console | ||
--- | ||
|
||
This document describes how you can configure signature sets and signature exceptions in F5 WAF for NGINX policies. When you add a policy, NGINX One Console provides options to customize attack signatures to better protect your applications. | ||
|
||
## Understanding signature sets and exceptions | ||
|
||
Attack signatures are rules or patterns that identify attack sequences or classes of attacks on a web application. F5 WAF for NGINX includes predefined attack signatures grouped into signature sets. | ||
|
||
### Signature set | ||
|
||
A **signature set** is a collection of attack signatures with a specific name and purpose. These sets are predefined and can be enabled or disabled in your policy. | ||
|
||
For example, you might have sets for SQL Injection Signatures, Cross-Site Scripting Signatures, or Buffer Overflow Signatures. | ||
|
||
### Signature exception | ||
|
||
A **signature exception** allows you to explicitly enable or disable individual attack signatures within a set. This gives you granular control over your policy. For example: | ||
- If a signature in a set causes false positives (blocking legitimate traffic), you can create an exception to disable just that signature while keeping the rest of the set active. | ||
- If you want to enable blocking for one specific attack signature rather than an entire set, you can create an exception to enable just that signature. | ||
|
||
## Add signature sets | ||
|
||
From NGINX One Console, select **App Protect > Policies**. In the screen that appears, select **Add Policy**. That action opens a screen where you can: | ||
|
||
1. In **General Settings**, name and describe the policy. | ||
1. Go to the **Web Protection** tab and select **Attack Signature Sets**. Here, you can: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: instead of the word |
||
- View all enabled attack signature sets, including the default ones | ||
- Add new signature sets | ||
- Modify existing signature sets | ||
|
||
### Configure signature sets | ||
|
||
For each signature set, you can configure: | ||
- **Alarm**: When enabled, matching requests are logged | ||
- **Block**: When enabled, matching requests are blocked | ||
|
||
For example, to configure Buffer Overflow Signatures to log but not block: | ||
|
||
```json | ||
{ | ||
"policy": { | ||
"name": "buffer_overflow_signature", | ||
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" }, | ||
"signature-sets": [ | ||
{ | ||
"name": "Buffer Overflow Signatures", | ||
"alarm": true, | ||
"block": false | ||
} | ||
] | ||
} | ||
} | ||
``` | ||
|
||
### Remove signature sets | ||
|
||
To remove a signature set from your policy, you have two options: | ||
|
||
1. Disable the set by setting both `alarm` and `block` to `false`: | ||
|
||
```json | ||
{ | ||
"policy": { | ||
"name": "no_xpath_policy", | ||
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" }, | ||
"signature-sets": [ | ||
{ | ||
"name": "XPath Injection Signatures", | ||
"block": false, | ||
"alarm": false | ||
} | ||
] | ||
} | ||
} | ||
``` | ||
|
||
1. Use the `$action` meta-property to delete the set (preferred for better performance): | ||
|
||
```json | ||
{ | ||
"policy": { | ||
"name": "no_xpath_policy", | ||
"template": { "name": "POLICY_TEMPLATE_NGINX_BASE" }, | ||
"signature-sets": [ | ||
{ | ||
"name": "XPath Injection Signatures", | ||
"$action": "delete" | ||
} | ||
] | ||
} | ||
} | ||
``` | ||
|
||
## Add signature exceptions | ||
|
||
From the **Web Protection** tab, select **Attack Signature Exceptions**. This section allows you to override settings for individual signatures. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: same thing here. I'd suggest |
||
|
||
1. Click **Add Item** to create a new exception. | ||
1. Select the signature(s) you want to modify. | ||
1. Configure the exception. For example, to disable a specific signature: | ||
|
||
```json | ||
{ | ||
"signatures": [ | ||
{ | ||
"name": "_mem_bin access", | ||
"enabled": false, | ||
"signatureId": 200100022 | ||
} | ||
] | ||
} | ||
``` | ||
|
||
### Advanced exception configuration | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd suggest removing this entire |
||
|
||
For more complex scenarios, you can use the `modifications` section: | ||
|
||
```json | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Non-blocking formatting: As you can see from previous lines, if you include indentation, the format is nicer. |
||
{ | ||
"modifications": [ | ||
{ | ||
"entityChanges": { | ||
"enabled": false | ||
}, | ||
"entity": { | ||
"signatureId": 200001834 | ||
}, | ||
"entityType": "signature", | ||
"action": "add-or-update" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
To exclude multiple signatures, add each as a separate entity: | ||
|
||
```json | ||
{ | ||
"modifications": [ | ||
{ | ||
"entityChanges": { | ||
"enabled": false | ||
}, | ||
"entity": { | ||
"signatureId": 200001834 | ||
}, | ||
"entityType": "signature", | ||
"action": "add-or-update" | ||
}, | ||
{ | ||
"entityChanges": { | ||
"enabled": false | ||
}, | ||
"entity": { | ||
"signatureId": 200004461 | ||
}, | ||
"entityType": "signature", | ||
"action": "add-or-update" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
## Save and deploy your policy | ||
|
||
After configuring signature sets and exceptions: | ||
|
||
1. Select **Save Policy**. The policy JSON will be updated with your changes. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: the steps outlined here start by creating a new policy. The CTA text when creating a new policy is "Add Policy". The CTA text is "Save Policy" when editing an existing policy. |
||
1. Your policy will appear in the list under the name you provided. | ||
1. You can then [deploy]({{< ref "/nginx-one/nap-integration/deploy-policy.md/" >}}) the policy to either: | ||
- An instance | ||
- A Config Sync Group | ||
|
||
From NGINX One Console, you can [review and modify]({{< ref "/nginx-one/nap-integration/review-policy.md/" >}}) your saved policies at any time by selecting **App Protect > Policies**. | ||
|
||
For a complete list of available signature sets and detailed information about attack signatures, see the [Attack Signatures]({{< ref "/waf/policies/attack-signatures.md" >}}) documentation. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
--- | ||
title: "Add urls" | ||
weight: 400 | ||
toc: true | ||
nd-content-type: how-to | ||
nd-product: NGINX One Console | ||
--- | ||
|
||
URLs can be configured and managed directly within the policy editor by selecting the **URLs** option. | ||
|
||
|
||
## URL Properties and Types | ||
Each URL configuration includes: | ||
- `URL Type`: `Explicit` or `Wildcard`. For details on explicit and wildcard matching, see the [Matching Types: Explicit vs Wildcard]({{< ref "/nginx-one/nap-integration/waf-policy-matching-types.md" >}}) section. | ||
- `Method`: Specifies which HTTP methods are allowed (`GET`, `POST`, `PUT`, etc.) | ||
|
||
- `Protocol`: The protocol for the URL (`HTTP`/`HTTPS`) | ||
- `Enforcement Type`: | ||
- **Allow**: Permits access to the URL with optional attack signature checks | ||
- **Disallow**: Blocks access to the URL entirely | ||
- `Attack Signatures`: Indicates whether attack signatures and threat campaigns are enabled, disabled, or not applicable | ||
|
||
**⚠️ Important:** Attack Signatures are automatically set to "Not Applicable" when Enforcement Type is set to `Disallow` since the URL is explicitly blocked and signature checking is unnecessary. | ||
|
||
|
||
For a complete list of configurable URL properties and options, see the [URL Configuration Parameters]({{< ref "/waf/policies/parameter-reference.md" >}}) documentation under the `urls` section. | ||
|
||
## URL Violations | ||
Select **Edit Configuration** to configure URL violations. The following violations can be configured for URLs: | ||
|
||
- `VIOL_URL`: Triggered when an illegal URL is accessed | ||
- `VIOL_URL_CONTENT_TYPE`: Triggered when there's an illegal request content type | ||
- `VIOL_URL_LENGTH`: Triggered when URL length exceeds the configured limit | ||
- `VIOL_URL_METACHAR`: Triggered when illegal meta characters are found in the URL | ||
|
||
For each violation type, you can: | ||
- Set the enforcement action | ||
- Toggle `alarm` and `block` settings | ||
|
||
|
||
For more details about enforcement modes, see the [Glossary]({{< ref "/nginx-one/glossary.md#nginx-app-protect-waf-terminology" >}}), specifically the entry: **Enforcement mode**. | ||
|
||
See the [Supported Violations]({{< ref "/waf/policies/violations.md#supported-violations" >}}) for additional details. | ||
|
||
# Adding a URL to Your Policy | ||
|
||
1. Choose URL Type: | ||
- Select either `Explicit` for exact URL matching or `Wildcard` for pattern-based matching | ||
|
||
1. Configure Basic Properties: | ||
- Enter the `URL` path | ||
|
||
- Select allowed `Method(s)` (e.g., `GET`, `POST`, *) | ||
|
||
- Choose the `Protocol` (`HTTP`/`HTTPS`) | ||
|
||
1. Set Enforcement: | ||
- Choose whether to allow or disallow the URL | ||
- If `Allow URL` is selected, you can optionally enable attack signatures | ||
- **⚠️ Important:** Attack signatures cannot be enabled for disallowed URLs. | ||
|
||
1. **Optional**: Configure Attack Signatures | ||
- If enabled, you can overwrite attack signatures for this specific URL | ||
- For details on signature configuration, refer to the documentation on [Add Signature Sets]({{< ref "/nginx-one/nap-integration/add-signature-sets.md/" >}}) | ||
|
||
1. Select **Add URL** to save your configuration |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be more accurate to say "Cookie protections can be configured..."