-
Notifications
You must be signed in to change notification settings - Fork 151
N1C WAF Security Dashboard Release #1834
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
Open
sylwang
wants to merge
13
commits into
main
Choose a base branch
from
n1c-waf-dashboard-release
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 7 commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
e6f9369
N1C WAF Security Dashboard Release
sylwang 3806295
add changelog
sylwang 2da665f
update reference links
sylwang 10ad819
Apply suggestions from code review
sylwang 8d182e5
consolidate security dashboard section
sylwang a5851ee
rewrite to follow templates and expand coverage
vrmare dd939d8
fix call-out note
vrmare 7c557d1
renamed for clarity
vrmare 23766af
Apply review feedback from the WAF security monitoring docs walkthrough
vrmare e51026a
addressed more reeview comments
vrmare af39012
addressed more reeview comments
vrmare f77bf17
moved waf api to automation docs
vrmare 363e107
final one.json
vrmare File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
content/nginx-one-console/waf-integration/waf-security-dashboard/_index.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| --- | ||
| title: F5 WAF for NGINX security monitoring | ||
| description: Monitor F5 WAF for NGINX security events in NGINX One Console. | ||
| weight: 425 | ||
| url: /nginx-one-console/waf-integration/waf-security-dashboard | ||
| --- | ||
|
|
||
| Use the security monitoring module in NGINX One Console to collect, visualize, and query security events from F5 WAF for NGINX instances. Review attacks, violations, and triggered signatures to assess threats and fine-tune your policies. | ||
|
|
||
| This section covers: | ||
|
|
||
| - [Security monitoring overview]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/security-monitoring-overview.md" >}}) — what the security dashboard is, the data pipeline behind it, and what you can do with it. | ||
| - [Default log profile]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/default-log-profile.md" >}}) — the immutable, pre-compiled log profile the dashboard depends on. | ||
| - [Set up security monitoring]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/set-up-security-monitoring.md" >}}) — install F5 WAF for NGINX, configure the log profile, and forward events through NGINX Agent. | ||
| - [Security dashboard reference]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/dashboard-metrics-reference.md" >}}) — dashboard tabs, global controls, and how each widget maps to an underlying dimension. | ||
| - [Find a security event by Support ID]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/find-event-by-support-id.md" >}}) — look up a single security event by its Support ID for quick triage. | ||
| - [Query security events through the API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}) — list events and run analytics queries programmatically. | ||
184 changes: 184 additions & 0 deletions
184
...e-console/waf-integration/waf-security-dashboard/dashboard-metrics-reference.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,184 @@ | ||
| --- | ||
| nd-content-type: reference | ||
| nd-docs: DOCS-000 | ||
| nd-product: NONECO | ||
| title: Security dashboard reference | ||
| description: "Tabs, global controls, and widget-to-dimension mapping for the F5 WAF for NGINX security monitoring dashboard." | ||
| weight: 400 | ||
| toc: true | ||
| nd-keywords: "security dashboard, tabs, global filters, widgets, dimensions, F5 WAF for NGINX" | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| nd-summary: > | ||
| Use this reference to look up how the security monitoring dashboard is organized and which underlying dimension each widget reads from. | ||
| This article covers the dashboard tabs, the global filter and time controls, and the mapping from widget to API dimension. | ||
| Each widget has an in-product tooltip explaining what its values mean; this article focuses on what is not in those tooltips. | ||
| nd-audience: operator | ||
| --- | ||
|
|
||
| ## Overview | ||
|
|
||
| Use this reference to look up how the F5 WAF for NGINX security monitoring dashboard is organized and which underlying dimension each widget reads from. Every widget in the dashboard has an in-product tooltip that explains what the displayed values mean. This article mainly covers the dashboard structure, the global controls that affect every widget, and the mapping you need when you want to reproduce a widget's view through the [analytics API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}). | ||
JTorreG marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| --- | ||
|
|
||
| ## Dashboard layout | ||
|
|
||
| The security dashboard is organized into three tabs. All three tabs share the same global filter bar and time window control at the top of the page, so any filter or time change applies to every widget on every tab. | ||
|
|
||
| | Tab | Purpose | | ||
| |:--- |:--- | | ||
| | **Main** | High-level summary of WAF activity in the selected window. Shows attack counts, threat intelligence, attack volume over time, and top-N breakdowns by geolocation, policy, IP, violation, and signature. This is the landing tab for triage. | | ||
| | **Advanced** | Deeper analytics for tuning and investigation. Use this tab to drill into signature attributes (risk, accuracy, CVE), violation context, and other dimensions that are too detailed for the Main tab. | | ||
| | **Event Logs** | A filterable list of individual security events. Open an event to see its support ID, full violation and signature detail, request context, and the raw matched request. This tab is the drill-down target when you want to inspect specific events behind a metric. | | ||
|
|
||
| --- | ||
|
|
||
| ## Global controls | ||
|
|
||
| Two controls at the top of the page apply to every widget on every tab. | ||
|
|
||
| ### Time window | ||
|
|
||
| Selects the query window for all widgets. The picker offers preset windows from **Last 5 minutes** to **Last 14 days**. You can also select a custom range by highlighting an area of interest on any time-series chart. | ||
|
|
||
| Time-series widgets bucket their data based on the selected window — shorter windows produce finer buckets. | ||
|
|
||
| | Selected window | Default bucket size for time-series widgets | | ||
| |:--- |:--- | | ||
| | Last 5–30 minutes | 1 minute | | ||
| | Last 1–6 hours | 1 minute | | ||
| | Last 12–24 hours | 1 hour | | ||
| | Last 2–7 days | 1 hour | | ||
| | Last 14 days | 6 hours | | ||
|
|
||
vrmare marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| {{< call-out "note" >}}Security events are retained for **90 days**, but the dashboard time window picker is currently limited to the **last 14 days**. To query the full retention window, use the [analytics API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}), which accepts any time range up to 90 days.{{< /call-out >}} | ||
|
|
||
| ### Add Filter | ||
|
|
||
| Applies one or more filter expressions to every widget on every tab. The dashboard supports the following filters: | ||
|
|
||
| | Filter | Description | | ||
| |:--- |:--- | | ||
| | **Config Sync Group** | Scope events to instances belonging to a specific Config Sync Group. | | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| | **Country** | Two-letter country code derived from the client IP. | | ||
| | **Destination Hostname** | The HTTP `Host` header sent by the client. Use this to scope by the application being attacked. | | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| | **Hostname** | The NGINX instance hostname (the data plane host). Use this to scope by the data plane producing the events. | | ||
| | **Instance** | Scope events to a specific NGINX instance by object identity rather than hostname. | | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| | **IP Address** | The originating client IP. | | ||
| | **Outcome Reason** | The reason F5 WAF for NGINX produced its decision, such as a matched violation or a blocking rule. | | ||
| | **Policy** | The F5 WAF for NGINX policy that produced the event. | | ||
| | **Request Method** | The HTTP request method (`GET`, `POST`, and so on). | | ||
| | **Response Code** | The HTTP response code returned for the request. | | ||
| | **Signature Accuracy** | The accuracy level of a triggered signature: `low`, `medium`, or `high`. | | ||
| | **Signature CVE** | A CVE identifier referenced by a triggered signature. | | ||
| | **Signature ID** | The numeric F5 WAF for NGINX signature ID. | | ||
| | **Signature Name** | The name of a triggered signature. | | ||
| | **Signature Risk** | The risk level of a triggered signature: `low`, `medium`, or `high`. | | ||
| | **Status** | The final WAF decision: `blocked` or `alerted`. | | ||
| | **Subviolation** | The sub-violation name within a violation. | | ||
| | **Support ID** | The unique identifier F5 WAF for NGINX assigns to each event. | | ||
| | **Threat Campaign** | The name of a matched threat campaign. | | ||
| | **URI** | The request URI path. | | ||
| | **Violation** | The name of a triggered violation. | | ||
| | **Violation Context** | Where in the request the violation occurred: `cookie`, `header`, `parameter`, `request`, or `URI`. | | ||
| | **Violation Context Key** | The field name (for example, the parameter or header name) where the violation occurred. | | ||
| | **Violation Context Value** | The field value where the violation occurred. | | ||
| | **Violation Rating** | The numeric severity rating (0–5) F5 WAF for NGINX assigned to the violation. | | ||
|
|
||
| Use filters to scope the dashboard to a specific policy, instance, hostname, country, IP, signature, violation, or any combination. To go from a metric on the dashboard to the underlying events, apply the relevant filter and switch to the **Event Logs** tab. | ||
|
|
||
| Every dashboard filter is also available through the analytics API. To call the same filters from the API, see the [API reference guide]({{< ref "/nginx-one-console/api/api-reference-guide.md" >}}). | ||
|
|
||
| --- | ||
|
|
||
| ## Main tab widgets | ||
|
|
||
| Each widget on the Main tab has a tooltip describing what it displays. The table below adds context the tooltips do not cover, such as how rows are counted and what distinct counts each Top-N table reports. | ||
|
|
||
| | Widget | Notes | | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| |:--- |:--- | | ||
| | **All Web Attacks** | Total count of security events for the selected window and filters. | | ||
| | **Threat Intelligence** | Unique counts of threat campaigns and signatures observed in the window. | | ||
| | **Attack Requests Over Time** | Stacked time series of `blocked` and `alerted` events. Bucket size depends on the selected window. | | ||
| | **Top Attack Geolocations** | Highest-volume client countries in the window. | | ||
| | **Top WAF Policies** | Each row shows hits, distinct URIs, IPs, and violations for the policy. | | ||
| | **Top Attack IP Addresses** | Each row shows hits, distinct URIs, violations, and policies for the client IP. | | ||
| | **Top Violations** | Each row shows hits, distinct IPs, URIs, and policies for the violation. | | ||
| | **Top Signatures** | Each row shows hits, distinct URIs, IPs, violations, and policies for the signature. | | ||
| | **Top Subviolations** | Each row shows hits, distinct IPs, URIs, and policies for the sub-violation. | | ||
| | **Top Attack URIs** | Each row shows hits, distinct IPs, violations, and policies for the URI. | | ||
| | **Request Methods** | Donut chart showing the share of events for each HTTP method observed in the window. | | ||
| | **Response Codes** | Donut chart showing the share of events for each response code observed in the window. | | ||
|
|
||
| To reproduce these widgets through the analytics API, see [Query security events through the API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}). | ||
|
|
||
| --- | ||
|
|
||
| ## Advanced tab widgets | ||
|
|
||
| The Advanced tab exposes signature- and violation-level analytics for tuning and deeper investigation. Widgets on this tab read from the same data store as the Main tab and respect the same global filters and time window. | ||
|
|
||
| | Widget | Notes | | ||
JTorreG marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| |:--- |:--- | | ||
| | **Signatures** | Total signature hits and unique signature count, with distributions across signature accuracy and risk levels. | | ||
| | **Signature Hits Request Status** | Donut chart of `blocked`, `alerted`, and `passed` shares of signature hits. | | ||
| | **Violation Context** | Donut chart showing where in the request the violation occurred (`cookie`, `header`, `parameter`, `request`, `URI`). | | ||
| | **Signature Hits Over Time** | Time series of signature hit volume. Bucket size depends on the selected window. | | ||
| | **Top Signatures** | Same as the Top Signatures widget on the Main tab. Each row shows hits, distinct URIs, IPs, violations, and policies. | | ||
| | **Top Signature CVEs** | Each row shows hits, distinct URIs, IPs, violations, and policies for signatures that reference the CVE. | | ||
| | **Top Threat Campaigns** | Each row shows hits, distinct URIs, IPs, violations, and policies for the threat campaign. | | ||
| | **Top Attacked Instances** | Each row shows hits, distinct URIs, IPs, violations, and policies, scoped to the NGINX instance hostname (not the HTTP `Host` header). | | ||
|
|
||
| To reproduce these widgets through the analytics API, see [Query security events through the API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}). | ||
|
|
||
| --- | ||
|
|
||
| ## Event Logs tab | ||
|
|
||
| The Event Logs tab lists individual security events matching the global filters and time window. The tab has two parts: | ||
|
|
||
| - A **Security Events** time-series chart at the top showing event volume by request status (`blocked` and `alerted`), the same view as the **Attack Requests Over Time** widget on the Main tab. | ||
| - A paginated **events table** below the chart, where each row corresponds to one security event. | ||
|
|
||
| ### Events table columns | ||
|
|
||
| | Column | Description | | ||
| |:--- |:--- | | ||
| | **Status** | The final WAF decision: `blocked` or `alerted`. | | ||
vrmare marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| | **URI** | The request URI that triggered the event. | | ||
| | **Policy** | The F5 WAF for NGINX policy that produced the event. | | ||
| | **Time** | When F5 WAF for NGINX produced the event. | | ||
| | **Source Location** | Country derived from the client IP, when available. | | ||
| | **Source IP** | The originating client IP. | | ||
| | **Violation Rating** | Numeric severity rating (0–5) assigned by F5 WAF for NGINX. | | ||
| | **Support ID** | The unique identifier F5 WAF for NGINX assigns to the event. Use this to correlate with raw F5 WAF for NGINX logs on the data plane. | | ||
|
|
||
| To list events with the same columns through the analytics API, see [Query security events through the API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}). | ||
|
|
||
| ### Pagination | ||
|
|
||
| The table is paginated. Use the controls in the bottom-right of the table to: | ||
|
|
||
| - Change the page size (default `50` rows per page). | ||
| - Navigate to a specific page or step through pages with the arrow controls. | ||
|
|
||
| The total event count for the current filter and time window is shown in the bottom-left of the table. | ||
|
|
||
| ### Event detail panel | ||
|
|
||
| Selecting a row opens the event detail panel. The panel surfaces every field stored on the event, including: | ||
|
|
||
| - **Triggered violations and signatures** — every violation and signature that fired on the event, with their full attributes. | ||
| - **Request context** — method, URL, host, client IP, X-Forwarded-For chain, country, response code, and request status. | ||
| - **Raw matched request** — the captured request payload, when available. | ||
|
|
||
|
|
||
| --- | ||
|
|
||
| ## References | ||
|
|
||
| For more information, see: | ||
|
|
||
| - [Security monitoring overview]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/security-monitoring-overview.md" >}}) | ||
| - [Set up security monitoring]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/set-up-security-monitoring.md" >}}) | ||
| - [Find a security event by Support ID]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/find-event-by-support-id.md" >}}) | ||
| - [Query security events through the API]({{< ref "/nginx-one-console/waf-integration/waf-security-dashboard/query-events-api.md" >}}) | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.