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.
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:
connectionTimeout="20000"
redirectPort="8443" minSpareThreads="25" maxSpareThreads="75"
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-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: Administracion, Seguridad
0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio