Bitácora de EleKtR0

English - Italiano - Deutsch - Français - Português - русский

23 de enero de 2014

Recomendaciones de seguridad para Tomcat

Con esta entrada quiero hacer una mini guía de referencia para securizar un Tomcat. En resumen, los puntos a seguir serían los siguientes:

1º No ejecutar el proceso con usuario root en sistemas Unix / Linux. Es mejor ejecutar el fichero startup.sh o catalina.sh con un usuario con pocos provilegios en el sistema. Por ejemplo se podría utilizar el usuario nobody o daemon que suelen incluir las distribuciones Linux.

2º Eliminar lo que no vaya a usarse en el directorio webapps de Tomcat.
Si no necesitaremos la consola web de administración eliminaría los directorios host-manager y manager, además de los directorios de documentación y ejemplos (docs y examples).
En el subdirectorio ROOT suelo dejar sólo un fichero index.html que redirecciona a la aplicación desplegada o bien muestra un mensaje al usuario.

3º En el conector HTTP usaremos una configuración de este tipo, cambiando los puertos por los que queramos usar:

  <Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443" minSpareThreads="25" maxSpareThreads="75"

maxHttpHeaderSize="8192"  enableLookups="false" 
disableUploadTimeout="true" acceptCount="100" maxThreads="200"
           
xpoweredBy="false" allowTrace="false" />

4º En el conector HTTPS usaremos una configuración como la siguiente:


      <Connector
           port="8443" minSpareThreads="25" maxSpareThreads="75" maxHttpHeaderSize="8192" enableLookups="false" disableUploadTimeout="true" acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true" xpoweredBy="false" allowTrace="false" keystoreFile="path_del_keystore.jks" keystorePass="contraseña_keystore" clientAuth="false" sslProtocol="TLS"
 ciphers="SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA" />


Si es necesario validar certificados de cliente tendremos que añadir al conector SSL las propiedades truststoreFile y truststorePass y si queremos que el cliente se autentique con un certificado de cliente debemos poner la propiedad clientAuth a true


Los conectores se configuran en el fichero server.xml de Tomcat

5º Asegurarnos de que el fichero web.xml tiene configurado el DefaultServlet de este modo:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>listings</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>
    </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>

6º Deshabilitar los métodos HTTP que no sean imprescindibles. Esto puede hacerse pegando las siguientes líneas tras la especificación del DefaultServlet en el fichero web.xml:

<security-constraint>
      <web-resource-collection>
      <web-resource-name>DisabledMethods</web-resource-name>
            <url-pattern>/*</url-pattern>
            <http-method>PUT</http-method>
            <http-method>DELETE</http-method>
            <http-method>HEAD</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
      </web-resource-collection>
      <auth-constraint/>
</security-constraint>


7º No olvidar que tener versiones anticuadas y con bugs conocidos de Tomcat o de la JVM que lo ejecuta es una fuente de problemas así que mejor estar actualizado.

Etiquetas: ,

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]



<< Página principal