Inicio > Techs > Instalando mod_security en Apache2 bajo Debian 6 (Squeeze)

Instalando mod_security en Apache2 bajo Debian 6 (Squeeze)

miércoles, 15 de junio de 2011 Dejar un comentario Ir a comentarios

Si tenés un servidor web, sabés lo complicado que es mantener tu servidor seguro, más aun cuando corres páginas en PHP, Python, etc.

No importa lo paranoico o prolijo que seas, siempre hay puntos vulnerables y si revisas los logs de tu servidor, de seguro encontrarás cientos de ataques XSS, Sql Injection, etc.

La idea de este mini tutorial es ayudarte a configurar ModSecurity en tu servidor Apache, para que puedas repeler un alto numero de estos ataques, sin estar volviéndote loco.


Vamos por partes… ¿Que es Mod_Security?

Según Wikipedia, modSecurity es una herramienta para detección y prevención de intrusos para aplicaciones Web.

Básicamente, es un módulo de Apache que se encarga de inspeccionar todo el trafico HTTP que pasa por tu webserver y en base a los resultados realizar acciones, como ser rechazar el pedido si es algo peligroso/mal intencionado.

Para mas información de mod_security, http://es.wikipedia.org/wiki/Mod_Security o mejor aún, http://www.modsecurity.org/.

Lamentablemente los paquetes de Debian de mod_security siempre estan pasados de moda (versiones viejisimas) o no estan disponibles para bajar (y más aun para debian6 / squeeze), así que aca vamos a proceder directamente a instalar mod_security desde su código fuente.

Lo primero es bajar la ultima versión. Al momento de hacer este documento, se trata de la version 2.6.0. Vos verificá que siga siendo la ultima entrando a http://www.modsecurity.org/download/.

# cd /usr/src/
# wget "http://www.modsecurity.org/download/modsecurity-apache_2.6.0.tar.gz"
# tar zxvf modsecurity-apache_2.6.0.tar.gz

Instalamos un par de herramientas & libs que vamos a necesitar para instalar todo esto ..

# apt-get install libxml2-dev liblua5.1-0 lua5.1 apache2-threaded-dev build-essential libxml2 libxml2-dev libcurl3 libcurl3-dev

Compilamos modsecurity & lo instalamos…

# cd modsecurity-apache_2.6.0
# ./configure
# make
# make install

Ahora debemos crear el archivo /etc/apache2/mods-available/mod_security2.load con el siguiente contenido:

LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so

Hecho esto, habilitamos los módulos que usaremos.

# a2enmod mod_security2
# a2enmod unique_id

Configuramos lo minimo-necesario para correr el mod-security.

# cp modsecurity.conf-recommended /etc/apache2/conf.d/modsecurity.conf

Ahora bajamos el pack de reglas más actualizado & lo instalamos: (en este caso, al momento de armar este tutorial,era el modsecurity-crs_2.2.0, pero fijate en esta web http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/ para bajar el ultimo-actualizado ya que cambia constantemente)

# cd /etc/apache2/
# wget -O modsecurity-crs.tar.gz "http://downloads.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmod-security%2Ffiles%2Fmodsecurity-crs%2F0-CURRENT%2F&ts=1308175105&use_mirror=ufpr"
# tar xzvf modsecurity-crs.tar.gz
# mv modsecurity-crs_2.2.0 /etc/apache2/modsecurity_crs
# rm -fr modsecurity-crs.tar.gz
# chown root.root /etc/apache2/modsecurity_crs/ -R
# cd /etc/apache2/modsecurity_crs
# mv modsecurity_crs_10_config.conf.example modsecurity_crs_10_config.conf

Ahora ajustaremos la configuracion de mod-security para apuntar los archivos de logs a donde queremos, e incluir el pack de rules que acabamos de bajar.
Para ello, editamos el archivo de configuracion:

# vim /etc/apache2/conf.d/modsecurity.conf

Buscamos las lineas:

# SecDebugLog /opt/modsecu
# SecDebugLogLevel 3

las descomentamos & las dejamos de la siguiente forma:

SecDebugLog /var/log/apache2/modsec_debug.log
SecDebugLogLevel 3

Luego buscamos las lineas:

# SecAuditLogType Serial
# SecAuditLog /var/log/modsec_audit.log

las descomentamos & las dejamos de la siguiente forma:

SecAuditLogType Serial
SecAuditLog /var/log/apache2/modsec_audit.log

Y al final de todo el archivo, agregamos las siguientes lineas, que servirán para cargar todas las reglas del pack que bajamos:

