Instrucciones de instalación de NGINX ModSecurity



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.7

A 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 On
A 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 

Source: https://habr.com/ru/post/437032/


All Articles