GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar Nginx con ModSecurity en Ubuntu 15.04

Mod Security es un firewall de aplicaciones web (WAF) de código abierto para servidores web Apache Nginx e IIS. Este cortafuegos de capa de aplicación está desarrollado por SpiderLabs de Trustwave y se publica bajo la Licencia Apache 2.0. ModSecurity protege los sitios web de los piratas informáticos mediante el uso de un conjunto de reglas de expresión regular para filtrar los exploits comúnmente conocidos, permite el monitoreo del tráfico HTTP, el registro, el análisis en tiempo real y la detección de ataques. Hay más de 16 000 reglas disponibles para detectar ataques como SQL Injection, Cross-site Scripting (XSS), inclusión de archivos locales, inclusión de archivos remotos y reglas específicas de aplicaciones para muchas aplicaciones web como Wordpress, Joomla, Drupal, etc.

En este tutorial, le mostraré cómo instalar mod_security para el rápido servidor web Nginx. Configuraré ModSecurity como un módulo independiente y luego construiré Nginx desde la fuente para incluir ModSecurity.

Requisitos

  • Un servidor Ubuntu 15.04, usaré la IP aquí 192.168.1.106.
  • Privilegios de raíz

Qué haremos en este tutorial:

  • Actualice el sistema y el repositorio de Ubuntu 15.04.
  • Instalar las dependencias necesarias para compilar Nginx y ModSecurity.
  • Descarga ModSecurity y Nginx.
  • Instala ModSecurity y Nginx.
  • Configurar Nginx.
  • Configurar ModSecurity.
  • Configure el conjunto de reglas básicas de OWASP (CRS).
  • Pruebas.

Todos los comandos a continuación deben ejecutarse como root. Ejecutar:

sudo -i

para convertirse en usuario root en su servidor.

1. Actualizar sistema y repositorio

Antes de comenzar a instalar todas las dependencias, actualice su sistema:

apt-get update
apt-get upgrade

2. Instale las dependencias de compilación

Instale todos los paquetes necesarios para compilar Nginx y ModSecurity con el siguiente comando apt:

apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev

3. Descarga ModSecurity y Nginx

Ir al directorio "/usr/src/" y, a continuación, clona el repositorio de ModSecurity desde  Github:

cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity

Descargue Nginx con el comando wget, usaré la versión estable 1.8 de Nginx aquí. Si desea usar otra versión, vaya a la página de descarga de Nginx para obtener una lista de todas las versiones disponibles.

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

4. Instale ModSecurity y Nginx

Ahora es el momento de instalar ModSecurity, vaya al directorio /usr/src/modsecurity:

cd /usr/src/modsecurity/

Y compile ModSecurity como módulo independiente en su servidor, para que podamos incluirlo en Nginx:

./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make

Ahora vaya al directorio nginx, compile Nginx e incluya el módulo ModSecurity:

cd ../nginx-1.8.0
./configure \
  --user=www-data \
  --group=www-data \
  --with-debug \
  --with-ipv6 \
  --with-http_ssl_module \
  --add-module=/usr/src/modsecurity/nginx/modsecurity

El comando de configuración explicó:

Nginx se ejecutará bajo el usuario y el grupo "www-data" , y activamos la depuración, ipv6 y ssl módulos. Y finalmente incluimos el módulo ModSecurity en Nginx.

Ahora instala Nginx:

make
make install

Cuando finaliza el comando make install, puede ver que Nginx está instalado en "/usr/local/nginx" directorio:

cd /usr/local/nginx/

ll
drwxr-xr-x  2 root root 4096 Oct  3 07:21 conf/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 html/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 logs/
drwxr-xr-x  2 root root 4096 Oct  3 07:21 sbin/

5. Configurar Nginx

Edite el archivo de configuración de nginx con vi/vim y configure nginx para que se ejecute bajo el usuario "www-data" .

cd /usr/local/nginx/
vi conf/nginx.conf

En la primera línea, elimine el comentario de la línea "usuario" y cambie el usuario a www-data:

user  www-data;

Guardar y Salir.

Cree un enlace simbólico para el binario nginx para que podamos usar el comando "nginx" por directamente.

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

A continuación, crearemos un script systemd para Nginx que se utiliza para iniciar/detener el demonio de Nginx. Vaya al directorio "/lib/systemd/system/" y cree un nuevo archivo "nginx.service" con vi:

