Introducción
ModSecurity es un módulo de complemento para Apache que funciona como un firewall. Funciona a través de conjuntos de reglas, que le permiten personalizar y configurar la seguridad de su servidor.
ModSecurity también puede monitorear el tráfico web en tiempo real y ayudarlo a detectar y responder a las intrusiones. Se puede usar con Apache, Nginx e IIF y es compatible con Debian, Ubuntu y CentOS.
Este tutorial explica cómo instalar y configurar ModSecurity en servidores web Apache.
Requisitos previos
- La pila LAMP (Linux, Apache, MySQL, PHP) instalada y configurada
- Acceso a una cuenta de usuario con sudo o raíz privilegios
- Un administrador de paquetes (APT o YUM), incluido por defecto
- Una línea de comando/ventana de terminal (Ctrl-Alt-T, Ctrl-Alt-F1)
- Un editor de texto, como nano
Paso 1:Actualizar repositorios de software
Abra una ventana de terminal e ingrese lo siguiente:
En Debian/Ubuntu
sudo apt update -y
En CentOS
sudo yum update -y
Paso 2:Instalación de ModSecurity en Apache
Instalar ModSecurity en Debian
1. En una ventana de terminal, ingrese lo siguiente:
sudo apt install libapache2-modsecurity
Si se le solicita, presione y
y pulsa Intro para permitir que el proceso se complete.
2. Reinicie el servicio de Apache:
sudo systemctl restart apache2
No habrá salida si Apache se reinició con éxito.
3. Verifique la versión del software (debe ser 2.8.0 o posterior):
apt-cache show libapache2-modsecurity
Instala ModSecurity en Ubuntu 18.04
1. En una ventana de terminal, ingrese:
sudo apt install libapache2-mod-security2
Si se le solicita, presione y
y pulsa Intro para permitir que el proceso se complete.
2. Reinicie el servicio de Apache:
sudo systemctl restart apache2
No habrá salida si Apache se reinició con éxito.
3. Compruebe la versión del software (debe ser 2.8.0 o posterior):
apt-cache show libapache2-mod-security2
Instalar ModSecurity en CentOS 7
1. Introduzca lo siguiente en una ventana de terminal:
sudo yum install mod_security
Si se le solicita, presione y
y pulsa Intro para permitir que el proceso se complete.
2. Reinicie el servicio de Apache:
sudo systemctl restart httpd.service
3. Compruebe la versión del software (debe ser 2.8.0 o posterior):
yum info mod_security
Paso:3 Configurar ModSecurity
Tras la instalación, ModSecurity está configurado para registrar eventos de acuerdo con las reglas predeterminadas. Deberá editar el archivo de configuración para ajustar las reglas para detectar y bloquear el tráfico.
El archivo de configuración predeterminado es /etc/modsecurity/modsecurity.conf-recommended.
1. Copie y cambie el nombre del archivo:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
2. A continuación, cambie el modo de detección de ModSecurity . Primero, vaya a /etc/modsecurity carpeta:
sudo cd /etc/modsecurity
3. Abra el archivo de configuración en un editor de texto (estaremos usando nano):
sudo nano modsecurity.conf
Cerca de la parte superior, debería ver una entrada etiquetada:
SecRuleEngine DetectionOnly
Cambie esto para que diga lo siguiente:
SecRuleEngine On
4. Usa CTRL+X para salir, luego presione y luego Entrar para guardar los cambios.
5. Salga de la carpeta /etc/modsecurity:
cd
6. Reinicie Apache:
En Debian/Ubuntu
sudo systemctl restart apache2
En CentOS
sudo systemctl restart httpd.service
Esto activará ModSecurity utilizando las reglas básicas predeterminadas. En algunas versiones de Linux, esto incluye el conjunto de reglas básicas de OWASP. Sin embargo, esto puede diferir de la última versión mantenida por los desarrolladores.
Paso 4:Descargue las últimas reglas de OWASP ModSecurity
El conjunto de reglas básicas (CRS) más reciente para ModSecurity se mantiene en GitHub.
1. Instala G eso si aún no está incluido en su sistema.
Instale Git en Debian/Ubuntu:
sudo apt install git
Instale Git en CentOS:
sudo yum install git
2. Descargue una copia del CRS:
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Esto coloca una copia del directorio como un subdirectorio de su ubicación de trabajo actual.
3. Abra un nuevo directorio:
cd owasp-modsecurity-crs
4. Mueva el archivo crs-setup:
sudo mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf
5. Luego mueva el directorio rules/:
sudo mv rules/ /etc/modsecurity
Si encuentra un error al intentar mover este directorio, ingrese:
sudo mkdir /etc/modsecurity/rules
cd rules
sudo cp *.* /etc/modsecurity/rules
6. A continuación, compruebe su security2.conf archivo para verificar que está configurado para cargar las reglas de ModSecurity:
sudo nano /etc/apache2/mods-enabled/security2.conf
Verifique que tenga las siguientes líneas incluidas y sin comentar:
IncludeOptional /etc/modsecurity/*.conf
Include /etc/modsecurity/rules/*.conf
Si no están allí, agréguelos. No los duplique, o corre el riesgo de deshabilitar su servicio Apache.
7. Reinicie el servicio de Apache:
En Debian/Ubuntu
sudo systemctl restart apache2
En CentOS
sudo systemctl restart httpd.service
Paso 5:Pruebe la configuración de Apache
1. Abra el archivo de configuración predeterminado de Apache:
sudo nano /etc/apache2/sites-available/000-default.conf
2. Localice el </VirtualHost>
etiqueta en la parte inferior y agregue las siguientes líneas:
SecRuleEngine On
SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403,msg:'phoenixNAP test rule was triggered'"
Puedes cambiar el msg
a lo que prefieras.
Guarde y salga del archivo (CTRL+X
> y
> Entrar ).
3. Reinicie el servicio Apache:
En Debian/Ubuntu
sudo systemctl restart apache2
En CentOS
sudo systemctl restart httpd.service
4. Luego, ingrese el siguiente comando:
curl localhost/index.html?testparam=test
El sistema responde intentando mostrar la página web predeterminada. En lugar del contenido, genera códigos de error y mensajes dentro de las etiquetas:
5. Puede confirmar que ModSecurity funcionó buscando el código 403 en los registros de errores de Apache con el comando:
sudo tail -f /var/log/apache2/error.log
Una de las entradas en la parte inferior debe ser el código de error de ModSecurity:
Prueba ModSecurity y OWASP CRS con Bash Script
Otro método que puede usar para probar ModSecurity es usar una B ceniza guión.
1. Introduzca el siguiente comando en la terminal:
curl localhost/index.html?exec=/bin/bash
La salida muestra los mismos mensajes de error que la última vez.
2. Vuelva a ver el archivo error.log de Apache y encontrará que la regla se activó:
sudo tail -f /var/log/apache2/error.log
El resultado muestra el mensaje de error ModSecurity relacionado con OWASP.
Paso 6:Crear reglas de ModSecurity
A continuación se muestra un ejemplo de prueba de cómo puede usar ModSecurity para bloquear palabras clave específicas en un formulario PHP.
1. Cree un archivo PHP dentro del directorio html con el comando:
sudo nano /var/www//html/test.php
2. Introduzca el siguiente código en el archivo:
<html>
<body>
<?php
if(isset($_POST['data']))
echo $_POST['data'];
else
{
?>
<form method="post" action="">
Enter text here:<textarea name="data"></textarea>
<input type="submit"/>
</form>
<?php
}
?>
</body>
</html>
Guarde el archivo y salga.
3. A continuación, cree un nuevo archivo de reglas personalizadas de ModSecurity:
sudo nano /etc/modsecurity/modsecurity_custom_rules.conf
Agregue las siguientes líneas:
SecRule REQUEST_FILENAME "test.php" "id:'400001',chain,deny,log,msg:'Spam detected'"
SecRule REQUEST_METHOD "POST" chain
SecRule REQUEST_BODY "@rx (?i:(enlarge|Nigerian|gold))"
Por supuesto, cambie las palabras clave de la última línea por las que desee.
Guarde el archivo y salga.
4. Vuelva a cargar el servicio Apache:
En Debian/Ubuntu
sudo systemctl restart apache2
En CentOS
sudo systemctl restart httpd.service
5. Inicie el formulario en un navegador web
localhost/test.php
6. Escriba una de las palabras clave de la regla en el formulario. En este ejemplo:ampliar, nigeriano, o oro .
Debería recibir un mensaje de error 403 Prohibido.
También puede consultar el /var/log/apache2/error.log
archivo para verificar la acción de ModSecurity.