GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo instalar ModSecurity con Nginx en Rocky Linux 8

ModSecurity es un cortafuegos de aplicaciones web popular, gratuito y de código abierto que se utiliza para proteger las aplicaciones web contra varios tipos de ataques, incluidos la inyección de SQL, las secuencias de comandos entre sitios y la inclusión de archivos locales. Se emplea con frecuencia para proteger sitios web, cPanel y otros paneles de control de alojamiento. Si bien ModSecurity se diseñó principalmente para el servidor web Apache, también puede funcionar con el servidor web Nginx.

En esta publicación, le mostraremos cómo instalar ModSecurity con Nginx en Rocky Linux 8.

Requisitos

  • Un servidor que ejecuta Rocky Linux 8 en Atlantic.Net Cloud Platform
  • Una contraseña de root configurada en su servidor

Paso 1:crear el servidor en la nube de Atlantic.Net

Primero, inicie sesión en su servidor en la nube de Atlantic.Net. Cree un nuevo servidor, eligiendo Rocky Linux 8 como sistema operativo con al menos 2 GB de RAM. Conéctese a su servidor en la nube a través de SSH e inicie sesión con las credenciales resaltadas en la parte superior de la página.

Una vez que haya iniciado sesión en su servidor, ejecute el siguiente comando para actualizar su sistema base con los últimos paquetes disponibles.

dnf update -y

Paso 2:instalar las dependencias requeridas

Primero, deberá instalar todas las dependencias requeridas en su servidor. Puede instalarlos todos con el siguiente comando:

dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y

Luego, instale los repositorios EPEL y Remi usando el siguiente comando:

dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

Luego, instale GeoIP usando el siguiente comando:

dnf --enablerepo=remi install GeoIP-devel -y

Paso 3:instalar ModSecurity

Primero, descargue la última versión de ModSecurity usando el siguiente comando:

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

A continuación, cambie el directorio a ModSecurity e instale los otros módulos con el siguiente comando:

cd ModSecurity
git submodule init
git submodule update

A continuación, compila e instala ModSecurity con el siguiente comando:

./build.sh
./configure
make
make install

Paso 4:instale Nginx con compatibilidad con LibModsecurity

Para habilitar la compatibilidad con LibModsecurity en Nginx, deberá compilar Nginx con compatibilidad con LibModsecurity.

Primero, descargue el conector ModSecurity-nginx usando el siguiente comando:

cd ../
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.19.10.tar.gz

A continuación, extraiga el archivo descargado con el siguiente comando:

tar xzf nginx-1.19.10.tar.gz

A continuación, cree un usuario para Nginx con el siguiente comando:

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

A continuación, cambie el directorio a la fuente de Nginx y compílelo con el siguiente comando:

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

Luego, instálalo usando el siguiente comando:

make
make install

A continuación, copie el archivo de configuración de ModSecurity de muestra y el archivo de asignación de Unicode con el siguiente comando:

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

A continuación, haga una copia de seguridad del archivo de configuración de Nginx:

cp /usr/local/nginx/conf/nginx.conf{,.bak}

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

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

Elimine todas las líneas y agregue las siguientes líneas:

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  nginx.example.com;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access_kifarunix-demo.log;
        error_log  /var/log/nginx/error_kifarunix-demo.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, luego cree un directorio de registro de Nginx:

mkdir /var/log/nginx

Paso 5:cree un archivo de servicio de Systemd para Nginx

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

nano /etc/systemd/system/nginx.service

Agregue las siguientes líneas:

[Unit]
Description=The nginx HTTP and reverse proxy 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, luego cree un enlace simbólico del binario Nginx usando el siguiente comando:

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

A continuación, vuelva a cargar el demonio systemd para aplicar los cambios:

systemctl daemon-reload

A continuación, inicie el servicio Nginx y habilítelo para que se inicie al reiniciar el sistema:

systemctl enable --now nginx

Puede comprobar el estado de Nginx con el siguiente comando:

systemctl status nginx

Obtendrá 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 2021-11-08 09:59:48 UTC; 5s ago
  Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 73048 (nginx)
    Tasks: 2 (limit: 11411)
   Memory: 3.2M
   CGroup: /system.slice/nginx.service
           ├─73048 nginx: master process /usr/sbin/nginx
           └─73049 nginx: worker process

Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server...
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.

Paso 6:habilite la regla ModSecurity

Puede habilitarlo con el siguiente comando:

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf

Además, habilite el registro de auditoría con el siguiente comando:

sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf

Paso 7:instale el conjunto de reglas básicas de OWASP ModSecurity

OWASP proporciona reglas genéricas de detección de ataques para ModSecurity. Puedes descargarlo con el siguiente comando:

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

A continuación, cambie el nombre del archivo de configuración de la regla OWASP con el siguiente comando:

cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

A continuación, defina la regla OWASP en el archivo de configuración de ModSecurity:

echo -e "Include owasp-crs/crs-setup.conf\nInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf

A continuación, reinicie el servicio Nginx para aplicar los cambios:

systemctl restart nginx

Paso 8:Verificar ModSecurity

En este punto, Nginx está instalado y configurado con soporte ModSecurity. Ahora es el momento de probarlo.

Ejecute la siguiente inyección de comando usando el comando curl:

curl localhost/index.html?exec=/bin/bash

Si todo está bien, debería recibir el error "403 Prohibido" como se muestra a continuación:

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

También puede verificar el registro de ModSecurity para obtener más información:

tail -100 /var/log/nginx/modsec_audit.log

Debería ver el siguiente resultado:

---imefFQJy---D--

---imefFQJy---E--
<html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a

---imefFQJy---F--
HTTP/1.1 403
Server: nginx/1.19.10
Date: Mon, 08 Nov 2021 10:00:55 GMT
Content-Length: 154
Content-Type: text/html
Connection: keep-alive

---imefFQJy---H--
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref ""]

Conclusión

En la guía anterior, explicamos cómo instalar ModSecurity con Nginx en Rocky Linux 8. Su servidor web Nginx ahora está protegido con ModSecurity WAF. ModSecurity puede proteger su servidor de una amplia gama de ataques. ¡Empiece hoy mismo con el alojamiento VPS de Atlantic.Net!


Linux
  1. Cómo instalar Apache Tomcat 10 con Nginx en Rocky Linux 8

  2. Cómo instalar Varnish 7 para Nginx en Rocky Linux 8

  3. Cómo instalar Gulp.js en Rocky Linux 8

  4. Cómo instalar el lenguaje de programación Rust en Rocky Linux 8

  5. Cómo instalar Fail2ban con Firewalld en Rocky Linux 8

Cómo instalar el marco Sails.js con Nginx en Rocky Linux 8

Cómo instalar la última línea principal de Nginx en Rocky Linux 8

Cómo instalar phpBB con LEMP en Rocky Linux 8

Cómo instalar la herramienta de monitoreo Icinga 2 en Rocky Linux 8

Cómo instalar Nginx en Rocky Linux 8

Cómo instalar Nginx en Rocky Linux 9