Seguridad Apache · 3 min read · Jan 11, 2026

Asegura tu Apache con mod_security

Asegura tu Apache con mod_security

Versión 1.0
Autor: Falko Timme

Este artículo muestra cómo instalar y configurar mod_security. mod_security es un módulo de Apache (para Apache 1 y 2) que proporciona detección y prevención de intrusiones para aplicaciones web. Su objetivo es proteger las aplicaciones web de ataques conocidos y desconocidos, como ataques de inyección SQL, scripting entre sitios, ataques de recorrido de ruta, etc.

En el primer capítulo mostraré cómo instalar mod_security en Debian Sarge, Ubuntu 6.06 LTS (Dapper Drake) y en Fedora Core 5, y en el segundo capítulo describiré cómo configurar Apache para mod_security, que es independiente de la distribución que estés utilizando.

Quiero decir primero que esta no es la única forma de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero este es el camino que elijo. No emito ninguna garantía de que esto funcione para ti!

1 Instalación

1.1 Debian Sarge

mod_security está disponible como un paquete de Debian en los repositorios predeterminados de Debian, por lo tanto, la instalación es tan simple como esto:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.2 Ubuntu 6.06 LTS (Dapper Drake)

La instalación es exactamente la misma que en Debian Sarge:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.3 Fedora Core 5

En Fedora, puedes instalar y activar mod_security así:

yum install mod_security
/etc/init.d/httpd restart

Ahora deberías encontrar el archivo /etc/httpd/conf.d/mod_security.conf que ya contiene una configuración básica de mod_security:

vi /etc/httpd/conf.d/mod_security.conf

| # Archivo de configuración de ejemplo para el módulo mod_security de Apache LoadModule security_module modules/mod_security.so # Activa o desactiva el motor de filtrado SecFilterEngine On # El motor de auditoría funciona de manera independiente y # puede ser activado o desactivado por servidor o # por directorio SecAuditEngine RelevantOnly # Asegúrate de que la codificación de URL sea válida SecFilterCheckURLEncoding On # Verificación de codificación Unicode SecFilterCheckUnicodeEncoding On # Solo permite bytes de este rango SecFilterForceByteRange 1 255 # Verificaciones de formato de cookie. SecFilterCheckCookieFormat On # El nombre del archivo de registro de auditoría SecAuditLog logs/audit_log # ¿Debería mod_security inspeccionar las cargas útiles de POST? SecFilterScanPOST On # Acción predeterminada establecida SecFilterDefaultAction "deny,log,status:406" # Filtro de ejemplo simple # SecFilter 111 # Prevenir ataques de recorrido de ruta (..) # SecFilter "\.\./" # Protección XSS más débil pero permite etiquetas HTML comunes # SecFilter "<( |\n)*script" # Prevenir ataques XSS (inyección HTML/Javascript) # SecFilter "<(.|\n)+>" # Filtros muy rudimentarios para prevenir ataques de inyección SQL # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # Requiere los encabezados HTTP_USER_AGENT y HTTP_HOST SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # Solo acepta codificaciones de solicitud que sabemos manejar # excluimos las solicitudes GET de esto porque algunos (automatizados) # clientes suministran "text/html" como Content-Type SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # Requiere que se proporcione Content-Length con # cada solicitud POST SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # No aceptar codificaciones de transferencia que sabemos que no manejamos # (y de todos modos no lo necesitas) SecFilterSelective HTTP_Transfer-Encoding "!^$" # Algunas reglas comunes relacionadas con aplicaciones de # http://modsecrules.monkeydev.org/rules.php?safety=safe #Nuke Bookmarks XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" #Nuke Bookmarks Marks.php Vulnerabilidad de Inyección SQL SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" #Intento general de XSS de PHPNuke #/modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # Intento de inyección SQL de PHPNuke SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" #inserción sql de phpnuke SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*\'/" # WEB-PHP phpbb quick-reply.php intento de comando arbitrario SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" #Ataque de Scripting entre Sitios del Mod de Calendario de phpBB SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: Seguro #Vulnerabilidad de Divulgación de Archivos Export.PHP de phpMyAdmin SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." #vln de ruta de phpMyAdmin SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |

Puedes mantener esta configuración, pero para obtener una mejor comprensión de lo que mod_security puede hacer, deberías comentar la parte , reiniciar Apache y seguir el capítulo 2. Después puedes crear tu propio conjunto de reglas de mod_security, o simplemente volver a este.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.