Optimización de Configuración y Seguridad en Tomcat

Este artículo documenta ajustes de configuración, rendimiento y seguridad aplicados a Tomcat durante el desarrollo profesional. Dada la prevalencia de soluciones como java -jar, este contenido se centra en mejoras prácticas y concisas, actualizándose periódicamente según sea necesario.

Ocultar la Versión del Servidor

Para mejorar la seguridad ocultando la versión de Tomcat, se modifica el archivo catalina.jar.

  1. Extraiga el contenido de catalina.jar usando el comando unzip.
  2. Navegue al directorio org/apache/catalina/util dentro de los archivos extraídos.
  3. Edite el archivo ServerInfo.properties, modificando las propiedades server.info, server.number y server.built a valores genéricos o no informativos. Por ejemplo: ``` server.info=Apache Tomcat server.number=0.0.0.0 server.built=Nov 7 2016 20:05:27 UTC
  4. Comprima el archivo ServerInfo.properties modificado de nuevo en catalina.jar dentro del directorio lib de Tomcat.

Deshabilitar Métodos HTTP No Seguros

Se restringen métodos HTTP potencialmente inseguros como PUT, DELETE, HEAD, OPTIONS y TRACE modificando el archivo conf/web.xml de Tomcat. Añada la siguiente configuración dentro de las etiquetas <web-app>:

<security-constraint>
    <web-resource-collection>
        <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>
    </auth-constraint>
</security-constraint>

Redirección de Páginas de Error Personalizadas

Para personalizar las respuestas de error como 404, 502 o 403, edite el archivo conf/web.xml y añada las siguientes directivas:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.html</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/not-found.html</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/bad-request.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/internal-error.html</location>
</error-page>

Habilitar Soporte para Enlaces Simbólicos (Symlinks)

Para que Tomcat reconozca enlaces simbólicos, modifique el archivo conf/context.xml.

  • En Tomcat 7: ``` <Context allowLinking="true">
  • En Tomcat 8 y posteriroes: ``` <Context> <Resources allowLinking="true" /> </Context>
    
    

Añadir Cabeceras de Seguridad HTTP

Mejore la seguridad de las respuestas HTTP utilizando el filtro HttpHeaderSecurityFilter. Añada la siguiente configuración al archivo conf/web.xml:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>SAMEORIGIN</param-value>
    </init-param>
    <init-param>
        <param-name>blockContentTypeSniffingEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

Deshabilitar la Consola de Administración

Para restringir el acceso a la consola de administración de Tomcat, considere:

  • Eliminar el archivo conf/tomcat-users.xml.
  • Eliminar los directorios y archivso de la aplicación de administración del directorio webapps.
  • Alternativamente, configure reglas de acceso en un proxy inverso como Nginx.

Sobrescribir la Cabecera Server

Si Tomcat sirve directamente peticiones HTTP, puede personalizar la cabecera Server para evitar revelar la tecnología específica. Modifique el archivo conf/server.xml en el conector:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           server="WebServerName" />

Estandarizar el Formato de Registro de Acceso

Habilite el registro de Referer y User-Agent en los logs de acceso de Tomcat para facilitar la investigación de problemas de seguridad. Incluya X-Forwarded-For para obtener la IP real del cliente cuando se usa un proxy inverso como Nginx. Edite conf/server.xml:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="access_log" suffix=".log"
       pattern="%{X-Forwarded-For}i %h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false" />

Configurar la Codificación de Caracteres a UTF-8

Asegure el manejo correcto de caracteres estableciendo la codificación a UTF-8 en el archivo conf/server.xml:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" URIEncoding="UTF-8" />

Resolver Problemas de Fuentes Chinas en Aplicaciones Java

Si las fuentes chinas no se muestran correctamente (problema de caracteres garabateados), esto puede deberse a la codificación del proyecto o al uso de fuentes específicas. Si se utilizan fuentes especiales, cópielas al directorio de fuentes de la JDK.

Por ejemplo, cree el siguiente directorio en su instalación de JDK (ajuste la versión según sea necesario):

/jdk1.8.0_191/jre/lib/fonts/fallback

Copie el archivo de fuente simsun.ttc del sistema a este directorio y renómbrelo a simsun.ttf.

Habilitar el Mecanismo de Delegación de JVM en Tomcat

Para que el cargador de clases de Tomcat siga el mecanismo de delegación estándar de Java, modifique el archivo conf/context.xml:

<Context>
    <Loader delegate="true"/>
</Context>

El atributo delegate en el elemento Loader controla cómo se cargan las clases Java. Si delegate se establece en true, el cargador de clases de la aplicación web (WebAppClassLoader) primero delega la carga de clases a su cargador padre (hasta el BootstrapClassLoader). Si delegate es false (valor predeterminado), el WebAppClassLoader intenta cargar la clase él mismo antes de delegar a sus padres.

Etiquetas: tomcat configuracion seguridad java optimización

Publicado el 10-5 12:44