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.
- Extraiga el contenido de
catalina.jarusando el comandounzip. - Navegue al directorio
org/apache/catalina/utildentro de los archivos extraídos. - Edite el archivo
ServerInfo.properties, modificando las propiedadesserver.info,server.numberyserver.builta 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 - Comprima el archivo
ServerInfo.propertiesmodificado de nuevo encatalina.jardentro del directoriolibde 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.