Guía paso a paso para instalar y configurar NAXSI Nginx WAF en Ubuntu 18.04 LTS
13:46, 30.07.2026
Los cortafuegos de aplicaciones web (WAF) son herramientas esenciales para proteger los sitios web y las aplicaciones web frente a una amplia gama de amenazas. NAXSI (Nginx Anti XSS & SQL Injection) es un módulo WAF de código abierto que se puede integrar en Nginx para añadir una capa adicional de seguridad.
En esta guía, explicaremos cómo instalar el cortafuegos Naxsi en un servidor Ubuntu 18.04, configurarlo y comprobar su eficacia.
Requisitos del sistema
Antes de continuar, asegúrate de que tu sistema cumple los siguientes requisitos:
- Sistema operativo: Ubuntu 18.04 LTS.
- Privilegios de usuario: Root o usuario con sudo privilegios.
- Conexión a Internet: Necesaria para descargar paquetes y archivos fuente.
Configuración inicial
Según nuestra experiencia, recomendamos actualizar el sistema antes de instalar NAXSI Nginx WAF en un servidor con Ubuntu 18.04. Puede actualizar los paquetes de su sistema utilizando el siguiente comando:
apt-get update -y apt-get upgrade -yReinicie el servidor para aplicar los cambios.
También necesitarás ciertas dependencias para compilar Nginx desde el código fuente. Instala las dependencias necesarias con el comando:
apt-get install build-essential daemon libxml2-dev libxslt1-dev libgd-dev libgeoip-dev make libpcre3-dev libssl-dev unzip -yAhora, el paquete Naxsi estará disponible en el repositorio predeterminado de Ubuntu 18.04.
Compilación de Nginx con integración de Naxsi
A continuación, debes compilar Nginx con soporte para Naxsi.
Descarga el código fuente de Nginx con el comando:
wget http://nginx.org/download/nginx-1.16.1.tar.gzDescomprime el archivo descargado:
tar -xvzf nginx-1.16.1.tar.gzA continuación, descarga el código fuente de Naxsi con el siguiente comando:
wget https://github.com/nbs-system/naxsi/archive/master.zipDescomprime el archivo descargado con el siguiente comando:
unzip master.zipA continuación, cambia al directorio del código fuente de Nginx:
cd nginx-1.16.1/Debes configurar Nginx para que admita Naxsi con este comando:
./configure --conf-path=/etc/nginx/nginx.conf --add-module=../naxsi-master/naxsi_src/ --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --prefix=/usrCompila Nginx con:
makeInstala Nginx:
make installEl último paso consiste en crear los directorios para las bibliotecas de datos dinámicos de Nginx. Créalos con este comando:
mkdir /var/lib/nginx/body mkdir /var/lib/nginx/fastcgiAhora, Nginx está configurado con soporte para Naxsi.
Configuración de las reglas de Naxsi
En este paso, debes copiar las reglas principales de Naxsi al directorio de configuración de Nginx. Cópialas desde el código fuente de Naxsi:
cp /root/naxsi-master/naxsi_config/naxsi_core.rules /etc/nginx/Crea un archivo naxsi.rules dentro del directorio /etc/nginx/:
nano /etc/nginx/naxsi.rulesEspecifica las acciones que debe realizar el servidor cuando una solicitud de URL no cumpla con las reglas principales:
SecRulesEnabled;
DeniedUrl "/RequestDenied";
## Comprobar las reglas de Naxsi
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
Esto comprobará las URL y las bloqueará si es necesario.
Guarda y cierra el archivo.
Configuración de Nginx para que funcione con Naxsi
Para que Nginx funcione con Naxsi, debes configurar el archivo de configuración predeterminado de Nginx para que admita Naxsi. Para ello, edita los archivos de configuración de Nginx y Naxsi.
Abre el archivo de configuración predeterminado de Nginx:
nano /etc/nginx/nginx.conf
Inserta las siguientes líneas:
user www-data;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
include /etc/nginx/naxsi_core.rules;
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
include /etc/nginx/naxsi.rules;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Guarda y cierra el archivo.
Comprueba si hay algún error de sintaxis de Nginx con el siguiente comando:
nginx -tSi no hay errores, deberías obtener el siguiente resultado:
nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf es correcta nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf se ha realizado con éxito
Configuración de un archivo de servicio de Systemd para Nginx
Para gestionar el servicio de Nginx, es necesario crear un archivo de servicio de Nginx para Systemd.
nano /lib/systemd/system/nginx.serviceAñade estas líneas:
[Unit]
Description=Un servidor web de alto rendimiento y un servidor proxy inverso Documentation=man:nginx(8)
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Guarda y cierra el archivo.
Recarga el demonio de systemd:
systemctl daemon-reloadA continuación, inicia el servicio Nginx y habilítalo para que se inicie tras el reinicio del sistema:
systemctl start nginx systemctl enable nginxPuedes comprobar el estado del servicio Nginx con el siguiente comando:
systemctl status nginxTambién puede comprobar los módulos cargados en Nginx con este comando:
nginx -V
Prueba del cortafuegos Naxsi
Ya hemos configurado el cortafuegos Naxsi. Ahora, debemos probar el servidor Nginx ante posibles ataques y comprobar cómo los gestiona Naxsi.
Accede al sistema remoto, abre un navegador e introduce la siguiente URL: http://your-server-ip/?a=<. Naxsi debería bloquearte el acceso para que no puedas continuar.
A continuación, comprueba el registro de errores de Nginx:
tail -f /var/log/nginx/error.logDeberías poder ver en el registro que Naxsi ha bloqueado tu solicitud:
26/01/2020 15:59:08 [error] 14907#0: 13 NAXSI_FMT: ip=103.250.161.100&server=208.117.84.142&uri=/&vers=0.56&total_processed=11&total_blocked=7&config=block&cscore0=$XSS&score0=8&zone0=ARGS&id0=1302&var_name0=a, cliente: 103.250.161.100, servidor: localhost, solicitud: «GET /?a=%3C HTTP/1.1», host: «208.117.84.142»También puedes comprobar si Naxsi detecta ataques XSS. Accede al sistema remoto, abre un navegador e introduce el enlace: http://your-server-ip/?q="><script>alert(1)</script>. Naxsi debería impedirte continuar.
Comprueba el registro de errores de Nginx con el siguiente comando:
tail -f /var/log/nginx/error.logDeberías poder ver en el registro que Naxsi ha bloqueado tu solicitud:
26/01/2020 15:53:26 [error] 14907#0: 7 NAXSI_FMT: ip=103.250.161.100&server=208.117.84.142&uri=/&vers=0.56&total_processed=7&total_blocked=4&config=block&cscore0=$SQL&score0=8&cscore1=$XSS&score1=8&zone0=ARGS&id0=1001&var_name0=q, cliente: 103.250.161.100, servidor: localhost, solicitud: "GET /?q=%22%3E%3Cscript%3Ealert(1)%3C/script%3E HTTP/1.1", host: "208.117.84.142"
Reflexiones finales
La instalación y configuración del cortafuegos Naxsi en Ubuntu 18.04 puede mejorar considerablemente la seguridad de tus aplicaciones web. Si sigues esta guía, deberías disponer de un sólido WAF de Nginx que te proteja contra ataques comunes como XSS e inyección SQL. Recuerda adaptar las reglas de Naxsi a las necesidades específicas de tu aplicación y actualizar periódicamente tanto Nginx como Naxsi para garantizar una seguridad óptima.