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