Instalando mod_security en Apache2 bajo Debian 6 (Squeeze)
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/
De Maravilla!!!
Conciso, detallado, perfecto!
Muchas gracias.
Todo perfecto, instaló a la primera! 😀
Gracias, muy buena guía.
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
Excelente tutorial me ha sido de gran ayuda. Explica perfectamente y de forma sencilla los pasos. Mil gracias por la ayuda 🙂
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!
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?