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

Prueba ModSeguridad

LibModSecurity es un firewall de aplicaciones web gratuito y de código abierto que se puede usar 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.
  • Una contrase√Īa de root est√° configurada en el servidor.

Empezando

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.

Instale los repositorios y las dependencias necesarios

Primero, instale el repositorio EPEL y REMI en su sistema. Puedes 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

A continuación, instale 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 utilizando 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.

Descargue y compile 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 el 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 ModSecurity de muestra del directorio de origen de Nginx al directorio de configuración de Nginx.

Puedes 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: Publicidad

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 ModoSeguridad

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

Encuentra la siguiente línea:

SecRuleEngine DetectionOnly

Y, reemplácelo con la siguiente línea:

SecRuleEngine On

También busque 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 ModSeguridad

ModSecurity ahora est√° instalado y configurado. Es hora de probar si est√° funcionando 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:

Prueba ModSeguridad

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *