Cómo instalar el conjunto de reglas básicas de ModSecurity 3 y OWASP con Nginx en Rocky Linux 8

ModSecurity, a menudo denominado Modsec, es un firewall de aplicaciones web de código abierto y gratuito (WAF). ModSecurity se creó como un módulo para el servidor HTTP Apache. Sin embargo, desde sus inicios, WAF ha crecido y ahora cubre una variedad de capacidades de filtrado de solicitudes y respuestas del Protocolo de transferencia de hipertexto para varias plataformas como Microsoft IIS, Nginx y Apache.

Cómo funciona WAF, el motor ModSecurity se implementa delante de la aplicación web, lo que permite que el motor escanee las conexiones HTTP entrantes y salientes. ModSecurity se usa más comúnmente junto con el Conjunto de reglas básicas de OWASP (CRS), un conjunto de reglas de código abierto escritas en el lenguaje SecRules de ModSecurity y es muy apreciado entre la industria de la seguridad.

El conjunto de reglas de OWASP con ModSecurity puede ayudar a proteger casi instantáneamente su servidor contra:

  • Malos agentes de usuario
  • DDOS
  • Scripting de sitios web cruzados
  • inyección SQL
  • Secuestro de sesión
  • Otras amenazas

En el siguiente tutorial, aprenderá cómo instalar ModSecurity con Nginx en Rocky Linux 8.

Índice del contenido

Anuncio

Requisitos previos

  • SO recomendado: Rocky Linux 8. +.
  • Cuenta de usuario: Una cuenta de usuario con acceso sudo o root.
  • Acceso a Internet

Actualizar sistema operativo

Actualice su Rocky Linux sistema operativo para asegurarse de que todos los paquetes existentes estén actualizados:

Anuncio
sudo dnf upgrade --refresh -y

El tutorial utilizará el comando sudo y asumiendo que tienes el estado de sudo.

Para verificar el estado de sudo en su cuenta:

sudo whoami

Salida de ejemplo que muestra el estado de sudo:

[joshua@rockylinux ~]$ sudo whoami
root

Para configurar una cuenta sudo nueva o existente, visite nuestro tutorial en Cómo agregar un usuario a Sudoers en Rocky Linux.

Anuncio

Para utilizar el cuenta root, use el siguiente comando con la contraseña de root para iniciar sesión.

su

Habilitar el repositorio de EPEL

Para instalar correctamente ModSecurity con Rocky Linux 8, deberá habilitar el repositorio EPEL para completar la instalación de Modsecurity.

Anuncio

Instale el repositorio de EPEL:

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y

Instale el último Nginx en Rocky Linux 8

De forma predeterminada, puede mantener su versión existente de Nginx instalada si puede encontrar una fuente de versión coincidente. De lo contrario, se recomienda instalar la última versión estable o la versión principal de Nginx, ya que el tutorial se explica a continuación.

Eliminar la instalación existente de Nginx

Detenga el servicio actual de Nginx:

Anuncio
sudo systemctl stop nginx

Ahora elimine la instalación de Nginx existente de la siguiente manera:

sudo dnf remove nginx

Agregar el repositorio de Ngnix

Ahora que ha eliminado con éxito la versión anterior de Nginx, si la tenía instalada, para instalar la línea principal de Nginx, primero debe instalar la dependencia, que es dnf-utilidades con el siguiente comando:

sudo dnf install dnf-utils -y

Una vez instalado, use su editor de texto favorito, cree el siguiente archivo:

Anuncio
sudo nano /etc/yum.repos.d/nginx.repo

A continuación, debe agregar el siguiente código, que especifica los repositorios de Nginx desde los que puede instalar estable o desde la línea principal:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Para ahorrar uso (CTRL + O), luego salir (CTRL + X).

Anuncio

Instala el Nginx

De forma predeterminada, primero se usa el último repositorio para paquetes Nginx estables. Sin embargo, el tutorial instalará Línea principal de Nginx, por lo que deberá ejecutar el siguiente comando para habilitar el repositorio de la línea principal de la siguiente manera:

sudo yum-config-manager --enable nginx-mainline

Tenga en cuenta que si prefiere estable, no use el comando anterior y continúe con la siguiente parte del tutorial.

A continuación, instale la línea principal de Nginx de la siguiente manera:

sudo dnf install nginx
Cómo instalar ModSecurity con Nginx en Rocky Linux 8

Tenga en cuenta que verá una ventana emergente que le notifica acerca de la importación de Clave GPG durante la instalación. Esta es seguro hacerlo y es necesario para terminar de instalar correctamente la línea principal de Nginx.