cd /lib/systemd/system/
vi nginx.service

Pegue el script a continuación:

[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop

KillMode=process
Restart=on-failure
RestartSec=42s

PrivateTmp=true
LimitNOFILE=200000

[Install]
WantedBy=multi-user.target

Guardar y Salir.

Ahora vuelva a cargar systemd-daemon para que systemd cargue nuestro nuevo archivo de servicio Nginx.

systemctl daemon-reload

Pruebe la configuración de nginx e inicie nginx con el comando systemctl:

nginx -t
systemctl start nginx

6. Configurar ModSecurity

Copie el archivo de configuración de ModSecurity en el directorio nginx y asígnele el nombre "modsecurity.conf" :

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

Abra el archivo modsecurity.conf con el editor vi:

cd /usr/Local/nginx/conf/
vi modsecurity.conf

En la línea 7, cambie "DetectionOnly" a "encendido" .

SecRuleEngine On

En la línea 38, aumente el valor de "SecRequestBodyLimit " a "100000000".

SecRequestBodyLimit 100000000

En la línea 192, cambie el valor de "SecAuditLogType " a "Concurrente " y comente la línea  SecAuditLog y descomente la línea 196.

SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log

# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/

Guardar y Salir.

Ahora cree un nuevo directorio para el registro de auditoría de ModSecurity y cambie el propietario a www-data.

mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/

7. Configurar el conjunto de reglas básicas (CRS) de OWASP

Descargue el conjunto de reglas básicas de OWASP desde github.

cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git

Vaya al directorio "owasp-modsecurity-crs " y copie el directorio "base_rules" al directorio nginx.

cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/

Edite modsecurity.conf y agregue OWASP CRS.

cd /usr/Local/nginx/conf/
vi modsecurity.conf

Vaya al final del archivo y agregue la siguiente configuración:

#DefaultAction
SecDefaultAction "log,deny,phase:1"

#If you want to load single rule /usr/loca/nginx/conf
#Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf

#Load all Rule
Include base_rules/*.conf

#Disable rule by ID from error message (for my wordpress)
SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015

Guardar y Salir.

Como último paso, agregue el archivo modsecurity.conf a la configuración de Nginx editando el "nginx.conf " archivo.

vi conf/nginx.conf

Agregue modsecurity.conf:

[.....]

#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;

[.....]

Guardar y salir.

Reinicie Nginx para aplicar los cambios de configuración:

systemctl restart nginx

8. Prueba

Tengo un sitio de WordPress que se ejecuta en Nginx y ModSecurity, funciona bien. Para realizar pruebas, instalaré un nuevo complemento que es vulnerable a XSS y SQL Injection.

Estos son los resultados:

XSS prohibido
https://www.exploit-db.com/exploits/37107/

Acceso al navegador:

Registro del servidor:

Inyección SQL prohibida
https://www.exploit-db.com/exploits/37560/

Acceso al navegador:

Registro del servidor:

Nginx y ModSecurity con éxito.

Conclusión

ModSecurity es un WAF (cortafuegos de aplicaciones web) de código abierto desarrollado por SpiderLabs de Trustwave para proteger sus aplicaciones web. Hay más de 16 000 reglas disponibles para detectar ataques como SQL Injection, XSS, LFI, RFI, etc. ModSecurity es fácil de instalar y está disponible como módulo para Apache, Nginx e IIS para Windows.

Referencia

  • https://www.modsecurity.org/documentation.html
  • https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
  • https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual

Ubuntu
  1. Cómo instalar WordPress con Nginx en Ubuntu 18.04

  2. Cómo instalar phpMyAdmin con Nginx en Ubuntu 18.04

  3. Cómo instalar MediaWiki con Nginx en Ubuntu 16.04

  4. Cómo implementar Modsecurity con Nginx en Ubuntu 20.04 LTS

  5. Cómo instalar PHP 7.4 con Nginx en Ubuntu 20.04

Cómo instalar OSClass con Nginx en Ubuntu 20.04

Cómo instalar WordPress 5.x con Nginx en Ubuntu 18.04 / Ubuntu 16.04

Cómo instalar WordPress con Nginx en Ubuntu

Cómo instalar Nextcloud 13 en Ubuntu 16.04 con Nginx

Cómo instalar WonderCMS en Ubuntu 20.04 (con Nginx)

Cómo instalar Nginx en Ubuntu 15.04