Include /etc/apache2/modsecurity_crs/*.conf
Include /etc/apache2/modsecurity_crs/base_rules/*.conf

Guardamos el archivo & salimos.

A continuacion preparamos los logs que vamos a usar & seteamos los permisos necesarios:

# touch /var/log/apache2/modsec_debug.log
# touch /var/log/apache2/modsec_audit.log
# chown root.root /var/log/apache2/modsec_*
# chmod 660 /var/log/apache2/modsec_*

Eso es todo, ahora podemos decirle a Apache que verifique si todo esta OK en la config:

# apache2ctl configtest

Si todo esta OK, veremos un hermoso:

Syntax OK

Si no es así y algo falló, deberemos revisar toda la configuración.

NO CONTINUES HASTA VER EL «Syntax OK»!.

Ahora si .. si todo esta OK, podemos reinicar Apache2:

# /etc/init.d/apache2 restart

Luego de reiniciar, podemos mirar el errorlog de Apache, para ver si efectivamente cargo el ModSecurity.

# tail /var/log/apache2/error.log

Y deberíamos ver algo similar a …

[Wed Jun 15 19:15:59 2011] [notice] ModSecurity for Apache/2.6.0 (http://www.modsecurity.org/) configured.
[Wed Jun 15 19:16:00 2011] [notice] ModSecurity: APR compiled version="1.2.12"; loaded version="1.2.12"
[Wed Jun 15 19:16:00 2011] [notice] ModSecurity: PCRE compiled version="7.6"; loaded version="7.6 2008-01-28"
[Wed Jun 15 19:16:00 2011] [notice] ModSecurity: LIBXML compiled version="2.6.32"
[Wed Jun 15 19:16:01 2011] [notice] Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny10 with Suhosin-Patch configured -- resuming normal operations

Eso es todo!  tenemos mod-security funcionando en nuestro Apache!.

Espero les sirva.

Para más información:

http://www.modsecurity.org/
http://www.thebitsource.com/infrastructure-operations/web-application/securing-apache-web-servers-modsecurity/
http://wilmerbarriosjr.wordpress.com/2009/07/25/instalar-modsecurity-en-ubuntu-9-04-server-paso-a-paso/

  1. jueves, 8 de septiembre de 2011 a las 22:50 | #1

    De Maravilla!!!

  2. Luz
    miércoles, 23 de noviembre de 2011 a las 10:28 | #2

    Conciso, detallado, perfecto!
    Muchas gracias.

  3. miércoles, 18 de enero de 2012 a las 07:09 | #3

    Todo perfecto, instaló a la primera! 😀

  4. nusuga
    miércoles, 7 de marzo de 2012 a las 14:11 | #4

    Gracias, muy buena guía.

  5. Novato
    lunes, 26 de marzo de 2012 a las 16:25 | #5

    Muchas gracias por el tutorial, esta genial!!, lo recomiendo totalmente, es antisimios, todo perfectamente esplicado, detallado y valido para futuras ocasiones.

    Gracias por tu esfuerzo, por compartir y por ayudar.

    Un coridal Saludo

  6. Saeta
    miércoles, 23 de mayo de 2012 a las 20:32 | #6

    Excelente tutorial me ha sido de gran ayuda. Explica perfectamente y de forma sencilla los pasos. Mil gracias por la ayuda 🙂

  7. EduardoNovato
    martes, 14 de agosto de 2012 a las 09:57 | #7

    Muchisimas gracias por este tutorial. Llevaba varios dias intentando hacer funcionar el Modsecurity y no habia manera. Siguiendo los pasos que indicas, he instalado la version 2.6.7 (en este momento la ultima version). Y funciona! FUNCIONA!!!!!

    Otra cosa es que despues haya que eliminar algunas «rules» del Modsecurity para que no te bloquee las paginas web. Recomiendo tambien estos enlaces con este proposito por si son de utilidad a alguien:

    Si uno intenta acceder a la pagina escribiendo la IP en formato numerico no te deja (tengo una LAN provisional y todavia no hay DNS):
    http://www.errorhelp.com/search/details/67186/msg-host-header-is-a-numeric-ip-address

    Para un error muy comun que no entiendo muy bien:
    Rule execution error – PCRE limits exceeded (-8): (null). 302, el siguiente enlace:

    http://forums.cpanel.net/f185/mod_security-rule-execution-error-pcre-limits-exceeded-8-null-156462-p2.html

    Y luego para el error Message: Access denied with code 403 (phase 4). Pattern match «(?:Index of.*?Index of.*?Index of|>\[To Parent Directory\])» at RESPONSE_BODY
    pues el siguiente enlace:

    http://wordpress.org/support/topic/you-dont-have-permission-to-access-blogwp-adminoptionsphp

    Basicamente consiste en mirar bien los ficheros «log», ver que regla da problemas, (el log indica el fichero y numero de linea donde esta el problema) y eliminarla (o modificarla si uno sabe hacerlo!)

    Muchas gracias de nuevo!

  8. IP-fähige Sensoren überwachen
    miércoles, 4 de diciembre de 2013 a las 13:24 | #8

    Hi! Do you know if they make any plugins to safeguard
    against hackers? I’m kinda paranoid about losing everything I’ve
    worked hard on. Any recommendations?

  1. lunes, 25 de junio de 2012 a las 08:01 | #1
  2. domingo, 21 de julio de 2013 a las 14:05 | #2