# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Instalar mod_security para Apache en Linux 64 bits


A la hora de instalar mod_security en sistemas de 64 bits podemos encontrarnos con problemas al intentar hacerlo a través de apxs. Por ello, tenemos que recurrir a la instalación mediante compilación. En este caso bajo un centos 5 x86_64.
Lo primero que hacemos es descargar las fuentes:

$ wget http://www.modsecurity.org/download/modsecurity-apache_2.5.13.tar.gz

Descomprimimos y nos ubicamos en la carpeta apache2 (para versiones 2 de Apache):

$ tar -xzvf modsecurity-apache_2.5.13.tar.gz
$cd modsecurity-apache_2.5.13/apache2

Llega el momento de compilar, en este caso la configuración me ha obligado a especificar la ruta tanto de apxs como de apr-config y apu-config:

# ./configure --with-apxs=/usr/local/apache/bin/apxs \
 --with-apr=/usr/local/apache/bin/apr-1-config \
 --with-apu=/usr/local/apache/bin/apu-1-config

Si no recibimos ningún error compilamos:

# make

E instalamos:

# make install

Llega el momento de añadir a httpd.conf la carga de los módulos necesarios y la llamada al fichero de configuración:

LoadFile /usr/lib/libxml2.so
LoadModule security2_module modules/mod_security2.so

Y la llamada al fichero de configuración que podéis llamar como queráis:

Include conf/modsec2.conf

Ya quedará únicamente crear o copiar el fichero modsec2.conf y copiar las reglas que queramos a la ruta deseada.

 

modsec2.conf:

<IfModule mod_security2.c>
SecRuleEngine On
SecFilterCheckURLEncoding On
SecFilterForceByteRange 0 255
SecAuditEngine RelevantOnly
SecAuditLog logs/modsec_audit.log
SecDebugLog logs/modsec_debug_log
SecDebugLogLevel 0
SecDefaultAction "phase:2,deny,log,status:403"
#Redireccion a html de seguridad
ErrorDocument 403 http://rm-rf.es/fallo_seguyridad.html
SecRule REMOTE_ADDR "^127.0.0.1$" nolog,allow
#Includes de configuracion
Include "/usr/local/apache/conf/modsecurity_rules/*.conf"
</IfModule>

Finalmente comprobamos que la sintaxis de los ficheros de configuración es correcta y ya podemos arrancar Apache y hacer pruebas con mod_security:

# /etc/init.d/httpd configtest
Syntax OK

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.