Anuncio
Cómo instalar ModSecurity con Nginx en Rocky Linux 8

Tipo Y, luego presione la TECLA ENTER para continuar.

Anuncio

De forma predeterminada, Nginx no viene habilitado y se desactiva en la instalación. Para activar su servicio Nginx, use:

sudo systemctl start nginx

Para permitir que Nginx se inicie en el arranque, use el siguiente comando:

sudo systemctl enable nginx

Para verificar su versión de Nginx, nuestro caso es la versión de Nginx Mainline, use el siguiente comando para confirmar:

nginx -v

Ejemplo de salida:

Cómo instalar ModSecurity con Nginx en Rocky Linux 8

Configurar cortafuegos para Nginx

Si no está reemplazando un servicio Nginx existente e instalando Nginx por primera vez, es posible que deba configurar el firewall para el tráfico HTTP y HTTPS. A continuación, se muestra un ejemplo de cómo hacer esto:

Anuncio
Anuncio

Para permitir el tráfico HTTP, utilice el siguiente comando:

sudo firewall-cmd --permanent --zone=public --add-service=http

Para permitir el tráfico HTTPS, utilice el siguiente comando:

sudo firewall-cmd --permanent --zone=public --add-service=https

Una vez hecho esto, debe hacer que los cambios sean efectivos volviendo a cargar el firewall:

sudo firewall-cmd --reload

Descarga Nginx Source

Deberá descargar el código fuente de Nginx para compilar ModSecurity módulo dinámico. Deberá descargar y almacenar el paquete fuente en la ubicación del directorio / etc / local / src / nginx.

Crear y configurar directorios

Cree la ubicación de la siguiente manera:

Anuncio
sudo mkdir /usr/local/src/nginx && cd /usr/local/src/nginx

Opcional: asigne permiso al directorio si es necesario como se indica a continuación:

Anuncio
sudo chown username:username /usr/local/src/ -R

Descargar archivo fuente

A continuación, descargue el archivo fuente de Nginx de la página de descargas para que coincida con la versión de Nginx que identificó anteriormente. Incluso si no actualizó a la última versión de Nginx estable o principal y usó una versión anterior, debería poder encontrar una fuente que coincida con la suya.

Descargue la fuente usando el wget comando de la siguiente manera (solo ejemplo):

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

A continuación, extraiga el archivo de la siguiente manera:

tar -xvzf nginx-1.21.1.tar.gz

Verificar la versión de origen

A continuación, enumere los archivos de directorios con el ls comando de la siguiente manera:

Anuncio
ls

Salida de ejemplo en su / usr / src / local / nginx directorio:

jjames@rockylinux:/usr/local/src/nginx$ ls
nginx-1.21.1

nginx_1.21.1.orig.tar.gz

A continuación, confirme que el paquete fuente es el mismo que su versión de Nginx instalada en su sistema operativo Rocky Linux.

Anuncio

Para hacer esto, use lo siguiente nginx -v comando de la siguiente manera:

nginx -v

Debería obtener la misma versión de salida que la fuente de la siguiente manera:

jjames@rockylinux:/usr/local/src/nginx$ nginx -v
nginx version: nginx/1.21.1

Instale libmodsecurity3 para ModSecurity

El paquete libmodsecurity3 es la parte fundamental del WAF que hace la Filtrado HTTP para sus aplicaciones web. Compilarás desde la fuente.

Anuncio

Clonar ModSecurity Repsoitory de Github

El primer paso es el clon de Github, y si no tienes git instalado, deberás ejecutar el siguiente comando:

sudo dnf install git -y

A continuación, clone el libmodsecurity3 GIT repositorio de la siguiente manera:

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

Una vez clonado, necesitará CD al directorio:

Anuncio
cd /usr/local/src/ModSecurity/

Instalar las dependencias de libmodsecurity3

Para compilar, deberá instalar las siguientes dependencias de la siguiente manera:

sudo 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 -y

A continuación, instale otras dependencias utilizando el repositorio de PowerTool:

Anuncio
sudo dnf --enablerepo=powertools install doxygen yajl-devel -y

Ahora instale GeoIP usando el repositorio REMI que agregó al comienzo del tutorial:

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

Ahora para terminar, instale los siguientes submódulos GIT de la siguiente manera:

git submodule init

Luego actualice los submódulos:

git submodule update

Construyendo el entorno de ModSecurity

El siguiente paso ahora es, en realidad, construir primero el entorno. Utilice el siguiente comando:

