GNU/Linux >> Tutoriales Linux >  >> Cent OS

Instale el firewall de aplicaciones web LibModsecurity con Nginx en CentOS 8

LibModSecurity es un cortafuegos de aplicaciones web gratuito y de código abierto que se puede utilizar para proteger un servidor Nginx de diferentes tipos de ataques cibernéticos. Viene con un conjunto de reglas básicas que incluye inyección de SQL, secuencias de comandos entre sitios, troyanos y muchos más. Funciona al monitorear el tráfico HTTP en tiempo real y lucha contra las vulnerabilidades utilizando el conjunto de reglas básicas de OWASP ModSecurity. Se puede usar con Apache, Nginx e IIS y también es compatible con Debian, Ubuntu y CentOS.

En este tutorial, le mostraremos cómo descargar y compilar LibModSecurity con soporte Nginx en CentOS 8.

Requisitos

  • Un servidor que ejecuta CentOS 8.
  • Se configura una contraseña raíz en el servidor.

Cómo empezar

Antes de comenzar, actualice su servidor con la última versión usando el siguiente comando:

dnf update

Una vez que su servidor esté actualizado, reinícielo para aplicar los cambios.

Instalar dependencias y repositorios necesarios

Primero, instale el repositorio EPEL y REMI en su sistema. Puede instalarlos con el siguiente comando:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Luego, instala todas las dependencias requeridas con el siguiente comando:

dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano

Una vez que todos los paquetes estén instalados, puede instalar otras dependencias usando el repositorio de PowerTool:

dnf --enablerepo=PowerTools install doxygen yajl-devel

Luego, instale GeoIP usando el repositorio REMI ejecutando el siguiente comando:

dnf --enablerepo=remi install GeoIP-devel

Una vez que todos los paquetes estén instalados, puede continuar con el siguiente paso.

Descargar y compilar LibModsecurity

Primero, deberá descargar la fuente de LibModsecurity y compilarla en su sistema. Para hacerlo, cambie el directorio a /opt y descargue la última versión de LibModsecurity desde el repositorio de Git:

cd /opt/
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity

A continuación, cambie el directorio a ModSecurity y descargue el código libInjection con el siguiente comando:

cd ModSecurity
git submodule init
git submodule update

A continuación, configure LibModsecurity con el siguiente comando:

./build.sh
./configure

Finalmente, compile e instale LibModSecurity con el siguiente comando:

make
make install

En este punto, LibModsecurity se ha instalado en su sistema. Ahora puede proceder a instalar Nginx con soporte de LibModsecurity.

Descargar y compilar Nginx con soporte de LibModsecurity

Primero, deberá crear un usuario y un grupo del sistema para Nginx. Puedes crearlo con el siguiente comando:

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

A continuación, deberá descargar Nginx y compilarlo con soporte de LibModsecurity.

Para hacerlo, primero descargue el conector ModSecurity-nginx del repositorio de Git con el siguiente comando:

cd /opt
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

A continuación, descargue la última versión estable de Nginx con el siguiente comando:

wget http://nginx.org/download/nginx-1.17.6.tar.gz

Una vez descargado, extraiga el archivo descargado usando el siguiente comando:

tar -xvzf nginx-1.17.6.tar.gz

A continuación, cambie el directorio Nginx y configúrelo con el siguiente comando:

cd nginx-1.17.6
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx

A continuación, instale Nginx con el siguiente comando:

make
make install

En este punto, Nginx se ha instalado con soporte de LibModsecurity. Ahora puede proceder a configurar Nginx.

Configurar Nginx con ModSecurity

Primero, deberá copiar el archivo de configuración de muestra de ModSecurity del directorio de origen de Nginx al directorio de configuración de Nginx.

Puede copiarlos con el siguiente comando:

cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/

A continuación, cree un enlace simbólico del binario de Nginx a la ruta /usr/sbin/ con el siguiente comando:

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

A continuación, cree el directorio de registro de Nginx con el siguiente comando:

mkdir /var/log/nginx

A continuación, abra el archivo de configuración de Nginx con el siguiente comando:

nano /usr/local/nginx/conf/nginx.conf

Realice los siguientes cambios:

user  nginx;
worker_processes  1;
pid  /run/nginx.pid;
events {
    worker_connections  1024;
}


