Download Instalando Tomcat 6 en Debian 4 como servicio

Document related concepts
no text concepts found
Transcript
66.69 - Criptografía y Seguridad
Informática
Web Application Firewall – W.A.F.
Tutorial de instalación de la maqueta
Alumnos:

68643
Gentile, Marcelo Gabriel

80936
Mantero, Fernando

80653
Stisman, Pablo

81343
Ulrich, Germán
1º Cuatrimestre del 2009
Índice
Índice ................................................................................................................................................... 2
Tutorial de instalación de la maqueta .................................................................................................. 3
Instalar Tomcat 6 en Debian como servicio ........................................................................................ 3
Instalar ModSecurity2 en Debian ........................................................................................................ 6
Instalar WebGoat en Tomcat ............................................................................................................... 8
Integración entre Apache y Tomcat con mod_jk................................................................................. 9
Otras configuraciones ........................................................................................................................ 11
Reglas adicionales para ModSecurity............................................................................................ 11
Accediendo a las aplicaciones a través de apache ......................................................................... 11
Tutorial de instalación de la maqueta
La maqueta consiste de los siguientes componentes:

Tomcat 6 instalado como servicio.

ModSecurity instalado como modulo de Apache.

Aplicación WebGoat instalada en Tomcat.

Integración entre Apache y Tomcat con el módulo mod_jk.