Anuncio
./build.sh

A continuación, ejecute el comando configure:

Anuncio
./configure

Tenga en cuenta que posiblemente verá el siguiente error

fatal: No names found, cannot describe anything.

Puede ignorar esto con seguridad y pasar al siguiente paso.

Vea también  Cómo instalar Java en Rocky Linux 9

Compilar el código fuente de ModSecurity

Ahora que ha creado y configurado el entorno para libmodsecurity3, es hora de compilarlo con el comando para lograr.

make

Un truco útil es especificar el -j ya que esto puede aumentar significativamente la velocidad de compilación si tiene un servidor potente. por ejemplo, el LinuxCapable El servidor tiene 6 CPU y puedo usar las 6 o al menos usar 4 o 5 para aumentar la velocidad.

make -j 6

Después de compilar el código fuente, ahora ejecute el comando de instalación en su terminal:

Anuncio
Anuncio
sudo make install

Tenga en cuenta que la instalación se realiza en el / usr / local / modsecurity /, al que hará referencia más adelante en la guía.

Instalar el conector ModSecurity-nginx

Los programas Conector ModSecurity-nginx es el punto de conexión entre Nginx y libmodsecurity. Es el componente que se comunica entre Nginx y ModSecurity (libmodsecurity3).

Clonar ModSecurity-nginx Repsoitory de Github

Al igual que en el paso anterior para clonar el repositorio libmodsecurity3, deberá volver a clonar el repositorio de conectores con el siguiente comando:

sudo git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Instalar ModSecurity-nginx

A continuación, coloque el directorio del CD en el directorio de origen de Nginx de la siguiente manera:

cd /usr/local/src/nginx/nginx-1.21.1

Tenga en cuenta que reemplace la versión de la guía con la versión actual de Nginx en su sistema.

Anuncio

A continuación, compilará el Conector ModSecurity-nginx módulo solo con el –Con-compat marcar de la siguiente manera:

Anuncio
sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Actualmente para lograr (cree) los módulos dinámicos con el siguiente comando:

sudo make modules

A continuación, mientras se encuentra en el directorio de origen de Nginx, use el siguiente comando para mover el módulo dinámico que creó y que se guardó en la ubicación objs / ngx_http_modsecurity_module.so y copiarlo en el / usr / share / nginx / modules / directorio.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Cargue y configure el conector ModSecurity-nginx con Nginx

Ahora que ha compilado el módulo dinámico y lo ha ubicado en consecuencia, debe editar su /etc/nginx/nginx.conf archivo de configuración para que ModSecurity funcione con su servidor web Nginx.

Habilite ModSecurity en nginx.conf

En primer lugar, debe especificar módulo_carga y ruta a su módulo modsecurity.

Anuncio

Abrir nginx.conf con cualquier editor de texto.

sudo nano /etc/nginx/nginx.conf

A continuación, agregue la siguiente línea al archivo cerca de la parte superior:

Anuncio
load_module modules/ngx_http_modsecurity_module.so;

Si ha ubicado el módulo en otro lugar, incluya la ruta completa.

Ahora agregue el siguiente código debajo del HTTP {} sección de la siguiente manera:

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/modsec-config.conf;

Solo ejemplo:

Anuncio
Cómo instalar ModSecurity con Nginx en Rocky Linux 8

Si ha ubicado el módulo en otro lugar, incluya la ruta completa.

Guarde el nginx.conf presentar (CTRL + O), luego salir (CTRL + X).

Crear y configurar directorios y archivos para ModSecurity

Deberá crear un directorio para almacenar los archivos de configuración y las reglas futuras, SRC OWASP para el tutorial.

Anuncio

Utilice el siguiente comando para crear el / etc / nginx / modsec directorio de la siguiente manera:

sudo mkdir -p /etc/nginx/modsec/

Ahora, debe copiar el archivo de configuración de ModSecurity de muestra de nuestro archivo clonado. GIT directorio:

Anuncio
sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Usando su editor de texto favorito en Rocky Linux, abra el modsecurity.conf archivo de la siguiente manera:

sudo nano /etc/nginx/modsec/modsecurity.conf

De forma predeterminada, la configuración de ModSecurity tiene el motor de reglas especificado como (Solo detección), que en otras palabras, ejecuta ModSecurity y detecta todos los comportamientos maliciosos, pero no bloquea o prohíbe y registra todas las transacciones HTTP que marca. Esto solo debe usarse si tiene muchos falsos positivos o ha aumentado la configuración del nivel de seguridad a un nivel extremo y ha realizado pruebas para ver si se producen falsos positivos.

