Home > Linux, Seguridad > Fortificacion del Servidor Web Apache (Proxy Inverso)

Fortificacion del Servidor Web Apache (Proxy Inverso)

October 24th, 2007 c4n Leave a comment Go to comments

Este es un documento para la fortificacion de un servidor de Proxy Inverso utilizando el servidor web Apache. Es orientativa y la plataforma en la que se ha desarrollado es Suse Linux.

Lo primero que hay que hacer es descargarse el source de la pagina oficial de apache http://httpd.apache.org/download.cgi
Descomprimir el programa. Y cambiar los siguientes parametros en el source del web server:
Eliminar el campo de cabeceras en el servidor, para no desvelar la identidad del apache:
editar el archivo include/ap_release.h

Establecer los siguientes parametros para ocultar la version del server:

#define AP_SERVER_BASEVENDOR "XXXXXX"
#define AP_SERVER_BASEPRODUCT "XXXXXX"
#define   AP_SERVER_MAJORVERSION_NUMBER 0
#define   AP_SERVER_MINORVERSION_NUMBER 0
#define   AP_SERVER_PATCHLEVEL_NUMBER 00
#define   AP_SERVER_ADD_STRING                ""

El siguiente comando sirve para configurar la compilacion del servidor apache.En este caso lo prepara para ser un proxy inverso.

 #./configure --disable-auth --disable-mime --disable-status --disable-autoindex--
disable-asis --disable-cgi --disable-negotiation --disable-dir --disable-userdir --
disable-alias --enable-proxy --enable-rewrite ­enable-ssl
#make
#make install

Ahora insertamos un modulo de firewall para el servidor web (mod_security).

Para instalar mod_security, seguir los siguientes pasos:

 # cd modsecurity-apache_1.9.5/apache2/
# /usr/local/apache2/bin/apxs -cia mod_security.c

Ya tenemos configurado un server apache con el Modulo del firewall. el siguiente paso es “chrootearlo” .

Para configurar el Chroot con el servidor de apache, Tenemos que seguir los siguientes pasos:

Lo primero que tenemos que hacer es crear el sistema de virtualizacion:

#mkdir -P  /chroot/apache/bin
#mkdir -p /chroot/apache/usr/lib
#mkdir -p /chroot/apache/lib/tls
#mkdir -p /chroot/apache/usr/local/
#mkdir -p /chroot/apache/etc
#mkdir -p /chroot/apache/tmp
#mkdir -p /chroot/apache/var
#mkdir -p /chroot/apache/dev
#mkdir -p /chroot/apache/usr/lib/locale
#mv /usr/local/apache2 /chroot/apache/usr/local
Copiar la shell de Bash en el direcrtorio /chroot/apache/bin/
#cp /bin/bash /chroot/apache/bin/

Para ver las librerias linkadas ejecutar la siguiente orden:

 #ldd /chroot/bin/bash
linux-gate.so.1 => (0xffffe000)
libreadline.so.4 => /lib/libreadline.so.4 (0x4001c000)
libhistory.so.4 => /lib/libhistory.so.4 (0x40048000)
libncurses.so.5 => /lib/libncurses.so.5 (0x4004f000)
libdl.so.2 => /lib/libdl.so.2 (0x40094000)
libc.so.6 => /lib/tls/libc.so.6 (0x40098000)
/lib/ld-linux.so.2 (0x40000000)

Ahora copiamos los archivos que se muestran en la salida del comando de arriba ,
en el directorio, donde se va a hacer el chroot del servidor web del apache. Por ejemplo

#cp /lib/libreadline.so.4 /chroot/apache/lib/

Y asi sucesivamente con todos los archivos que se muestran arriba.

Crear un enlace para facilitar el uso y actualizaciones del servidor:

#ln -s /chroot/apache/usr/local/apache2/ /usr/local/

Hay que hacer lo mismo con el servidor web de apache que ya esta instalado en el sistema:

 # ldd /usr/local/apache2/bin/httpd
linux-gate.so.1 => (0xffffe000)
libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0x4001c000)
libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0x4004c000)
libaprutil-0.so.0 => /usr/local/apache2/lib/libaprutil-0.so.0 (0x4013c000)
libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0 (0x40151000)
libapr-0.so.0 => /usr/local/apache2/lib/libapr-0.so.0 (0x4016d000)
librt.so.1 => /lib/tls/librt.so.1 (0x4018d000)
libm.so.6 => /lib/tls/libm.so.6 (0x40195000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x401b7000)
libnsl.so.1 => /lib/libnsl.so.1 (0x401e8000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x401fc000)
libdl.so.2 => /lib/libdl.so.2 (0x4020d000)
libc.so.6 => /lib/tls/libc.so.6 (0x40210000)
/lib/ld-linux.so.2 (0x40000000)

