Fortificacion del Servidor Web Apache (Proxy Inverso)
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!
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
Muy interesante el post!. Me ha gustado mucho. Me lo apunto porque puede serme útil en el futuro.
Saludos, Iván.
Estoy deacuerdo con Iván,
Muy util, esperamos ver mas colaboraciones tuyas por aqui
Un saludo.
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!