Instalación y configuración de Mod_Security

ModSecurity es un firewall de aplicaciones Web embebible que ejecuta como módulo del servidor web Apache, provee protección contra diversos ataques hacia aplicaciones Web y permite monitorear tráfico HTTP, así como realizar análisis en tiempo real sin necesidad de hacer cambios a la infraestructura existente (Definición Wikipedia).

Compilación:

Bajamos la última versión estable y compilamos:

cd /root/descargas
wget http://www.modsecurity.org/download/modsecurity-apache_1.9.4.tar.gz
tar -zxf modsecurity-apache_1.9.4.tar.gz

Para compilar, hemos de distinguir entre apache 1.3.x y apache 2.x:

Apache 1.3.x:

cd modsecurity-apache_1.9.4/apache1
/usr/local/apache/bin/apxs -cia mod_security.c

En el último comando tener en cuenta la ruta a vuestro apache.

Apache 2.x:

cd modsecurity-apache_1.9.4/apache2
/usr/local/apache/bin/apxs -cia mod_security.c

En el último comando tener en cuenta la ruta a vuestro apache.

Ya debería aparecer en nuestro httpd.conf el módulo cargado:

LoadModule security_module    libexec/mod_security.so

Configuración:

Personalmente siempre me gusta poner las configuraciones de este tipo de módulos en ficheros separados, pues suelen ser extensas y resulta incómodo en el httpd.conf, así que añadimos:

Include "/usr/local/apache/conf/mod_security.conf"

Respecto a las reglas, es todo un mundo, resulta difícil saber que reglas son las mejores para cada tipo de servidor, no obstante las que ofrecen en Got Root, además de que se actualizan periódicamente, son lo suficientemente restrictivas para proteger tu servidor Apache de forma excelente. Una vez añadidas, simplemente se trata de optimizarlas a vuestras necesidades, eliminando las que no deseeis.

Podéis descargar las últimas reglas en los siguientes enlaces:

Mod Security 2.5

Apache 2.x rules: (gzip)external link

Mod Security 2.0-2.1

Apache 2.x rules: (gzip) (bzip)
Apache 1.x rules: (gzip) (bzip)

Mod Security 1.9

Apache 2.x rules: (gzip) (bzip)
Apache 1.x rules: (gzip) (bzip)

Para más información, y reglas de distintas versiones de ModSecurity acceder a su sitio web.

Voy a explicar unas cuantas directivas de configuración, pero son muy extensas, conviene estudiarlas y configurarlas al gusto de cada uno:

Fichero en el que guardaremos el log de los filtrados realizados por mod_security

# The name of the audit log file
SecAuditLog logs/mod_security.log

Acción a realizar por defecto cuando se detecte un ataque, en este caso denegamos la petición web, lanzamos un error 500 y guardamos en el log el tipo de ataque:

# Action to take by default
# SecFilterDefaultAction "deny,log,status:406"
# For log only: SecFilterDefaultAction "pass,log"
SecFilterDefaultAction "deny,log,status:500"

Ips que no se verán afectadas por las reglas establecidas en mod_security (en este caso local, se puede asignar la IP que queramos)

# Do not log local requests and allows them all
SecFilterSelective REMOTE_ADDR "^127.0.0.1$" nolog,allow

Personalizar la página de error a la que mandemos las peticiones web filtradas, que en nuestro caso hemos configurado con un error 500:

ErrorDocument 500 http://páginapersonalizada.com/error.html

Y muchísimas más opciones, revisad la documentación y los ficheros de reglas, ante cualquier duda comentadlo y lo revisamos.

16 comentarios en “Instalación y configuración de Mod_Security

  1. Gracias a tí Bladimir.

    Todavía estoy comenzando con el blog (tiene apenas un par de semanas), se agradecen los comentarios.

    Un saludo!

  2. Buen día, disculpa necesito saber como es que puedo desactivar este mod especificamente para un fichero o una carpeta.

    Ley y encontre que seria algo asi:

    #carpeta donde quiero que ningún archivo sea bloqueado por mod_security:
    SecRule REQUEST_FILENAME “/micarpetainvisible/.*” \
    “allow,phase:1,nolog,ctl:ruleEngine=Off”

    pasa que no puedo enviar datos por php hacia mi hosting, contacte con ellos para que me desactiven este mod y no saben como hacerlo

  3. Puedes añadir esa directiva en el fichero .htaccess en la raíz de tu alojamiento web. Sería algo similar a esto:

    # NOTA: Los ifmodule van entre signos <>, los he quitado porque sino salía publicado bien el código...
    ifmodule mod_security2.c
    SecRule REQUEST_FILENAME “/micarpetainvisible/.*” \
    “allow,phase:1,nolog,ctl:ruleEngine=Off”
    /ifmodule
    
  4. Hola,

    He instalado el modsecurity 2.5.9 para que me quite la firma y poder enmascarar que es lo que tiene el servidor instalado pero al restart el servidor apache y ver si funciona solo me cambia parte de la firma, es decir yo en realidad tengo esto:

    Apache 2.2 Ubuntu PHP/5.1.6-2ubuntu4.3 with Suhosin-Patch mod_ruby/1.1.6 Ruby/1.8.7(2008-08-11) Server at http://www.dominio.com Port 80

    Y cuando activo el mod security me sale esto:

    Fedora (Red Hat) PHP/5.1.6-2ubuntu4.3 with Suhosin-Patch mod_ruby/1.1.6 Ruby/1.8.7(2008-08-11) Server at http://www.dominio.com Port 80

    Es decir, solo me cambia la parte de delante, la de atrás sique allí.

    Los tokens están en FULL y la ServerSignature en ON, he probado cientos de conbinaciones pero no funciona.

    Conoce alguna solución a esto?

    Gracias!

  5. Hola. Gran entrada, la he seguido en su día y he logrado configurarlo. Hoy por hoy, me gustaría actualizar las reglas… ¿Simplemente descargamos y sustituimos en la carpeta de las reglas o es necesario recompilar?¿De ser esto último, es necesario remover la versión anterior?

    Muchas gracias.

  6. Disculpa a ver si me peuden ayudadr con esto, ya instale el modsecurity, pero cuando voy a configurar llego hasta el punto de poner «Include «/usr/local/apache/conf/mod_security.conf»» en el fichero mo_security que esta carpeta /etc/apache2/mods-available, dicho fichero no se encuentra, que hago??

  7. Hola , yo no tengo instalado mod_security y tengo el mismo error, es necesario instalarlo para que funcione? , o deberia funcionar sin instalarlo? , gracias

  8. Disculpe, pero al estar instalado el ModSecurity ya no puedo entrar en la aplicacion que antes funcionaba, esto simplemente ua no me deja entrar a ninguna aplicación. Cómo puedo decirle que ejecute únicamente tal o cual aplicación.._

Comments are closed.