Cómo instalar Apache con ModSecurity en Ubuntu 22.04
ModSecurity es una herramienta cortafuegos gratuita y de código abierto compatible con varios servidores web, como Apache, Nginx e IIS. Se trata de un cortafuegos basado en firmas que es capaz de bloquear varios tipos de ataques, como los de secuencias de comandos en sitios cruzados (XSS), ataques de fuerza bruta y ataques conocidos de inyección de código. Proporciona diferentes conjuntos de reglas que te permiten personalizar y configurar la seguridad de tu servidor. También puede supervisar el tráfico web en tiempo real y ayudarte a detectar y responder a las intrusiones.
En este tutorial, te explicaré cómo configurar ModSecurity con Apache en Ubuntu 22.04.
Requisitos
- Un servidor que ejecute Ubuntu 22.04.
- Una contraseña de root configurada en tu servidor.
Instalar el servidor web Apache
Antes de empezar, tendrás que instalar la última versión del paquete del servidor web Apache en tu servidor. En primer lugar, instala todas las dependencias necesarias utilizando el siguiente comando:
apt install gnupg2 software-properties-common curl wget git unzip -y
Una vez instaladas todas las dependencias, añade el repositorio de Apache con el siguiente comando:
add-apt-repository ppa:ondrej/apache2 -y
A continuación, actualiza la caché del repositorio e instala el paquete Apache con el siguiente comando:
apt update -y apt install apache2 -y
Una vez instalado Apache, puedes pasar al siguiente paso.
Instalar ModSecurity
A continuación, ejecuta el siguiente comando para instalar el módulo ModSecurity de Apache:
apt install libapache2-mod-security2 -y
Una vez instalado el paquete, habilita el módulo ModSecurity con el siguiente comando:
a2enmod security2
A continuación, reinicia el servicio Apache para aplicar los cambios:
systemctl restart apache2
También puedes comprobar el estado de Apache utilizando el siguiente comando:
systemctl status apache2
Obtendrás la siguiente salida:
? apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-10-18 10:49:42 UTC; 4s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 74445 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 74449 (apache2) Tasks: 55 (limit: 2242) Memory: 29.7M CPU: 229ms CGroup: /system.slice/apache2.service ??74449 /usr/sbin/apache2 -k start ??74450 /usr/sbin/apache2 -k start ??74451 /usr/sbin/apache2 -k start Oct 18 10:49:42 ubuntu2204 systemd[1]: Starting The Apache HTTP Server...
Configurar ModSecurity
A continuación, edita el archivo de configuración de ModSecurity:
nano /etc/apache2/mods-enabled/security2.conf
Descomenta la siguiente línea:
IncludeOptional /etc/modsecurity/*.conf
Guarda y cierra el archivo y cambia el nombre del archivo de configuración ModSecurity:
mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
A continuación, edita el archivo de configuración ModeSecurity:
nano /etc/modsecurity/modsecurity.conf
Cambia las siguientes líneas:
SecRuleEngine On SecAuditLogParts ABCEFHJKZ
Guarda y cierra el archivo y reinicia el servicio Apache para aplicar los cambios:
systemctl restart apache2
Instala el Conjunto de Reglas Básicas OWASP
Para proteger tu aplicación web de ataques maliciosos, tendrás que descargar e instalar el conjunto de reglas básicas de OWASP en tu servidor.
En primer lugar, descarga el conjunto de reglas más reciente con el siguiente comando:
wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz
Una vez finalizada la descarga, extrae el archivo descargado con el siguiente comando:
tar xvf v3.3.0.tar.gz
A continuación, crea un directorio para las reglas y mueve las ruls extraídas dentro de ese directorio:
mkdir /etc/apache2/modsecurity-crs/ mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs
A continuación, navega hasta tu directorio de reglas OWASP y cambia el nombre del archivo de configuración:
cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/ mv crs-setup.conf.example crs-setup.conf
A continuación, edita el archivo de configuración de ModSecurity y define la ruta de tus conjuntos de reglas OWASP:
nano /etc/apache2/mods-enabled/security2.conf
Añade las siguientes líneas:
IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf
Guarda y cierra el archivo y, a continuación, comprueba que el Apache no contenga ningún error de sintaxis con el siguiente comando:
apache2ctl -t
Si todo va bien, obtendrás la siguiente salida:
Syntax OK
Por último, reinicia el servicio Apache para aplicar la configuración:
systemctl restart apache2
Verificar ModSecurity
En este punto, el servidor web Apache está configurado con ModSecurity. Ahora, es el momento de comprobar si funciona o no.
Abre tu interfaz de línea de comandos y ejecuta el siguiente comando:
curl http://localhost/index.html?exec=/bin/bash
Deberías obtener el error 403 Prohibido:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> <hr> <address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address> </body></html>
También puedes probar el ModSecurity utilizando el siguiente comando:
curl localhost?doc=/bin/ls
Obtendrás la siguiente salida:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> <hr> <address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address> </body></html>
También puedes comprobar el registro de ModSecurity para obtener más información:
tail /var/log/apache2/modsec_audit.log
Obtendrás la siguiente salida:
SecRule "TX:INBOUND_ANOMALY_SCORE" "@ge %{tx.inbound_anomaly_score_threshold}" "phase:5,id:980130,pass,t:none,log,noauditlog,msg:'Inbound Anomaly Score Exceeded (Total Inbound Score: %{TX.INBOUND_ANOMALY_SCORE} - SQLI=%{tx.sql_injection_score},XSS=%{tx.xss_score},RFI=%{tx.rfi_score},LFI=%{tx.lfi_score},RCE=%{tx.rce_score},PHPI=%{tx.php_injection_score},HTTP=%{tx.http_violation_score},SESS=%{tx.session_fixation_score}): individual paranoia level scores: %{TX.ANOMALY_SCORE_PL1}, %{TX.ANOMALY_SCORE_PL2}, %{TX.ANOMALY_SCORE_PL3}, %{TX.ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0" SecAction "phase:5,id:980145,pass,t:none,nolog,noauditlog,ver:OWASP_CRS/3.3.0,setvar:tx.executing_anomaly_score=%{tx.outbound_anomaly_score_pl1},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl2},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl3},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl4}" SecRule "TX:OUTBOUND_ANOMALY_SCORE" "@lt %{tx.outbound_anomaly_score_threshold}" "phase:5,id:980150,pass,t:none,log,noauditlog,msg:'Outbound Anomaly Score (Total Outbound Score: %{TX.OUTBOUND_ANOMALY_SCORE}): individual paranoia level scores: %{TX.OUTBOUND_ANOMALY_SCORE_PL1}, %{TX.OUTBOUND_ANOMALY_SCORE_PL2}, %{TX.OUTBOUND_ANOMALY_SCORE_PL3}, %{TX.OUTBOUND_ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0,chain" #SecRule "TX:MONITOR_ANOMALY_SCORE" "@gt 1" --c2d93508-Z--
Configurar Logrotate
Si estás usando ModSecurity en un sitio web con mucho tráfico. El registro de auditoría de ModSecurity puede hacerse demasiado grande muy rápidamente. En este caso, puedes configurar la rotación del registro de auditoría de ModSecurity. Puedes configurarlo con el siguiente comando:
nano /etc/logrotate.d/modsec
Añade las siguientes líneas:
/var/log/apache2/modsec_audit.log { rotate 31 daily missingok compress delaycompress notifempty }
Guarda y cierra el archivo cuando hayas terminado. El archivo de configuración anterior rotará el archivo de registro cada día y lo comprimirá.
Conclusión
En este post, hemos explicado cómo configurar ModSecurity con Apache en Ubuntu 22.04. También descargamos y configuramos el conjunto de reglas OWASP con ModSecurity. Tu sitio web no está totalmente protegido contra distintos tipos de ataques. No dudes en preguntarme si tienes alguna duda.