Otras configuraciones.
Instalar Tomcat 6 en Debian como servicio
En primer lugar hay que descargar el JDK de Java del sitio de Sun. Elegimos la versión
adecuada (en este caso jdk-6u14-linux-i586.bin) y la descargamos al directorio /opt/java. Le
damos permiso de ejecución y ejecutamos el instalador:
cripto:/opt/java # chmod u+x jdk-6u14-linux-i586.bin
cripto:/opt/java # sh jdk-6147-linux-i586.bin
Una vez finalizada la instalación podemos borrar el instalador:
cripto:/opt/java # rm jdk-6u14-linux-i586.bin
En segundo lugar hay que descargar los binarios de la ultima versión de Tomcat (en este caso
la 6.0.20), y lo guardamos en /opt. Lo descomprimimos y luego borramos el tar.gz:
cripto:/opt # tar xvfz apache-tomcat-6.0.20.tar.gz
cripto:/opt # rm apache-tomcat-6.0.20.tar.gz
Para comprobar que todo quedó bien, levantamos el Tomcat en forma manual. Para ello
indicamos mediante una variable de entorno que queremos usar la máquina virtual de Java del
JDK que acabamos de instalar y ejecutamos el script que inicia el Tomcat:
cripto:/opt # export JAVA_HOME=/opt/java/jdk1.6.0_14
cripto:/opt # /opt/apache-tomcat-6.0.20/bin/startup.sh
Using CATALINA_BASE: /opt/apache-tomcat-6.0.20
Using CATALINA_HOME: /opt/apache-tomcat-6.0.20
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.20/temp
Using JRE_HOME: /opt/java/jdk1.6.0_14
Para comprobar que el servicio está activo podemos ejecutar netstat y comprobar que
tenemos un proceso java escuchando en el puerto 8080:
cripto:/opt/
# netstat –tapn | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 5938/java
También se puede probar desde un navegador accediendo por http al puerto 8080 de la
máquina donde estamos realizando la instalación para ver la página de inicio del Tomcat:
A continuación creamos un usuario el cual se utilizará para que se ejecute el Tomcat, sin
privilegios de root.
cripto:/opt # useradd tomcat
Para integrarlo en el arranque y parada normales del servidor donde está instalado vamos a
utilizar jsvc. Tomcat se distribuye con un archivo .tar con los fuentes de jsvc y un ejemplo del
script que necesitamos personalizar para integrar Tomcat en el inicio del servidor. Lo primero
que tenemos que hacer es entrar en el directorio del Tomcat y descomprimir el archivo con el
código fuente:
cripto:/opt # cd /opt/apache-tomcat-6.0.20/bin
cripto:/opt/apache-tomcat-6.0.20/bin # tar xvfz jsvc-src.tar.gz
Instalamos las dependencias necesarias:
cripto:/opt/apache-tomcat-6.0.20/bin # apt-get install autoconf build-essential
Entramos en el directorio dónde quedaron descomprimidos los fuentes y realizamos la
compilación ejecutando secuencialmente los siguientes comandos:
cripto:/opt/apache-tomcat-6.0.20/bin # cd jsvc-src
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src# autoconf
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src# ./configure
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src# make
Copiamos el resultado al directorio bin de Tomcat
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src# cp jsvc ..
Detenemos el Tomcat, ya que había quedado corriendo:
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src# ../bin/shutdown.sh
Modificamos el propietario del directorio donde tenemos el Tomcat, para hacerlo pertenecer al
usuario que hemos creado para su ejecución. Y probamos si funciona el arranque mediante
jsvc:
cripto:/opt/apache-tomcat-6.0.20 # chown -R tomcat:tomcat .
cripto:/opt/apache-tomcat-6.0.20 # bin/jsvc Djava.endorsed.dirs=./common/endorsed -cp ./bin/bootstrap.jar -home
/opt/java/jdk1.6.0_14 -user tomcat -outfile ./logs/catalina.out -errfile
./logs/catalina.err org.apache.catalina.startup.Bootstrap
Volvemos a ejecutar de nuevo netstat -tapn para verificar que hay un proceso que tiene
abierto el puerto 8080 (jsvc)
Tomcat trae un temlate denominado Tomcat5.sh en el directorio /opt/apache-tomcat6.0.20/bin/jsvc-src/native que servirá de base para el script de inicio. Nos situamos en
ese directorio y hacemos una copia del template:
cripto:/opt/opt/apache-tomcat-6.0.20 # cd bin/jsvc-src/native
cripto:/opt/apache-tomcat-6.0.20/bin/jsvc-src/native # cp Tomcat5.sh Tomcat6.sh
Editamos las siguientes líneas del archivo con los siguientes valores:
JAVA_HOME=/opt/java/jdk1.6.0_14
CATALINA_HOME=/opt/apache-tomcat-6.0.20
DAEMON_HOME=/opt/apache-tomcat-6.0.20/bin
TOMCAT_USER=tomcat
CATALINA_BASE=/opt/apache-tomcat-6.0.20
Le damos permiso de ejecución y creamos un enlace dinámico a este fichero en el directorio
/etc/init.d:
cripto:/opt # chmod u+x /opt/apache-tomcat-6.0.20/bin/jsvc-src/native Tomcat6.sh
cripto:/opt # ln -s /opt/apache-tomcat-6.0.20/bin/jsvc-src/native/Tomcat6.sh
/etc/init.d/tomcat6
Ejecutar el siguiente comando, para indicar que ejecute el daemon en el inicio y lo detenga al
apagar el sistema:
cripto:/etc/init.d# update-rc.d tomcat6 defaults 99
Reiniciamos para comprobar que el Tomcat levanta en el inicio.
Instalar ModSecurity2 en Debian
Primero instalamos todas las dependencias para el uso del modulo:
cripto:/ # apt-get install libxml2-dev liblua5.1-0 lua5.1 apache2-threaded-dev
Descargamos el código fuente de la versión 2.5.1:
cripto:/tmp # cd /tmp
cripto:/tmp # wget http://www.modsecurity.org/download/modsecurityapache_2.5.1.tar.gz
Descomprimimos el archivo:
cripto:/tmp # tar zxvf modsecurity-apache_2.5.1.tar.gz
Instalamos el modulo:
cripto:/tmp # cd modsecurity-apache_2.5.1/apache2/
cripto:/tmp/modsecurity-apache_2.5.1/apache2 # ./configure
cripto:/tmp/modsecurity-apache_2.5.1/apache2 # make && make install
Verificamos que este en archivo mod_security2.so en el directorio: /usr/lib/apache2/modules/
cripto:/ # ls /usr/lib/apache2/modules/mod_security2.so
Creamos el archivo mod-security2.load el cual trabajara en conjunto con el apache:
cripto:/ # vi /etc/apache2/mods-available/mod-security2.load
Agregamos las siguientes líneas:
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Activamos el modulo (mod_security requiero el modulo unique_id activo):
cripto:/ # a2enmod mod-security2
cripto:/ # a2enmod unique_id
Agregamos para que el apache tome la configuración del modulo:
cripto:/ # vi /etc/apache2/conf.d/mod-security2.conf
Agregamos la siguiente línea:
Include /etc/modsecurity2/*.conf
Creamos los directorios y los archivos log:
cripto:/ # mkdir /etc/modsecurity2
cripto:/ # mkdir /etc/modsecurity2/logs
cripto:/ # touch /etc/modsecurity2/logs/modsec_audit.log
cripto:/ # touch /etc/modsecurity2/logs/modsec_debug.log
Copiamos las reglas que vienen con ModSecurity:
cripto:/ # cp /tmp/modsecurity-apache_2.5.1/rules/*.conf /etc/modsecurity2
Modificamos las líneas donde hacen alusión a los archivos logs, dejándolas de la siguiente
forma:
cripto:/ # vi /etc/modsecurity2/modsecurity_crs_10_config.conf
SecDebugLog /etc/modsecurity2/logs/modsec_debug.log
SecAuditLog /etc/modsecurity2/logs/modsec_audit.log
Verificamos que la configuración del apache esté correcta:
cripto:/ # apache2ctl configtest
Reiniciamos el servicio del Apache
cripto:/ # /etc/init.d/apache2 restart
Verificamos que este funcionado el modulo:
cripto:/ # cat /var/log/apache2/error.log | grep ModSecurity
Debemos obtener una salida como ésta:
[Fri May 02 17:55:39 2008] [notice] ModSecurity for Apache/2.5.1
(http://www.modsecurity.org/) configured.
Editamos el archivo de configuración de apache:
cripto:/ # vi /etc/apache2/apache2.conf
Cambiamos el nombre del servidor apache:
Servername cripto.localdomain.net
Agregamos una entrada en el archivo de hosts:
cripto:/ # vi /etc/hosts
127.0.0.1 cripto.localdomain.net cripto
Reiniciamos Apache:
cripto:/ # /etc/init.d/apache2 restart
Instalar WebGoat en Tomcat
Primero descargamos la aplicación (archivo war) del sitio de OWASP y la guardamos en la
carpeta de aplicaciones del Tomcat (en nuestro caso /opt/apache-tomcat-6.0.20/webapps) con
el nombre WebGoat.war.
Editamos el archivo de usuarios del Tomcat:
cripto:/ # vi /opt/apache-tomcat-6.0.20/conf/tomcat-users.xml
Se agregar los roles y los archivos necesarios para la aplicación WebGoat. A continuación se
muestra un ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="manager"/>
<role rolename="webgoat_basic"/>
<role rolename="webgoat_admin"/>
<role rolename="webgoat_user"/>
<user password="tomcat" roles="tomcat" username="tomcat,manager"/>
<user password="webgoat" roles="webgoat_admin" username="webgoat"/>
<user password="basic" roles="webgoat_user,webgoat_basic" username="basic"/>
<user password="guest" roles="webgoat_user" username="guest"/>
</tomcat-users>
Reiniciamos el tomcat:
cripto:/ # /etc/init.d/tomcat6 restart
Ingresamos a la aplicación mediante la siguiente URL: http://ip_servidor:8080/WebGoat/attack
Se nos despliega un cuadro de dialogo para ingresar el usuario y la contraseña (usuario guest,
password guest):
Luego aparece la pantalla de presentación de WebGoat:
Integración entre Apache y Tomcat con mod_jk
Para que apache redirija los request destinados a la aplicación WebGoat instalada en el Tomcat, es
necesario configurar el modulo mod_jk.
Instalamos el conector para Apache y Tomcat:
# apt-get isntall libapache2-mod-jk
Luego copiamos un archivo de configuración para incluirlo luego en el archivo de configuración de
Apache2:
# cp /usr/share/doc/libapache2-mod-jk/httpd_example_apache2.conf
/etc/apache2/mod_jk.conf
Editamos el archivo apache2.conf
# vi /etc/apache/apache2.conf
Y agregamos la siguiente línea el final del archivo:
Include /etc/apache2/mod_jk.conf
Luego editamos el archivo workers.properties
# vi /etc/libapache2-mod-jk/workers.properties
Debería quedar de la siguiente forma:
workers.tomcat_home=/opt/apache-tomcat-6.0.20
workers.java_home=/opt/java/jdk1.6.0_14
ps=/
worker.list=ajp13_worker
worker.ajp13_woker.port=8080
worker.ajp13_woker.host=127.0.0.1
worker.ajp13_woker.type=ajp13
Editamos el archivo mod_jk.conf
# vi /etc/lapache2/mod_jk.conf
Debería quedar de la siguiente forma:
jKWorkersFile
/etc/libapache2-mod-jk/workers.properties
JKLogFile
/var/log/apache/mod_jk.log
JKLogLevel
info
JKMount
/WebGoat/* ajp13_worker
Luego creamos un Virtual Host para la aplicación WebGoat del Tomcat en Apache2.
Copiamos el template de configuración para virtual host:
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/tomcat
Editamos el archivo del virtual host:
# vi /etc/apache2/sites-available/tomcat
Debería quedar de la siguiente manera:
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost
JkMount /WebGoat/* ajp13_woker
DocumentRoot /opt/apache-tomcat-6.0.20/webapps/WebGoat
ServerAlias webgoat
<Directoty />
Options FollowSymLinks
AllowOverride None
</Directoty>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
</VirtualHost>
Habilitamos el virtual host:
# a2ensite tomcat
Reiniciamos Apache:
# /etc/init.d/apache2 restart
Otras configuraciones
Reglas adicionales para ModSecurity
Para crear reglas adicionales, creamos un archivo donde definiremos las reglas:
# vi /etc/modsecurity2/6669_waf.conf
Agregamos en este archivo las nuevas reglas. Reiniciamos apache para recargar los combios.
Accediendo a las aplicaciones a través de apache
Para acceder al servidor apache (o a Tomcat a través de Apache), no se puede utilizar en la URL la
dirección ip, ya que ModSecurity rechaza el request. Para ello, hay que configurar, en la pc donde se
ejecute el browser, el archivo de hots.
En Linux: /etc/hosts, en WinXP: C:\WINDOWS\system32\drivers\etc\hosts
Hay que agregar una linea como la siguiente:
ip_server cripto.localdomain.net cripto
donde ip_server es la dirección ip del servidor donde está ejecutándose Apache y Tomcat. Después se
puede acceder con la url: http://cripto.localdomain.net.