Para cambiar este comportamiento a (en), encuentre lo siguiente en línea 7:

SecRuleEngine DetectionOnly

Cambie la línea a esto para habilitar ModSecurity:

Anuncio
SecRuleEngine On

Ahora, debe ubicar lo siguiente, que se encuentra en línea 224:

Anuncio
# Log everything we know about a transaction.
SecAuditLogParts ABIJDEFHZ

Esto no es correcto y debe cambiarse. Modifique la línea a lo siguiente:

SecAuditLogParts ABCEFHJKZ

Ahora guarda el modsecurity.conf El uso de archivos (CTRL + O) luego salir (CTRL + X).

La siguiente parte es crear el siguiente archivo modsec-config.conf. Aquí agregarás el modsecurity.conf archivar junto y más tarde en otras reglas como SRC OWASP, y si está utilizando WordPress, el SRC de WPRS conjunto de reglas.

Utilice el siguiente comando para crear el archivo y abrirlo:

sudo nano /etc/nginx/modsec/modsec-config.conf

Una vez dentro del archivo, agregue la siguiente línea:

Anuncio
Anuncio
Include /etc/nginx/modsec/modsecurity.conf

Guarde el modsec-config.conf archivo con (CTRL + O) luego (CTRL + X) salida.

Por último, copie ModSecurity's unicode.mapping presentar ante la CP comando de la siguiente manera:

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Ahora, antes de continuar, debe probar su servicio Nginx con el siguiente comando de terminal:

sudo nginx -t

Si ha configurado todo correctamente, debería obtener el siguiente resultado:

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

Para hacer los cambios en vivo, reinicie su servicio Nginx usando el systemctl mando:

Anuncio
sudo systemctl restart nginx

Instale el conjunto de reglas básicas de OWASP para ModSecurity

ModSecurity por sí solo no protege su servidor web y necesita tener reglas. Una de las reglas más famosas, respetadas y conocidas es el conjunto de reglas OWASP CRS. Las reglas son las más utilizadas entre los servidores web y otros WAF, y la mayoría de los otros sistemas similares basan la mayoría de sus reglas en este CRS. La instalación de este conjunto de reglas le brindará automáticamente una gran fuente de protección contra la mayoría de las amenazas emergentes en Internet al detectar actores maliciosos y bloquearlos.

Anuncio

Usando el  comando wget, descargar el Archivo OWASP CRS 3.3.2 como sigue:

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.2.zip

Para aquellos que quieren vivir al límite, pueden descargar la compilación nocturna. Solo use nightly si está preparado para seguir compilando y revisando CoreRuleSet Github con frecuencia para obtener actualizaciones y tener más confianza para resolver problemas. Técnicamente, la noche puede ser más segura, pero potencialmente puede crear problemas.

Para usuarios novatos, use la versión estable y no use la versión a continuación.

wget https://github.com/coreruleset/coreruleset/archive/refs/tags/nightly.zip

Instale la Descomprimir paquete si no tiene esto instalado en su servidor:

Anuncio
sudo dnf install unzip -y

Actualmente abrir la cremallera el maestro.zip archivar de la siguiente manera:

sudo unzip v3.3.2.zip -d /etc/nginx/modsec

Como antes, como el modsecurity.conf configuración de muestra, SRC OWASP viene con un archivo de configuración de muestra que necesita cambiar de nombre. Es mejor usar el CP comando y guarde una copia de seguridad para el futuro en caso de que necesite reiniciar nuevamente.

Anuncio
sudo cp /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf

Para habilitar las reglas, abra el /etc/nginx/modsec/modsec-config.conf usando cualquier editor de texto nuevamente:

sudo nano /etc/nginx/modsec/modsec-config.conf

Una vez dentro del archivo nuevamente, agregue las siguientes dos líneas adicionales:

