Baseado na documentação da OWASP disponível em http://www.owasp.org/index.php/Securing_tomcat.
1 - Instalar a última versão do Java (JRE ou JDK) e do Tomcat;
2 - Remover as aplicações exemplo em webapps (ROOT, balancer, jsp-examples, servlet-examples, tomcat-docs, webdav, servlets-examples);
Ubuntu/Debian:
apt-get remove tomcat5.5-webapps
3 - Não rodar o servidor Tomcat como root. Criar um usuário e grupo específico para o serviço, e mudar a permissão de usuário e grupo do diretório CATALINA_HOME. O diretório CATALINA_HOME/conf deverá ter a permissão 400 e apenas o diretório CATALINA_HOME/logs deverá ter permissão de escrita para o usuário e grupo específico do serviço, além do /tmp;
4 - Desabilitar a exibição de arquivos, caso não exista o index. Editar o arquivo CATALINA_HOME/conf/web.xml :
<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> <!-- make sure this is false -->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5 - Remover a string de versão do Tomcat, para não mostrar em mensagens de erros:
* Extrair o arquivo:
cd CATALINA_HOME/server/lib
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
* Modificar a linha: server.info=Apache Tomcat
* Reempacotar o arquivo catalina.jar:
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
* Remover o diretório CATALINA_HOME/server/lib/org (criado quando extraído o arquivo ServerInfo.properties )
6 - Modificar a página de erro do Tomcat, pois a padrão do servidor expões informações sensíveis. Editar o arquivo CATALINA_HOME/conf/web.xml e adicionar a entrada abaixo após a entrada welcome-file-list:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
7 - Trocar a string de versão dos cabeçalhos HTTP, no arquivo CATALINA_HOME/conf/server.xml:
<Connector port="8080" ...
server="Apache" /> <!-- server header is now Apache -->
8 - Proteger a porta 8005, através de firewall (porta de shutdown);
<Server port="8005" shutdown="ReallyComplexWord">
9 - Remover os usuários não utilizados do manager do tomcat e trocar a senha do admin, no arquivo tomcat-users.xml:
<role rolename="manager"/>
<user username="darren" password="ReallyComplexPassword" roles="manager"/>
10 - Caso tenha certificado SSL no tomcat, para garantir que o acesso ao manager seja feito de forma criptografada, adicionar no arquivo CATALINA_HOME/webapps/manager/WEB-INF/web.xml:
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
<user-data-constraint>
11 - Limitar acesso à página de administração, editando o arquivo CATALINA_HOME/conf/Catalina/localhost/manager.xml :
<!-- allow only LAN IPs to connect to the manager webapp -->
<!-- contrary to the current Tomcat 5.5 documation the value for allow is not a regular expression -->
<!-- future versions may have to be specified as 192\.168\.1\.* -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.1.*" />