Por ejemplo:

 #cp -p /usr/lib/libssl.so.0.9.7 /chroot/apache/usr/lib/

Y asi sucesivamente con todos los archivos .
Ejecutar los siguientes comandos, para terminar de configurar el entorno Chroot:

#cp /etc/nsswitch.conf /chroot/apache/etc
#echo "nobody:x:500:500:Apache/:/sbin/nologin" > /chroot/apache/etc/passwd
#echo "nobody:x:500" > /chroot/apache/etc/group
#cp /etc/hosts /chroot/apache/etc/
#cp /etc/resolv.conf /chroot/apache/etc/
#mknod -m 666 /chroot/apache/dev/null c 1 3
#mknod -m 666 /chroot/apache/dev/zero c 1 5
#mknod -m 644 /chroot/apache/dev/random c 1 8
#chmod +t /chroot/apache/tmp/
#chmod 777 /chroot/apache/tmp/
#cp /usr/share/zoneinfo/MET /chroot/apache/etc/localtime
#cp /lib/libnss_nis.so.2 /chroot/apache/lib/

Una vez echo esto, hay que examinar las dependecias del binario httpd con la siguiente
orden:

#ldd chroot /chroot/apache/ /usr/local/apache2/bin/httpd
/usr/local/apache2/bin/httpd:
linux-gate.so.1 => (0xffffe000)
libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0x4001c000)
libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0x4004c000)
libaprutil-0.so.0 => /usr/local/apache2/lib/libaprutil-0.so.0 (0x4013c000)
libexpat.so.0 => /usr/local/apache2/lib/libexpat.so.0 (0x40151000)
libapr-0.so.0 => /usr/local/apache2/lib/libapr-0.so.0 (0x4016d000)
librt.so.1 => /lib/tls/librt.so.1 (0x4018d000)
libm.so.6 => /lib/tls/libm.so.6 (0x40195000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x401b7000)
libnsl.so.1 => /lib/libnsl.so.1 (0x401e8000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x401fc000)
libdl.so.2 => /lib/libdl.so.2 (0x4020d000)
libc.so.6 => /lib/tls/libc.so.6 (0x40210000)
/lib/ld-linux.so.2 (0x40000000)

Comprobar que existen todas las librerias y si no copiarlas en el directorio adecuado.
Como por ejemplo:

#cp /usr/lib/libcrypto.so.0.9.7 /chroot/apache/usr/lib/

Para seguir con la instalacion, es necesario configurar el archivo httpd.conf del servidor de
Apache.
Ejecutar el siguiente comando para iniciar el servidor Apache:

#chroot /chroot/apache/ /usr/local/apache2/bin/httpd

si aparecen errores , depurarlos con la herramienta strace:

#strace chroot /chroot/apache/ /usr/local/apache2/bin/httpd

Si todo es correcto , los procesos del apache , deben estar cargados en el sistema.

Espero que os sirva de ayuda !!

Un saludo

c4n!

Categories: Linux, Seguridad Tags: , ,
  1. MeiJeM
    October 24th, 2007 at 15:39 | #1

    Muy bueno el artículo.

    Me gustaría saber que diferencias hay si queremos fortificar el apache “normal” y no como proxy inverso.

    Un saludo

  2. October 24th, 2007 at 16:38 | #2

    Muy interesante el post!. Me ha gustado mucho. Me lo apunto porque puede serme útil en el futuro.

    Saludos, Iván.

  3. October 24th, 2007 at 23:15 | #3

    Estoy deacuerdo con Iván,

    Muy util, esperamos ver mas colaboraciones tuyas por aqui ;)

    Un saludo.

  4. c4n
    October 25th, 2007 at 15:56 | #4

    Para fortificar un apache que no sea proxy , hay que compilar el server, con otros modulos.

    Para activar el Proxy los modulos son: –enable-proxy
    lo que hay que tene claro es la funcion del server. y despues compilarlo con los modulos necesarios, no solo por motivos de seguridad si no por motivos de rendimiento de maquina.

    Un saludo!

  1. No trackbacks yet.