Traducción: Cómo instalar mod_security/mod_security2 en SuSE Linux Enterprise Server 10 (SLES10)

Introducción

El módulo Apache mod_security es un módulo de seguridad muy poderoso. Combinado con reglas predefinidas, usted puede cerrar muchos agujeros de seguridad en su servidor, abiertos por aplicaciones mal escritas de php o aplicaciones de perl.

Desafortunadamente el módulo mod_security no es parte de la distribución SLES10. Para instalarlo, tenemos que instalar algunos otros módulos. Esta guía te ayuda a instalar mod_security en SLES10. También te ayuda a remover el módulo, construyendo paquetes RPM que fácilmente lo puedas desinstalar.

Instalar Apache2

Antes que nada debes instalar Apache2. Esto es muy simple con el siguiente comando:

yast2 -i apache2

Instalar paquetes requeridos

Se necesitan algunos módulos para construir mod_security. Instale los siguientes paquetes:

yast2 -i libxml2-devel pcre-devel apache2-devel curl-devel gcc gcc-c++

Apache2-devel es requirido para apxs2. curl-devel es opcional

Obtener e Instalar Checkinstall (para empaquetar)

Para seguirle la pista al software instalado y permitir al usuario desinstalar y actualizar software, checkinstall puede crear a los paquetes RPM, DEBIAN (DEB) y Slackware. En lugar de ejecutar “make install” simplemente ejecuta “checkinstall” y checkinstall instala todos los archivos requeridos, tal como lo haría “make install“.

Obtén checkinstall desde aquí: http://www.asic-linux.com.mx/~izto/checkinstall/download.php.

wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.1.tgz
make
make install
checkinstall
cp /usr/src/packages/RPMS/i386/checkinstall-1.6.1-1.i386.rpm .
rpm -ivh checkinstall-1.6.1-1.i386.rpm

Obtener e Instalar liblua

El lenguaje de programación LUA es usado por mod_security para la configuración. Debes compilar LUA como un módulo compartido.

Obtén LUA desde aquí: http://www.lua.org/ftp/lua-5.1.3.tar.gz.

wget http://www.lua.org/ftp/lua-5.1.3.tar.gz
tar -zxvf lua-5.1.3.tar.gz
cd lua-5.1.3
make linux
checkinstall

Aparecerá algo como esto:

[…]
1 - Summary: [ The LUA programming language ]
2 - Name: [ lua ]
3 - Version: [ 5.1.3 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Development/Languages/Lua ]
7 - Architecture: [ i386 ]
8 - Source location: [ http://www.lua.org/ftp/lua-5.1.3.tar.gz ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ lua ]
[…]

cp /usr/src/packages/RPMS/i386/lua-5.1.3-1.i386.rpm ..
rpm -ivh ../lua-5.1.3-1.i386.rpm

Ahora tienes que construir una carpeta compartida desde el archivo liblua.

cd /usr/local/lib
gcc -shared -o liblua.5.1.3.so /usr/local/lib/liblua.a
ln -s liblua.5.1.3.so liblua.so

Obtener e instalar mod_security

Obtén mod_security desde aquí: http://www.modsecurity.org/download/direct.html.

La documentación acerca de la instalación, la puedes encontrar aquí: http://www.modsecurity.org/documentation/index.html.

cd modsecurity-apache_2.5.2
cd apache2
./configure
make
checkinstall


1 - Summary: [ mod_security application level firewall ]
2 - Name: [ apache2-mod_security ]
3 - Version: [ 2.5.2 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ Productivity/Networking/Web/Servers ]
7 - Architecture: [ i386 ]
8 - Source location: [ http://www.modsecurity.org/download/ ]
9 - Alternate source location: [ ]
10 - Requires: [ apache2 libxml2 ]
11 - Provides: [ mod_security ]

cp /usr/src/packages/RPMS/i386/apache2-mod_security-2.5.2-1.i386.rpm ../../
rpm -ivh ../../apache2-mod_security-2.5.2-1.i386.rpm

Configurar Apache2 para mod_security

# /etc/apache2/conf.d/mod_security.conf
LoadFile /usr/lib/libxml2.so
LoadFile /usr/local/lib/liblua.so

LoadModule security2_module /usr/lib/apache2/mod_security2.so
Include modsecurity/*.conf
LoadModule unique_id_module /usr/lib/apache2/mod_unique_id.so

Extraer y Configurar Reglas Core

Obtén las reglas Core desde aquí: http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.0.tar.gz.

cd /etc/apache2
mkdir modsecurity
cd modsecurity
tar -zxvf ../modsecurity-core-rules_2.5-1.6.0.tar.gz

Modifica modsecurity_crs_10_config.conf para saber la ubicación de tus archivos de configuración:

vi modsecurity_crs_10_config.conf

SecAuditLog=...
SecDebugLog=...

Reinicia Apache y prueba tu pagina

Primero reinicia apache para obtener la configuración actual, con este comando:

rcapache restart

Para probar la instalación, escribe un simple (e inseguro) script en PHP como este:

<?
# /srv/www/htdoc/index.php file
$text=$_GET['file'];
echo "Content of File $text";
echo `cat $text`;
?>

Luego prueba abrir los archivos inseguros, con este comando:

http://ip.of.your.server.de/index.php?file=/etc/passwd

Deberías recibir un ERROR 501 en tu navegador y el archivo SecAuditLog debería salir a la vista:

[…]
GET /index.php?file=/etc/passwd HTTP/1.1 …
[…]
Message: Access denied with code 501 (phase 2). Pattern match “(?:\b(?:\.(?:ht(?:access|passwd|group
)|www_?acl)|global\.asa|httpd\.conf|boot\.ini)\b|\/etc\/)” at ARGS:file. [file “/etc/apache2/modsecu
rity/modsecurity_crs_40_generic_attacks.conf”] [line “114″] [id “950005″] [msg “Remote File Access A
ttempt”] [data “/etc/”] [severity “CRITICAL”] [tag “WEB_ATTACK/FILE_INJECTION”]

Salvedades

Cuando accedes a tu servidor via IP, una regla en modsecurity_crs_21_protocol_anomalies.conf deniega esto. Edita el archivo y busca “Check that the host header is not an IP address”.

Links y Referencias

Traducción libre de http://www.howtoforge.com/installing-mod-security-on-sles10

You have already tagged this post. Your tags:

Valid XHTML 1.0 Strict