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.