diff --git a/www/nginx/src/opnsense/mvc/app/controllers/OPNsense/Nginx/forms/httpserver.xml b/www/nginx/src/opnsense/mvc/app/controllers/OPNsense/Nginx/forms/httpserver.xml
index 2ec09b01c..17e39f8b0 100644
--- a/www/nginx/src/opnsense/mvc/app/controllers/OPNsense/Nginx/forms/httpserver.xml
+++ b/www/nginx/src/opnsense/mvc/app/controllers/OPNsense/Nginx/forms/httpserver.xml
@@ -167,6 +167,15 @@
All: All access restrictions must be fulfilled; Any: Any of the access restrictions must be fulfilled.
+
+ httpserver.naxsi_whitelist_srcip
+
+ true
+
+ select_multiple
+ true
+ Enter a list of IP addresses or CIDR networks which will be whitelisted for the Naxsi rules.
+ httpserver.naxsi_extensive_log
diff --git a/www/nginx/src/opnsense/mvc/app/models/OPNsense/Nginx/Nginx.xml b/www/nginx/src/opnsense/mvc/app/models/OPNsense/Nginx/Nginx.xml
index e17095332..cebf7d930 100644
--- a/www/nginx/src/opnsense/mvc/app/models/OPNsense/Nginx/Nginx.xml
+++ b/www/nginx/src/opnsense/mvc/app/models/OPNsense/Nginx/Nginx.xml
@@ -694,6 +694,11 @@
0Y
+
+ N
+ /^((?:\d+\.){3,3}\d+|[a-f0-9\:]+)(?:\/\d+)?(,?(?:(?:(\d+\.){3,3}\d+|[a-f0-9\:]+)(?:\/\d+)?))*$/i
+ Y
+ 0Y
diff --git a/www/nginx/src/opnsense/service/templates/OPNsense/Nginx/http.conf b/www/nginx/src/opnsense/service/templates/OPNsense/Nginx/http.conf
index adc6213d0..05aea6864 100644
--- a/www/nginx/src/opnsense/service/templates/OPNsense/Nginx/http.conf
+++ b/www/nginx/src/opnsense/service/templates/OPNsense/Nginx/http.conf
@@ -78,6 +78,15 @@ include opnsense_http_vhost_plugins/*.conf;
{% if OPNsense.Nginx.general.enabled is defined and OPNsense.Nginx.general.enabled == '1' %}
{% for server in helpers.toList('OPNsense.Nginx.http_server') %}
{% set single_servername = server.servername.split(",")[0] %}
+{% if server.naxsi_whitelist_srcip is defined and server.naxsi_whitelist_srcip != '' %}
+ geo $naxsiwl{{ server['@uuid'].replace('-', '') }} {
+ default 0;
+ # Disable naxsi if client ip is trusted
+{% for whitelist_srcip in server.naxsi_whitelist_srcip.split(',') %}
+ {{ whitelist_srcip }} 1;
+{% endfor %}
+ }
+{% endif %}
server {
{% set our_headers = [] %}
{% do our_headers.append('X-Powered-By') %}
@@ -260,6 +269,11 @@ server {
}
{% endif %}
include {{ server['@uuid'] }}_pre/*.conf;
+{% if server.naxsi_whitelist_srcip is defined and server.naxsi_whitelist_srcip != '' %}
+ if ($naxsiwl{{ server['@uuid'].replace('-', '') }}) {
+ set $naxsi_flag_enable 0;
+ }
+{% endif %}
{% if server.rewrites is defined %}
{% for rewrite_uuid in server.rewrites.split(',') %}
{% set rewrite = helpers.getUUID(rewrite_uuid) %}