Include /etc/nginx/modsec/coreruleset-3.3.2/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.2/rules/*.conf

Guarda el archivo (CTRL + O) y salir (CTRL + T).

Anuncio

Como se indicó anteriormente, debe probar las nuevas incorporaciones a su servicio Nginx antes de ponerlo en funcionamiento:

sudo nginx -t

Debería obtener el siguiente resultado, lo que significa que todo está funcionando correctamente:

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

Reinicie su servicio Nginx para que los cambios estén activos de la siguiente manera:

Anuncio
sudo systemctl restart nginx

Uso y comprensión de OWASP CRS

La regla central de OWASP tiene bastantes opciones, sin embargo, la configuración predeterminada, lista para usar, protegerá la mayoría de los servidores de inmediato sin dañar a sus visitantes naturales y buenos bots de SEO. A continuación, se cubrirán algunas áreas para ayudar a explicar. La lectura adicional sería mejor para investigar todas las opciones en los propios archivos de configuración, ya que tienen bastantes datos de texto para explicar cuáles son.

Vea también  Cómo instalar VirtualBox Ubuntu Linux 22.04/20.04

Abre tu CRS-setup.conf archivo de la siguiente manera:

Anuncio
sudo nano /etc/nginx/modsec/coreruleset-3.4-dev/crs-setup.conf

Tenga en cuenta que esta es la configuración de la versión dev con elementos adicionales en comparación con la versión 3.3.

Desde aquí, puede modificar la mayoría de las configuraciones de OWASP CRS.

Puntaje OWASP CRS

Para desglosarlo, ModSecurity tiene dos modos:

Modo de puntuación de anomalías

Anuncio
# -- [[ Anomaly Scoring Mode (default) ]] --
# In CRS3, anomaly mode is the default and recommended mode, since it gives the
# most accurate log information and offers the most flexibility in setting your
# blocking policies. It is also called "collaborative detection mode".
# In this mode, each matching rule increases an 'anomaly score'.
# At the conclusion of the inbound rules, and again at the conclusion of the
# outbound rules, the anomaly score is checked, and the blocking evaluation
# rules apply a disruptive action, by default returning an error 403.

Modo autónomo

Anuncio
# -- [[ Self-Contained Mode ]] --
# In this mode, rules apply an action instantly. This was the CRS2 default.
# It can lower resource usage, at the cost of less flexibility in blocking policy
# and less informative audit logs (only the first detected threat is logged).
# Rules inherit the disruptive action that you specify (i.e. deny, drop, etc).
# The first rule that matches will execute this action. In most cases this will
# cause evaluation to stop after the first rule has matched, similar to how many
# IDSs function.

La puntuación de anomalías es generalmente para la mayoría de los usuarios el mejor modo a utilizar.

Hay cuatro niveles de paranoia:

  • Paranoia Nivel 1 - Nivel predeterminado y recomendado para la mayoría de usuarios.
  • Paranoia Nivel 2 - Solo usuarios avanzados.
  • Paranoia Nivel 3 - Solo usuarios expertos.
  • Paranoia Nivel 4 - No se recomienda en absoluto, excepto en circunstancias excepcionales.
# -- [[ Paranoia Level Initialization ]] ---------------------------------------
#
# The Paranoia Level (PL) setting allows you to choose the desired level
# of rule checks that will add to your anomaly scores.
#
# With each paranoia level increase, the CRS enables additional rules
# giving you a higher level of security. However, higher paranoia levels
# also increase the possibility of blocking some legitimate traffic due to
# false alarms (also named false positives or FPs). If you use higher
# paranoia levels, it is likely that you will need to add some exclusion
# rules for certain requests and applications receiving complex input.
#
# - A paranoia level of 1 is default. In this level, most core rules
#   are enabled. PL1 is advised for beginners, installations
#   covering many different sites and applications, and for setups
#   with standard security requirements.
#   At PL1 you should face FPs rarely. If you encounter FPs, please
#   open an issue on the CRS GitHub site and don't forget to attach your
#   complete Audit Log record for the request with the issue.
# - Paranoia level 2 includes many extra rules, for instance enabling
#   many regexp-based SQL and XSS injection protections, and adding
#   extra keywords checked for code injections. PL2 is advised
#   for moderate to experienced users desiring more complete coverage
#   and for installations with elevated security requirements.
#   PL2 comes with some FPs which you need to handle.
# - Paranoia level 3 enables more rules and keyword lists, and tweaks
#   limits on special characters used. PL3 is aimed at users experienced
#   at the handling of FPs and at installations with a high security
#   requirement.
# - Paranoia level 4 further restricts special characters.
#   The highest level is advised for experienced users protecting
#   installations with very high security requirements. Running PL4 will
#   likely produce a very high number of FPs which have to be
#   treated before the site can go productive.
#
# All rules will log their PL to the audit log;
# example: [tag "paranoia-level/2"]. This allows you to deduct from the
# audit log how the WAF behavior is affected by paranoia level.
#
# It is important to also look into the variable
# tx.enforce_bodyproc_urlencoded (Enforce Body Processor URLENCODED)
# defined below. Enabling it closes a possible bypass of CRS.

Pruebe OWASP CRS en su servidor

Para probar si las reglas de OWASP están funcionando en su servidor, abra su navegador de Internet y use lo siguiente:

https://www.yourdomain.com/index.html?exec=/bin/bash

Deberías recibir un Error 403 prohibido. Si no es así, se ha omitido un paso.

Falta cambiar el problema más común Solo detección a En, como se cubrió anteriormente en el tutorial.

Anuncio
Anuncio

Manejo de falsos positivos y exclusión de reglas personalizadas

Una de las tareas a menudo interminables es lidiar con falsos positivos, ModSecurity y OWASP CRS hacen un gran trabajo juntos, pero a costa de su tiempo, pero dada la protección, vale la pena. Para empezar, nunca poner el nivel de paranoia muy alto es la regla de oro.

Una buena regla general es ejecutar el conjunto de reglas durante unas pocas semanas o meses sin casi ningún falso positivo, luego aumentar, por ejemplo, el nivel de paranoia 1 al nivel de paranoia 2, para que no se vea abrumado por una tonelada simultáneamente.

Exclusión de aplicaciones conocidas de falsos positivos

Modsecurity, de forma predeterminada, puede incluir en la lista blanca las acciones diarias que conducen a falsos positivos como se muestra a continuación:

#SecAction \
# "id:900130,\
#  phase:1,\
#  nolog,\
#  pass,\
#  t:none,\
#  setvar:tx.crs_exclusions_cpanel=1,\
#  setvar:tx.crs_exclusions_dokuwiki=1,\
#  setvar:tx.crs_exclusions_drupal=1,\
#  setvar:tx.crs_exclusions_nextcloud=1,\
#  setvar:tx.crs_exclusions_phpbb=1,\
#  setvar:tx.crs_exclusions_phpmyadmin=1,\
#  setvar:tx.crs_exclusions_wordpress=1,\
#  setvar:tx.crs_exclusions_xenforo=1"

Para habilitar, por ejemplo, WordPress, phpBB y phpMyAdmin como usas los tres, descomentar las líneas y deja el (1) número intacto, cambie los otros servicios que no utiliza, por ejemplo, Xenforo a (0) ya que no desea incluir estas reglas en la lista blanca. Ejemplo a continuación:

SecAction \
"id:900130,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.crs_exclusions_cpanel=0,\
setvar:tx.crs_exclusions_dokuwiki=0,\
setvar:tx.crs_exclusions_drupal=0,\
setvar:tx.crs_exclusions_nextcloud=0,\
setvar:tx.crs_exclusions_phpbb=1,\
setvar:tx.crs_exclusions_phpmyadmin=1,\
setvar:tx.crs_exclusions_wordpress=1,\
setvar:tx.crs_exclusions_xenforo=0"

También puede modificar la sintaxis, que sería más limpia. Por ejemplo:

Anuncio
SecAction \
"id:900130,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.crs_exclusions_phpbb=1,\
setvar:tx.crs_exclusions_phpmyadmin=1,\
setvar:tx.crs_exclusions_wordpress=1"

Como puede ver, se eliminan las opciones que no son necesarias y se agregan (“) al final de WordPress para una sintaxis correcta.

Anuncio

Excluir reglas en antes de CRS

Para hacer frente a las exclusiones personalizadas, en primer lugar, debe cambiar el nombre del REQUEST-900-EXCLUSION-RULES-ANTES-CRS-SAMPLE.conf presentar ante la comando cp como sigue:

sudo cp /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /etc/nginx/modsec/coreruleset-3.4-dev/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

Un punto para recordar, al crear reglas de exclusión, cada una debe tener id: y sea único, de lo contrario, cuando pruebe su servicio Nginx, obtendrá un error. Ejemplo "Id: 1544, fase: 1, log, allow, ctl: ruleEngine = off", la identificación 1544 no se puede utilizar para una segunda regla.

Vea también  Cómo instalar MPV Media Player en Rocky Linux 9

Por ejemplo, algunos REQUEST_URI generarán falsos positivos. El siguiente ejemplo es dos con la baliza de velocidad de página de Google y el complemento WMUDEV para WordPress:

SecRule REQUEST_URI "@beginsWith /wp-load.php?wpmudev" "id:1544,phase:1,log,allow,ctl:ruleEngine=off"
SecRule REQUEST_URI "@beginsWith /ngx_pagespeed_beacon" "id:1554,phase:1,log,allow,ctl:ruleEngine=off"

Como puede ver, cualquier URL que comience con la ruta se permitirá automáticamente.

Anuncio

Otra opción es incluir las direcciones IP en la lista blanca, algunas formas de hacerlo:

SecRule REMOTE_ADDR "^195\.151\.128\.96" "id:1004,phase:1,nolog,allow,ctl:ruleEngine=off"
## or ###
SecRule REMOTE_ADDR "@ipMatch 127.0.0.1/8, 195.151.0.0/24, 196.159.11.13" "phase:1,id:1313413,allow,ctl:ruleEngine=off"

Los programas @ipPartido se puede utilizar más ampliamente para subredes. Si quieres negar un subred or Dirección IP cambiar, permitir negar. Con algunos conocimientos, también puede crear listas negras y listas blancas y configurar esto con fail2ban. Las posibilidades a menudo pueden ser infinitas.

Anuncio

Un último ejemplo es deshabilitar solo las reglas que desencadenan falsos positivos, no incluir en la lista blanca toda la ruta, como vio con el primer ejemplo de REQUEST_URI. Sin embargo, esto requiere más tiempo y pruebas. Por ejemplo, desea eliminar reglas 941000 y 942999 desde su / admin / area, ya que sigue activando prohibiciones y bloqueos falsos para su equipo, busque en su archivo de registros de modsecurity el ID de la regla y luego deshabilite solo ese ID con Eliminar por ID como el siguiente ejemplo:

SecRule REQUEST_FILENAME "@beginsWith /admin" "id:1004,phase:1,pass,nolog,ctl:ruleRemoveById=941000-942999"

Se pueden encontrar ejemplos en ModSecurity GIT página wiki; LinuxCapable creará, en el futuro, un tutorial sobre esta parte, ya que hay mucho que cubrir.

Opcional: incluir Project Honeypot

Proyecto Honey Pot es el primer y único sistema distribuido para identificar a los spammers y los spambots que utilizan para extraer direcciones de su sitio web. Con el sistema Project Honey Pot, puede instalar direcciones etiquetadas personalizadas para la hora y la dirección IP de un visitante de su sitio. Si una de estas direcciones comienza a recibir correo electrónico, podemos decir que los mensajes son spam, el momento exacto en que se recopiló la dirección y la dirección IP que la recopiló.

Anuncio

ModSecurity puede tener la opción de integrar Project Honeypot, que consultará la base de datos y bloqueará cualquier dirección que esté en la lista negra de HoneyPot. Tenga en cuenta que usar esto puede generar falsos positivos, pero en general se considera muy confiable en comparación con alternativas similares.

Paso 1. Crea una cuenta a cuenta gratis.

Paso 2. Una vez que se haya registrado e iniciado sesión, en el tablero, busque la línea (Su http: clave API BL) y haga clic conseguir uno.

Anuncio
Cómo instalar ModSecurity con Nginx en Rocky Linux 8

Paso 3. Vuelva al archivo CRS-setup.conf abriéndolo con un editor de texto:

sudo nano /etc/nginx/modsec/coreruleset-3.4-dev/crs-setup.conf

Paso 4. Encuentra la línea que comienza con #SecHttpBlKey, que está en la línea 629.

Anuncio
#SecHttpBlKey XXXXXXXXXXXXXXXXX
#SecAction "id:900500,\
#  phase:1,\
#  nolog,\
#  pass,\
#  t:none,\
#  setvar:tx.block_search_ip=1,\
#  setvar:tx.block_suspicious_ip=1,\
#  setvar:tx.block_harvester_ip=1,\
#  setvar:tx.block_spammer_ip=1"

Paso 5. Cambie SecHttpBlKey XXXXXXXXXXXXXXXXX con su clave de Project HoneyPot.

Ejemplo:

SecHttpBlKey amhektvkkupe

Paso 6. A continuación, descomente todas las líneas para habilitar la regla. Si desea desactivar una regla, en lugar de (1), coloque (0) en su lugar para desactivar la opción de escaneo Project Honeypot.

De forma predeterminada, block_search_ip = 0 es para bots de motores de búsqueda, no lo habilite a menos que desee que Bing, Google y otros buenos bots lleguen a su sitio.

Anuncio
SecHttpBlKey amhektvkkupe
SecAction "id:900500,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.block_search_ip=0,\
setvar:tx.block_suspicious_ip=1,\
setvar:tx.block_harvester_ip=1,\
setvar:tx.block_spammer_ip=1"

Nota, no use amhektvkkupe. ¡Usa tu llave en su lugar!

Anuncio

Paso 7. Pruebe Nginx para asegurarse de que no se hayan producido errores con lo siguiente:

sudo nginx -t

Salida de ejemplo si todo es correcto:

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

Ahora reinicie su servicio Nginx:

sudo systemctl restart nginx

Conjunto de reglas de WordPress WPRS para ModSecurity

Otra opción para WordPress los usuarios es instalar y ejecutar junto con su conjunto de reglas OWASP CRS, un proyecto bien conocido titulado Conjunto de reglas WPRS. Como esto es opcional y no es para todos, el tutorial no lo cubrirá en esta sección.

Sin embargo, si desea instalar esto para obtener protección adicional si usa WordPress en su servidor, visite nuestro tutorial en Instalación de WordPress ModSecurity Rule Set (WPRS).

Anuncio
Anuncio

Crear archivo ModSecurity LogRotate

Dada la cantidad de líneas e información que puede registrar, ModSecurity crecerá con bastante rapidez. Como está compilando el módulo y no está instalado a través de ningún repositorio oficial de Rocky Linux, deberá crear su propio archivo de rotación de registro.

Primero, cree y abra su archivo de rotación ModSecurity modsec:

sudo nano /etc/logrotate.d/modsec

Agrega el siguiente código:

/var/log/modsec_audit.log
{
        rotate 31
        daily
        missingok
        compress
        delaycompress
        notifempty
}

Esto mantendrá registros para 31 dias. Si prefiere tener menos, cambie 31 decir 7 días igualmente el valor de registros de una semana. Debería rotar diariamente por ModSecurity. Si necesita revisar los archivos de registro, tener un archivo semanal será un desastre para examinar, dado lo grande que será.

Opcional: Nginx seguro con Let's Encrypt SSL Free Certificate

Idealmente, querría ejecutar su Nginx en HTTPS usando un certificado SSL. La mejor forma de hacer esto es usar Vamos a cifrar una autoridad de certificación libre, automatizada y abierta dirigida por el Grupo de Investigación de Seguridad de Internet sin fines de lucro (ISRG).

Anuncio

Primero, instale el EPEL repositorio y el mod_ssl paquete para seguridad y paquetes mejor actualizados.

Anuncio
sudo dnf install epel-release mod_ssl -y

Luego, instale el paquete certbot como sigue:

sudo dnf install python3-certbot-nginx -y

Una vez instalado, ejecute el siguiente comando para iniciar la creación de su certificado:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com

Esta configuración ideal incluye redirecciones forzadas HTTPS 301, un encabezado de seguridad de transporte estricta y grapado OCSP. Solo asegúrese de ajustar el correo electrónico y el nombre de dominio a sus requisitos.

Ahora tu URL será HTTPS://www.ejemplo.com en lugar de HTTP://www.ejemplo.com.

Anuncio

Si usa el viejo URL HTTP, se redirigirá automáticamente a HTTPS.

Opcionalmente, puede configurar un trabajo cron para renovar los certificados automáticamente. Certbot ofrece un script que hace esto automáticamente, y primero puede probar para asegurarse de que todo funcione realizando una ejecución en seco.

Anuncio
sudo certbot renew --dry-run

Si todo está funcionando, abra su ventana crontab usando el siguiente comando de terminal.

sudo crontab -e

A continuación, especifique la hora en que debe renovarse automáticamente. Esto debe verificarse diariamente como mínimo, y si es necesario renovar el certificado, el script no actualizará el certificado. Utilizar el crontab.guru si necesita ayuda para encontrar un buen momento para establecer.

00 00 */1 * * /usr/sbin/certbot-auto renew

a Salvar (CTRL + O) luego salir (CTRL + X), y el cronjob se habilitará automáticamente.

Anuncio

Comentarios y Conclusión

En el tutorial, tiene una idea de cómo instalar la fuente de Nginx, compilar ModSecurity y configurar las reglas de OWASP entre las partes principales. En general, implementar ModSecurity en su servidor proporcionará protección instantánea.

Sin embargo, la paciencia, el tiempo y la dedicación en el aprendizaje serán una gran característica. Lo último que desea es bloquear los bots de SEO o, lo que es más importante, los usuarios reales que podrían ser clientes potenciales.


¿No es lo que estabas buscando? Intente buscar tutoriales adicionales.

2 pensamientos sobre "Cómo instalar ModSecurity 3 y el conjunto de reglas básicas de OWASP con Nginx en Rocky Linux 8"

  1. ngx_http_modsecurity_module.so debe copiarse en / usr / share / nginx / modules / en lugar de / usr / lib64 / nginx / modules /

    Responder

Deja un comentario