
Este artículo proporciona instrucciones para instalar el módulo Dynamic ModSecurity en el servidor web NGINX como un firewall de aplicación web (WAF). NGINX funciona en
modo proxy inverso . El trabajo se realizó en la distribución de Linux:
CentOS 7 . El módulo se configura como "dinámico" para que el servicio permanezca flexible en la configuración. Se
utiliza la guía de instalación
oficial de NGINX .
1. Preinstalación de componentes
Para que el servicio funcione correctamente, se deben instalar bibliotecas adicionales para que funcionen. Se necesitarán bibliotecas para construir un proyecto a partir del código fuente. Se supone que el usuario tiene un sistema actualizado (
# yum update ).
yum install install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
2. Inicie la instalación del servicio
Para que no haya problemas al iniciar el servicio con el comando
service nginx start , se instala la versión del repositorio oficial en GitHub.
Cree el archivo
/etc/yum.repos.d/nginx.repo en el que desea agregar la versión de distribución. Sin especificar la versión NGINX, se abre la última que se lanzó en el sitio.
[nginx-1.13.7] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
A continuación, solo instale
yum install nginx
3. Compilación del módulo.

Para comenzar, vaya al directorio apropiado:
cd /home/user/Downloads
Descargue el módulo desde la rama principal en GitHub:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git
A continuación, vaya a la carpeta con el firewall y compile el código fuente:
cd ModSecurity git submodule init git submodule update ./build.sh ./configure make make install
4. Instalar el conector
Para que todo el sistema sea flexible, se instalará un conector para conectar
NGINX y ModSecurity . Esto significa que el módulo no se conectará al código del servidor, sino que solo será un componente dinámico, lo que permitirá eliminarlo en cualquier momento, cambiar el código, etc.
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
5. Reconstruir el servidor web
Para que NGINX funcione con el conector al que se conectará el módulo, debe reconstruir el servidor. Para hacer esto, primero averigüe qué versión de NGINX está instalada:
nginx –v
La salida debería ser algo como esto (dependiendo de la versión)
Versión nginx: nginx / 1.13.7A continuación, descargue la versión adecuada del sitio oficial para que no haya ningún error al iniciar el servicio y compile con un determinado parámetro:
cd .. wget http://nginx.org/download/nginx-1.13.7.tar.gz tar zxvf nginx-1.13.7.tar.gz cd nginx-1.13.7 ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx make modules
A continuación, copie el archivo del módulo en la carpeta del servicio web:
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
Antes del primer bloque en
/etc/nginx/nginx.conf agregue:
load_module modules/ngx_http_modsecurity_module.so;
6. Archivo de configuración del módulo
Los desarrolladores ofrecen sus reglas básicas para proteger un recurso web. Cabe señalar que, una vez instalados, no se debe contar con un nivel decente, ya que los creadores dejan total libertad de configuración y escritura de reglas por parte del usuario, lo que los limita a agregar reglas básicas al archivo de configuración estándar.
mkdir /etc/nginx/modsec cd /etc/nginx/modsec sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended sudo mv modsecurity.conf-recommended modsecurity.conf
En el archivo
modsecurity.conf, reemplace
SecRuleEngine DetectionOnly con
SecRuleEngine OnA continuación, cree el archivo
/etc/nginx/modsec/main.conf y agréguelo:
# Include the recommended configuration Include /etc/nginx/modsec/modsecurity.conf
7. reglas de OWASP
No es ningún secreto que
OWASP es líder en temas de seguridad web. Tienen su propio conjunto para este módulo, que, como el proyecto, está abierto a los usuarios. Por lo tanto, instálelo como un conjunto básico de reglas:
cd /usr/local wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz tar -xzvf v3.0.0.tar.gz mv owasp-modsecurity-crs-3.0.0 /usr/local cd /usr/local/owasp-modsecurity-crs-3.0.0 cp crs-setup.conf.example crs-setup.conf
En
/etc/nginx/modsec/main.conf agregue lo siguiente:
# OWASP CRS v3 rules Include /usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf Include /usr/local/owasp-modsecurity-crs-3.0.0/rules/*.conf
8. Finalización del trabajo.
En el archivo
/etc/nginx/conf.d/proxy.conf agregue
server { listen 80; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # If you have proxy location / { proxy_pass http://192.168.xx; } }
9. Control de salud
Para verificar los componentes de un servicio web, simplemente inícielo y observe los errores. A menudo, deberá eliminar la regla que se encarga de verificar dónde se utiliza otro módulo (
GeoIP , por ejemplo). Por lo tanto, puede eliminar con seguridad esta regla.
rm /usr/local/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf
Error relacionado con
Unicode también es posible. Para que no interfiera con el servicio, simplemente lo comentamos en el archivo de configuración (
al final ).
#SecUnicodeMapFile unicode.mapping 20127
Use la utilidad
curl para probar el servidor. Mostrará si la aplicación regresa. Si todo es correcto, recibirá una opción con un código de
200 OK curl -I 127.0.0.1
Para verificar el funcionamiento de los mecanismos de protección, puede utilizar cualquier utilidad diseñada para esto. Se sugiere usar
Nikto como recomendaciones:
nikto -host localhost
Para iniciar el servidor:
service nginx start