http {
    include	  mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
	listen       80;
        server_name  your-server-ip;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Guarde y cierre el archivo cuando haya terminado. Luego, verifique Nginx por cualquier error de sintaxis con el siguiente comando:

nginx -t

Debería ver el siguiente resultado:

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

En este punto, Nginx se ha configurado. Puede proceder a crear un archivo de servicio systemd para Nginx.

Crear un archivo de servicio Systemd para Nginx

A continuación, deberá crear un archivo systemd para administrar el servicio Nginx. Puedes crearlo con el siguiente comando:

nano /etc/systemd/system/nginx.service

Agregue las siguientes líneas:

[Unit]
Description=The nginx server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Guarde y cierre el archivo cuando haya terminado. Luego, vuelva a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicie el servicio Nginx y habilítelo para que se inicie después de reiniciar el sistema con el siguiente comando:

systemctl start nginx
systemctl enable --now nginx

Debería ver el siguiente resultado:

Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.

A continuación, verifique el servicio Nginx con el siguiente comando:

systemctl status nginx

Debería ver el siguiente resultado:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-12-30 10:20:01 EST; 41s ago
  Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 17732 (nginx)
    Tasks: 2 (limit: 6102)
   Memory: 5.0M
   CGroup: /system.slice/nginx.service
           ??17732 nginx: master process /usr/sbin/nginx
           ??17733 nginx: worker process

Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server...
Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.

En este punto, Nginx se ha iniciado y se está ejecutando. Ahora puede proceder a configurar ModSecurity.

Configurar ModeSecurity

De forma predeterminada, ModSecurity está configurado en modo de solo detección. Por lo tanto, deberá activar el motor de reglas de ModSecurity. Puedes hacerlo editando el archivo modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Busque la siguiente línea:

SecRuleEngine DetectionOnly

Y reemplácelo con la siguiente línea:

SecRuleEngine On

Busque también la siguiente línea:

/var/log/modsec_audit.log

Y reemplácelo con la siguiente línea:

/var/log/nginx/modsec_audit.log

Guarde y cierre el archivo cuando haya terminado.

A continuación, descargue la última versión de ModSecurity Core Rule Set desde el repositorio de Git usando el siguiente comando:

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Una vez descargado, cambie el nombre del archivo de configuración de ejemplo de CRS con el siguiente comando:

mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf

A continuación, configure ModeSecurity para usar estas reglas editando el archivo /usr/local/nginx/conf/modsecurity.conf:

nano /usr/local/nginx/conf/modsecurity.conf

Agregue las siguientes líneas al final del archivo:

Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf

Guarde y cierre el archivo cuando haya terminado. Luego, reinicie el servicio Nginx para implementar los cambios:

systemctl restart nginx

Prueba ModSecurity

ModSecurity ahora está instalado y configurado. Es hora de probar si funciona o no.

Para probar ModSecurity contra la inyección de comandos, abra su navegador web y escriba la URL http://localhost/index.html?exec=/bin/bash. Debería ver el error 403 Prohibido en la siguiente página:

Para probar ModSecurity contra ataques CSS, abra su terminal y ejecute el siguiente comando:

curl http://localhost/?q="><script>alert(1)</script>"

Deberías obtener el siguiente resultado:

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.17.6</center>
</body>
</html>

Conclusión

¡Felicidades! ha descargado y compilado con éxito LibModSecurity con Nginx. Su servidor ahora está protegido contra varios ataques. Para obtener más información, puede visitar la documentación de ModSecurity en ModSecurity Doc.


Cent OS
  1. Cómo instalar WordPress con Nginx en CentOS 7

  2. Instale Nginx con ngx_pagespeed en CentOS 7

  3. Cómo instalar phpMyAdmin con Nginx en CentOS 7 / RHEL 7

  4. Instalar phpMyAdmin con Nginx en CentOS 7 - ¿Proceso paso a paso?

  5. Cómo instalar Sitemagic CMS en CentOS 7 – Con Nginx

Instalar WordPress con Nginx en CentOS 7 / RHEL 7

Cómo instalar phpMyAdmin con Nginx en CentOS 8 / RHEL 8

Cómo instalar Nginx con ngx_pagespeed en CentOS

Cómo instalar Nginx con PHP-FastCGI en CentOS 6

Cómo instalar Magento con Nginx en CentOS 7

Cómo instalar Laravel con Nginx en CentOS 8