Skip to content

feature: Secure your fleet, NGINX One #731

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
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions archetypes/landing-page.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
# The title is the product name
title:
# The URL is the base of the deployed path, becoming "docs.nginx.com/<url>/<other-pages>"
url:
# The cascade directive applies its nested parameters down the page tree until overwritten
cascade:
# The logo file is resolved from the theme, in the folder /static/images/icons/
logo:
# The subtitle displays directly underneath the heading of a given page
nd-subtitle:
# Indicates that this is a custom landing page
nd-landing-page: true
# Types have a 1:1 relationship with Hugo archetypes, so you shouldn't need to change this
nd-content-type: landing-page
# Intended for internal catalogue and search, case sensitive:
# Agent, N4Azure, NIC, NIM, NGF, NAP-DOS, NAP-WAF, NGINX One, NGINX+, Solutions, Unit
nd-product:
---

## About
[//]: # "These are Markdown comments to guide you through document structure. Remove them as you go, as well as any unnecessary sections."
[//]: # "Use underscores for _italics_, and double asterisks for **bold**."
[//]: # "Backticks are for `monospace`, used sparingly and reserved mostly for executable names - they can cause formatting problems. Avoid them in tables: use italics instead."

[//]: # "This initial section introduces the product to a reader: give a short 1-2 sentence summary of what the product does and its value to the reader."
[//]: # "Name specific functionality it provides: avoid ambiguous descriptions such as 'enables efficiency', focus on what makes it unique."

## Featured content
[//]: # "You can add a maximum of three cards: any extra will not display."
[//]: # "One card will take full width page: two will take half width each. Three will stack like an inverse pyramid."
[//]: # "Some examples of content could be the latest release note, the most common install path, and a popular new feature."

{{<card-layout>}}
{{<card-section showAsCards="true" isFeaturedSection="true">}}
{{<card title="<some-title>">}}
<!-- Each description should be roughly 10 words or less. -->
{{</card>}}
<!-- The titleURL and icon are both optional -->
<!-- Lucide icon names can be found at https://lucide.dev/icons/ -->
{{<card title="<some-title>" titleUrl="<some-url>" icon="<some-lucide-icon>">}}
<!-- Each description should be roughly 10 words or less. -->
{{</card>}}
{{</card-section>}}
{{</card-layout>}}

## Other content

[//]: # "You can add any extra content for the page here, such as additional cards, diagrams or text."
2 changes: 1 addition & 1 deletion content/agent/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: NGINX Agent
url: /nginx-agent/
cascade:
logo: NGINX-product-icon.png
banner:
nd-banner:
enabled: true
type: deprecation
start-date: 2025-05-29
Expand Down
2 changes: 1 addition & 1 deletion content/controller/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ weight: 2100
cascade:
logo: "NGINX-Controller-product-icon-RGB.svg"
noindex: true
banner:
nd-banner:
enabled: true
type: deprecation
md: _banners/eos-cltr.md
Expand Down
21 changes: 21 additions & 0 deletions content/includes/nginx-one/how-to/generate-data-plane-key.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
docs:
files:
- content/nginx-one/secure-your-fleet/secure.md
- content/nginx-one/getting-started.md
---

A data plane key is a security token that ensures only trusted NGINX instances can register and communicate with NGINX One.

To generate a data plane key:

- **For a new key:** In the **Add Instance** pane, select **Generate Data Plane Key**.
- **To reuse an existing key:** If you already have a data plane key and want to use it again, select **Use existing key**. Then, enter the key's value in the **Data Plane Key** box.

{{<call-out "caution" "Data plane key guidelines" "fas fa-key" >}}
Data plane keys are displayed only once and cannot be retrieved later. Be sure to copy and store this key securely.

Data plane keys expire after one year. You can change this expiration date later by [editing the key]({{< ref "nginx-one/connect-instances/create-manage-data-plane-keys.md#change-expiration-date" >}}).

If you [Revoke a data plane key]({{< ref "nginx-one/connect-instances/create-manage-data-plane-keys.md#revoke-data-plane-key" >}}) you disconnect all instances registered with that key.
{{</call-out>}}
42 changes: 42 additions & 0 deletions content/includes/nginx-one/how-to/install-nginx-agent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
docs:
files:
- content/nginx-one/secure-your-fleet/secure.md
- content/nginx-one/getting-started.md
---

After entering your data plane key, you'll see a `curl` command similar to the one below. Copy and run this command on each NGINX instance to install NGINX Agent. Once installed, NGINX Agent typically registers with NGINX One within a few seconds.

{{<call-out "important" "Connecting to NGINX One" >}}
NGINX Agent must be able to establish a connection to NGINX One Console's Agent endpoint (`agent.connect.nginx.com`). Ensure that any firewall rules you have in place for your NGINX hosts allows network traffic to port `443` for all of the following IPs:

- `3.135.72.139`
- `3.133.232.50`
- `52.14.85.249`
{{</call-out>}}

To install NGINX Agent on an NGINX instance:

1. **Check if NGINX is running and start it if it's not:**

First, see if NGINX is running:

```shell
sudo systemctl status nginx
```

If the status isn't `Active`, go ahead and start NGINX:

```shell
sudo systemctl start nginx
```

2. **Install NGINX Agent:**

Next, use the `curl` command provided to you to install NGINX Agent:

``` shell
curl https://agent.connect.nginx.com/nginx-agent/install | DATA_PLANE_KEY="YOUR_DATA_PLANE_KEY" sh -s -- -y
```

- Replace `YOUR_DATA_PLANE_KEY` with your actual data plane key.
2 changes: 1 addition & 1 deletion content/mesh/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ description: 'NGINX Service Mesh is a fully integrated lightweight service mesh
url: /nginx-service-mesh/
cascade:
noindex: true
banner:
nd-banner:
enabled: true
type: deprecation
md: _banners/eos-mesh.md
Expand Down
2 changes: 1 addition & 1 deletion content/ngf/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: NGINX Gateway Fabric
url: /nginx-gateway-fabric/
cascade:
logo: NGINX-Gateway-Fabric-product-icon.png
banner:
nd-banner:
enabled: true
type: deprecation
start-date: 2025-05-30
Expand Down
5 changes: 4 additions & 1 deletion content/nginx-one/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ cascade:
{{< card title="Draft new configurations" >}}
Work with Staged Configurations
{{</ card >}}
{{< card title="Secure your fleet" >}}
Configure alerts that match your security policies
{{</ card >}}
{{< card title="Set up metrics" >}}
Review your deployments in a dashboard
{{</ card >}}
Expand Down Expand Up @@ -70,4 +73,4 @@ cascade:
Defend, adapt, and mitigate against Layer 7 denial-of-service attacks on your apps and APIs.
{{</ card >}}
{{</ card-section >}}
{{</ card-layout >}}
{{</ card-layout >}}
6 changes: 6 additions & 0 deletions content/nginx-one/secure-your-fleet/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Secure your fleet
description:
weight: 450
url: /nginx-one/secure-your-fleet
---
131 changes: 131 additions & 0 deletions content/nginx-one/secure-your-fleet/secure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
---
title: "Set up security alerts"
weight: 500
toc: true
nd-content-type: how-to
nd-product: NGINX One
---

With this page, you'll learn how to set up alerts in F5 Distributed Cloud. Once configured, you'll see the CVEs and insecure configurations associated with your NGINX fleet. These instructions are intended for those responsible for keeping their NGINX infrastructure and application traffic secure. It assumes you know how to:

- Install Linux programs or run Docker containers

By the end of this tutorial, you'll be able to:

- Access the NGINX One Console in F5 Distributed Cloud
- Connect NGINX instances to the NGINX One Console
- Review Security Risks associated with your NGINX fleet
- Configure Alert Policies in F5 Distributed Cloud

## Background

NGINX One Console is a service to monitor and manage NGINX. It's a part of the F5 Distributed Cloud and is included with all NGINX and F5 Distributed Cloud subscriptions. While NGINX is built to be secure and stable, critical vulnerabilities can occasionally emerge – and misconfigurations may leave your applications or APIs exposed to attacks.

## Before you begin

If you already have accessed F5 Distributed Cloud and have NGINX instances available, you can skip these steps and start to connect instances to the NGINX One Console.

### Confirm access to the F5 Distributed Cloud

Confirm an F5 Distributed Cloud tenant has been provisioned for you. Log in to MyF5 and review your subscriptions. You should see within one of your subscriptions "Distributed Cloud". This could be in either an NGINX subscription or a Distributed Cloud. If the above does not appear in any of your subscriptions, reach out to either your F5 Account Team or Customer Success Manager.

With access, you or someone in your organization should have an email from [email protected] asking you to update your password when the tenant was created. The account name referenced in the E-Mail in bold is the tenant name.

Navigate to https://INSERT_YOUR_TENANT_NAME.console.ves.volterra.io/ to access F5 Distributed Cloud. If you have never logged in, select the **Forgot Password?** option in the log in screen. Alternatively, if someone within your organization has access, ask them to add you as a user within your tenant with a role providing permissions for NGINX One.

### Confirm access to NGINX One Console in the F5 Distributed Cloud

Once you've logged in with your password, you should be able to see and select the NGINX One tile.

1. Select the **NGINX One** tile<!-- Style note: this is the UI in DC -->
1. Select **Visit Service**

### Install an instance of NGINX

Ensure you have an instance of [NGINX Open Source or NGINX Plus]({{< ref "/nginx/admin-guide/installing-nginx/" >}}) installed and available. This guide provides instructions for connecting an instance installed in a Linux environment (VM or bare metal hardware) where you have command line access.
Alternatively, we also have instructions for [Deploying NGINX and NGINX Plus with Docker]({{< ref "/nginx/admin-guide/installing-nginx/installing-nginx-docker.md" >}}) with NGINX and the NGINX Agent installed. That deployment can connect with environment variables.

## Connect at least one NGINX instance to the NGINX One Console

If you already have connected instances to the NGINX One Console, you can start to [Configure an active alert policy]({{< ref "/nginx-one/secure-your-fleet/secure.md#configure-an-active-alert-policy" >}}).
Otherwise, you need to generate a data plane key, add an instance, and install NGINX Agent. We assume this is the first time you are connecting an instance.

### Add an instance

{{< include "/nginx-one/how-to/add-instance.md" >}}

### Generate a data plane key

{{< include "/nginx-one/how-to/generate-data-plane-key.md" >}}

### Install NGINX Agent

{{< include "/nginx-one/how-to/install-nginx-agent.md" >}}

You can also install NGINX Agent from our repositories and configure it manually. Alternatively you can use our official NGINX Docker images, pre-configured with NGINX Agent.

## Configure an active alert policy

The NGINX One Console monitors all connected NGINX instances for CVEs and insecure configurations. Using the F5 Distributed Cloud's Alert Policies you can receive alerts for these risks in a manner of your choosing; for the purposes of this guide we will show you how to configure E-Mail alerts.

The F5 Distributed Cloud generates alerts from all its services including NGINX One. You can configure rules to send those alerts to a receiver of your choice. These instructions walk you through how to configure an email notification when we see new CVEs or detect security issues with your NGINX instances.

This page describes basic steps to set up an email alert. For authoritative documentation, see
[Alerts - Email & SMS](https://docs.cloud.f5.com/docs-v2/shared-configuration/how-tos/alerting/alerts-email-sms).

## Configure alerts to be sent to your email

To configure security-related alerts, follow these steps:

1. Navigate to the F5 Distributed Cloud Console at https://INSERT_YOUR_TENANT_NAME.console.ves.volterra.io.
1. Find **Audit Logs & Alerts** > **Alerts Management**.
1. Select **Add Alert Receiver**.
1. Configure the **Alert Receivers**
1. Enter the name of your choice.
1. (Optional) Specify a label and description.
1. Under **Receiver**, select Email and enter your email address.
1. Select **Save and Exit**.
1. Your Email receiver should now appear on the list of Alert Receivers.
1. Under the Actions column, select Verify Email.
1. Select **Send email** to confirm.
1. You should receive a verification code in the email provided. Copy that code.
1. Under the Actions column, select **Enter verification code**.
1. Paste the code and select **Verify receiver**.

## Configure Alert Policy

Next, configure the policy that identifies when you'll get an alert.

1. Navigate to **Alerts Management > Alert Policies**.
1. Select **Add Alert Policy**.
1. Enter the name of your choice.
1. (Optional) Specify a label and description.
1. Under Alert Reciever Configuration > Alert Receivers, select the Alert Receiver you just created.
1. Under Policy Rules select Configure.
1. Select Add Item.
1. Under Select Alerts (TBD).
1. Set the Action as Send and select Apply.

Now set a second alert related to Common Vulnerabilities and Exposures (CVEs).

1. Select Add Item
1. Under Select Alerts {adding additional Alert type for CVE)
1. Set the Action as Send and select Apply
1. Select **Save and Exit**

You've now set up F5 Distributed Cloud to send you security-related alerts from NGINX One Console.

## Summary

In this tutorial, you learned how to:

- Access the NGINX One Console
- Connect an NGINX instance
- Configure an Alert

You will now receive an email any time the NGINX One Console recognizes one of your connected instances has a configuration that is insecure or an NGINX CVE impacts it.

## Next steps

Now that you have NGINX instances connected to the Console, consider reviewing our [use cases]({{< ref "/nginx-one/" >}}) to see how you can easily manage your NGINX instances, draft new configurations, and more.
Additionally, you can review how to add additional Alert Receivers such as [SMS](https://docs.cloud.f5.com/docs-v2/shared-configuration/how-tos/alerting/alerts-email-sms), [Slack](https://docs.cloud.f5.com/docs-v2/shared-configuration/how-tos/alerting/alerts-slack), [PagerDuty](https://docs.cloud.f5.com/docs-v2/shared-configuration/how-tos/alerting/alerts-pagerduty), or with a [webhook](https://docs.cloud.f5.com/docs-v2/shared-configuration/how-tos/alerting/alerts-webhook).
2 changes: 1 addition & 1 deletion content/nim/deploy/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description:
weight: 20
url: /nginx-instance-manager/deploy/
cascade:
banner:
nd-banner:
enabled: true
type: deprecation
md: _banners/upgrade-r33.md
Expand Down