Octubre 15

Instalando mod_security en Apache2 bajo Debian 6

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/
# 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/
# 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!.



Copyright 2018. All rights reserved.

Posted Octubre 15, 2014 by admin in category "MOD_SECURITY