ModSecurity es un firewall de aplicaciones web gratuito y de código abierto compatible con diferentes servidores web como Apache, IIS y Nginx. Se implementa como una capa de seguridad externa para proteger los servidores web.
En este tutorial, aprenderá cómo instalar el firewall ModSecurity con Nginx preinstalado. Hemos utilizado el servidor Ubuntu 20.04 para demostrar el proceso.
Requisitos previos
Servidor Ubuntu 20.04 LTS
Nginx instalado en el servidor Ubuntu
Guía de instalación
Si no tiene Nginx instalado en su servidor, siga esta guía para cumplir con el requisito de instalación de Modsecurity:
https://linuxways.net/ubuntu/how-to-install-nginx-on-ubuntu-20-04-lts-using-source-code/
Ahora que ha instalado Nginx, comencemos con la instalación de ModSecurity.
Paso 1:Instalar libmodsecurity3
En primer lugar, instale git en su máquina para que pueda clonar el repositorio git de ModSecurity. Podemos hacerlo ejecutando este comando:
sudo apt install git -y
Ahora que git está instalado, clone el repositorio ejecutando este comando:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/
Paso 2:Vaya al directorio de Modsecurity
Ahora que ha clonado el repositorio git de modsecurity, vaya al directorio de modsecurity siguiendo la ruta a continuación:
cd /usr/local/src/ModSecurity/
Paso 3:Instale las dependencias de libmodsecurity3
Ahora que estamos dentro del directorio de Modsecurity, instalaremos las dependencias de libmodsecurity3 en este paso. Ejecute este comando:
sudo apt install gcc make build-essential autoconf automake libtool libcurl4-openssl-dev liblua5.3-dev libfuzzy-dev ssdeep gettext pkg-config libpcre3 libpcre3-dev libxml2 libxml2-dev libcurl4 libgeoip-dev libyajl-dev doxygen -y
Paso 4:Instalar módulos Git
Ahora, instala los submódulos de git con la ayuda de este comando:
git submodule init
A continuación, actualizaremos los submódulos:
git submodule update
Paso 5:Cree el entorno de modsecurity
Es hora de construir el entorno de modsecurity. Para hacer eso, ejecute el siguiente comando:
./build.sh
Ahora configura usando este comando:
./configure
Después de esto, obtendrá este error:
Está bien ignorar esto y seguir adelante.
Paso 6:Compile el código fuente de modsecurity
Ahora compilaremos el entorno para libmodsecurity3 con este comando:
make
Si desea aumentar la velocidad de compilación, puede especificar -j
make -j 4
A continuación, ejecutaremos el comando de instalación:
sudo make install
La instalación se realiza en el /usr/local/modsecurity/ .
Step 7: Install modsecurity-nginx connector
En este paso, instalaremos el conector Modsecurity-nginx. Es el punto de conexión y comunicación entre Nginx y ModSecurity.
En primer lugar, necesitamos clonar el repositorio del conector. Hágalo ejecutando este comando:
sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
/usr/local/src/ModSecurity-nginx/
Paso 8:Instale las dependencias de modsecurity-nginx
Primero, vaya al directorio fuente de Nginx así:
cd /usr/local/src/nginx/nginx-1.21.1
Asegúrese de reemplazar la versión de Nginx en el comando con su versión actual de Nginx; de lo contrario, obtendrá un error.
Para instalar las dependencias necesarias, ejecute este comando:
sudo apt build-dep nginx && sudo apt install uuid-dev -y
A continuación, compilaremos el módulo del conector Modsecurity-nginx con el indicador –with-compat ejecutando este comando:
sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx
Ahora ejecute este comando para crear los módulos dinámicos:
sudo make modules
Ahora, copie el módulo dinámico que acaba de crear en objs/ngx_http_modsecurity_module.so a /usr/share/nginx/modules con la ayuda de este comando:
sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/
Paso 9:habilite Modsecurity en el archivo de configuración de Nginx
Para habilitar Modsecurity en Nginx, primero debe especificar el módulo de carga y la ruta a su módulo de modsecurity en la configuración.
Abra el archivo de configuración de Nginx con el editor nano de esta manera:
sudo nano /etc/nginx/nginx.conf
En el archivo, agregue esta línea en la parte superior:
load_module modules/ngx_http_modsecurity_module.so;
En la sección HTTP {}, agregue las siguientes líneas de código:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;
Paso 10:Configure el directorio y los archivos para modsecurity
Cree un directorio con el nombre modsec. La ruta del directorio se menciona en el comando:
sudo mkdir /etc/nginx/modsec/
Necesitará este directorio en el futuro para almacenar reglas y archivos de configuración.
Ahora, copie el archivo de configuración de Modsecurity de muestra del directorio git clonado con este comando:
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
Ahora abra el archivo de configuración de modsecurity:
sudo nano /etc/nginx/modsec/modsecurity.conf
Localice la directiva SecRuleEngine en el archivo de la línea 7 y cámbiela a DetectionOnly así:
secruleSolo detección de motor
Para habilitar Modsecurity, busca cambiar la siguiente directiva a On así:
secRuleEngine on
Ahora busque la siguiente directiva en la línea 224:
secAuditLogParts ABIJDEFHZ
Cámbialo por:
secAuditLogParts ABCDEFHJKZ
Ahora cree el archivo modsec-config.conf. Aquí agregará modsecurity.conf y otras reglas para modsecurity:
sudo nano /etc/nginx/modsec/modsec-config.conf
Dentro del archivo que acaba de crear, agregue esta línea:
Include /etc/nginx/modsec/modsecurity.conf
Guarde el archivo y salga.
Paso 11:Copie el archivo unicode.mapping
Finalmente, copie el archivo unicode.mapping de Modsecurity así:
sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/
Paso 12:Comprobar la configuración de Nginx
Antes de reiniciar Nginx, compruebe si la configuración está bien ejecutando este comando:
sudo nginx -t
Si obtiene el siguiente resultado, está listo para comenzar:
Paso 13:Recargar Nginx
Ahora reinicie Nginx con este comando:
sudo systemctl restart nginx
En esta guía, vimos cómo podemos instalar Modsecurity en un servidor ubuntu que ya tiene Nginx preinstalado. También vimos cómo configurar ModSecurity y Nginx para conectarlos con la ayuda de algunos comandos fáciles de seguir.