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