Manually update security packages
If you prefer not to enable automatic updates, you can manually update the attack signature, bot signature, and threat campaign packages by downloading them from the NGINX repository and uploading them to NGINX Instance Manager.
-
Log in to MyF5 and go to My Products and Plans > Subscriptions.
-
Download the following files from your F5 WAF for NGINX subscription:
nginx-repo.crt(certificate)nginx-repo.key(private key)
-
Choose your Linux distribution path on the NGINX repository:
- Ubuntu:
/ubuntu/pool/nginx-plus/a/ - Debian:
/debian/pool/nginx-plus/a/ - RHEL:
/centos/<8 or 9>/x86_64/RPMS/
- Ubuntu:
-
Download the
.debor.rpmpackages from pkgs.nginx.com using your F5 WAF for NGINX certificate and key.-
Attack signatures: package names start with
app-protect-attack-signatures.-
.debpackage format:https://pkgs.nginx.com/app-protect-security-updates/<ubuntu or debian>/pool/nginx-plus/a/app-protect-attack-signatures/app-protect-attack-signatures_<Revision Timestamp in YYYY.MM.DD>-<version>~<OS Family>_amd64.deb -
Example:
shell curl --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/ubuntu/pool/nginx-plus/a/app-protect-attack-signatures/app-protect-attack-signatures_2025.07.24-1~noble_amd64.deb" \ --output app-protect-attack-signatures_2025.07.24-1~noble_amd64.deb -
.rpmpackage format:https://pkgs.nginx.com/app-protect-security-updates/centos/<8 or 9>/x86_64/RPMS/app-protect-attack-signatures-<Revision Timestamp in YYYY.MM.DD>-<version>.el<8 or 9>.ngx.x86_64.rpm -
Example:
shell curl -v --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/centos/8/x86_64/RPMS/app-protect-attack-signatures-2025.07.24-1.el8.ngx.x86_64.rpm" \ --output app-protect-attack-signatures-2025.07.24-1.el8.ngx.x86_64.rpm
-
-
Bot signatures: package names start with
app-protect-bot-signatures.-
.debpackage format:https://pkgs.nginx.com/app-protect-security-updates/<ubuntu or debian>/pool/nginx-plus/a/app-protect-bot-signatures/app-protect-bot-signatures_<Revision Timestamp in YYYY.MM.DD>-<version>~<OS Family>_amd64.deb -
Example:
shell curl --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/ubuntu/pool/nginx-plus/a/app-protect-bot-signatures/app-protect-bot-signatures_2025.07.09-1~noble_amd64.deb" \ --output app-protect-bot-signatures_2025.07.09-1~noble_amd64.deb -
.rpmpackage format:https://pkgs.nginx.com/app-protect-security-updates/centos/<8 or 9>/x86_64/RPMS/app-protect-bot-signatures-<Revision Timestamp in YYYY.MM.DD>-<version>.el<8 or 9>.ngx.x86_64.rpm -
Example:
shell curl -v --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/centos/8/x86_64/RPMS/app-protect-bot-signatures-2025.07.09-1.el8.ngx.x86_64.rpm" \ --output app-protect-bot-signatures-2025.07.09-1.el8.ngx.x86_64.rpm
-
-
Threat campaigns: package names start with
app-protect-threat-campaigns.-
.debpackage format:https://pkgs.nginx.com/app-protect-security-updates/<ubuntu or debian>/pool/nginx-plus/a/app-protect-threat-campaigns/app-protect-threat-campaigns_<Revision Timestamp in YYYY.MM.DD>-<version>~<OS Family>_amd64.deb -
Example:
shell curl --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/ubuntu/pool/nginx-plus/a/app-protect-threat-campaigns/app-protect-threat-campaigns_2025.07.29-1~noble_amd64.deb" \ --output app-protect-threat-campaigns_2025.07.29-1~noble_amd64.deb -
.rpmpackage format:https://pkgs.nginx.com/app-protect-security-updates/centos/<8 or 9>/x86_64/RPMS/app-protect-threat-campaigns-<Revision Timestamp in YYYY.MM.DD>-<version>.el<8 or 9>.ngx.x86_64.rpm -
Example:
shell curl -v --key nginx-repo.key \ --cert nginx-repo.crt \ "https://pkgs.nginx.com/app-protect-security-updates/centos/8/x86_64/RPMS/app-protect-threat-campaigns-2025.07.29-1.el8.ngx.x86_64.rpm" \ --output app-protect-threat-campaigns-2025.07.29-1.el8.ngx.x86_64.rpm
-
-
-
Extract the following files from the package:
signatures.bin.tgz,bot_signatures.bin.tgz, orthreat_campaigns.bin.tgzsignature_update.yaml,bot_signature_update.yaml, orthreat_campaign_update.yamlversion
Use
rpm2cpio | cpiofor.rpmpackages orarfor.debpackages to extract the files. -
Create a
.tgzbundle that includes the three files. For example:tar -czvf attack-signatures.tgz signatures.bin.tgz signature_update.yaml version
Use the NGINX Instance Manager REST API to upload the .tgz files.
Upload attack signatures
curl -X POST 'https://{{NIM_FQDN}}/api/platform/v1/security/attack-signatures' \
--header "Authorization: Bearer <access token>" \
--form 'revisionTimestamp="2022.11.16"' \
--form 'filename=@"/attack-signatures.tgz"'Upload bot signatures
curl -X POST 'https://{{NIM_FQDN}}/api/platform/v1/security/bot-signatures' \
--header "Authorization: Bearer <access token>" \
--form 'revisionTimestamp="2025.07.09"' \
--form 'filename=@"/bot-signatures.tgz"'Upload threat campaigns
curl -X POST 'https://{{NIM_FQDN}}/api/platform/v1/security/threat-campaigns' \
--header "Authorization: Bearer <access token>" \
--form 'revisionTimestamp="2022.11.15"' \
--form 'filename=@"/threat-campaigns.tgz"'The bundle you upload must match both the operating system and version of your NGINX Instance Manager host.
Create the.tgzfile using the package built for the same OS and version to ensure compatibility.