Guia Prático para Reforçar e Proteger o Servidor Apache Tomcat
O Tomcat é um dos servidores de Servlet e contêineres JSP mais populares. Ele é utilizado por diversos sites de alto tráfego, incluindo:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
O gráfico abaixo demonstra a posição do Tomcat no mercado de servidores de aplicações Java.
Fonte: Plumb
Tecnicamente, o Tomcat pode ser usado como um servidor de front-end para atender requisições diretamente. No entanto, em um ambiente de produção, é comum utilizar servidores web como Apache ou Nginx como front-end para direcionar as requisições ao Tomcat.
O uso de um servidor web para gerenciar as requisições proporciona benefícios em termos de desempenho e segurança. Se você estiver utilizando o Apache HTTP como servidor web de front-end, também é importante considerar a sua proteção.
A configuração padrão do Tomcat pode expor informações sensíveis, o que pode facilitar um ataque ao aplicativo. Este guia foi testado no Tomcat 7.x, em um ambiente UNIX.
Público-Alvo
Este guia foi desenvolvido para Administradores de Middleware, Suporte de Aplicações, Analistas de Sistemas ou qualquer pessoa interessada em aprender sobre o reforço e segurança do Tomcat.
É necessário um bom conhecimento dos comandos do Tomcat e do ambiente UNIX.
Observações
Para verificar as configurações, utilizaremos ferramentas de análise de cabeçalhos HTTP. Existem duas maneiras principais de realizar isso.
Para aplicações voltadas para a internet, você pode usar ferramentas específicas para análise de cabeçalhos HTTP para validar a implementação das configurações.
Para aplicações em intranet, as ferramentas de desenvolvedor do Google Chrome ou Firefox podem ser utilizadas.
Como boa prática, é recomendável fazer um backup de qualquer arquivo de configuração antes de modificá-lo.
Ao longo deste guia, nos referiremos à pasta de instalação do Tomcat como $tomcat.
A seguir, detalharemos os procedimentos de reforço e proteção do Tomcat.
Remoção do Banner do Servidor
Remover o banner do servidor do cabeçalho HTTP é uma das primeiras medidas de segurança que você deve implementar.
A exibição do banner do servidor expõe o produto e a versão utilizada, o que pode levar a vulnerabilidades de vazamento de informações.
Por padrão, uma página servida pelo Tomcat exibirá informações do servidor no cabeçalho HTTP.
Ocultaremos os detalhes do produto e da versão do cabeçalho do servidor:
- Acesse a pasta $tomcat/conf.
- Edite o arquivo server.xml com o editor vi.
- Adicione o seguinte à porta do conector:
Server =” “
Exemplo:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Salve o arquivo e reinicie o Tomcat. Ao acessar um aplicativo, o cabeçalho do servidor deverá exibir um valor em branco.
Iniciando o Tomcat com um Gerenciador de Segurança
O Gerenciador de Segurança protege contra a execução de applets não confiáveis em seu navegador.
Executar o Tomcat com um gerenciador de segurança é mais seguro do que executá-lo sem. O Tomcat possui excelente documentação sobre o Gerenciador de Segurança do Tomcat.
O benefício é que você não precisa alterar nenhum arquivo de configuração. A diferença está apenas na forma como você executa o arquivo startup.sh.
Basta iniciar o Tomcat com o argumento –security:
[[email protected] bin]# ./startup.sh -security Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Using Security Manager Tomcat started. [[email protected] bin]#
Habilitar SSL/TLS
Utilizar HTTPS para atender requisições web é essencial para proteger os dados entre o cliente e o Tomcat. Para tornar seu aplicativo web acessível via HTTPS, é necessário implementar um certificado SSL.
Assumindo que você já tenha o keystore pronto com o certificado, adicione a seguinte linha no arquivo server.xml na seção da porta do conector:
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Modifique o nome e a senha do arquivo Keystore com suas informações.
Caso necessite de auxílio com o processo de geração do keystore e CSR, consulte este guia.
Forçar HTTPS
Esta configuração só se aplica caso você tenha habilitado o SSL. Caso contrário, o aplicativo poderá apresentar problemas.
Após habilitar o SSL, é recomendável forçar o redirecionamento de todas as requisições HTTP para HTTPS, garantindo uma comunicação segura entre o usuário e o servidor de aplicações Tomcat.
- Acesse a pasta $tomcat/conf.
- Edite o arquivo web.xml utilizando o vi.
- Adicione o seguinte antes da tag </web-app>:
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
- Salve o arquivo e reinicie o Tomcat.
Adicionar Flag Secure e HttpOnly ao Cookie
É possível roubar ou manipular a sessão e os cookies de um aplicativo web sem que o cookie seja seguro. Trata-se de um flag injetado no cabeçalho de resposta.
Para isso, adicione as seguintes linhas na seção session-config do arquivo web.xml:
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Configuração:
Salve o arquivo e reinicie o Tomcat para analisar o cabeçalho de resposta HTTP.
Executar o Tomcat com uma Conta Não Privilegiada
É recomendável utilizar um usuário não privilegiado separado para o Tomcat. O objetivo é proteger outros serviços em execução caso alguma conta seja comprometida.
- Crie um usuário UNIX, por exemplo, tomcat:
useradd tomcat
- Pare o Tomcat caso esteja em execução.
- Altere a propriedade do diretório $tomcat para o usuário tomcat.
chown -R tomcat:tomcat tomcat/
Inicie o Tomcat e verifique se ele está sendo executado com o usuário tomcat.
Remover Aplicativos Padrão/Indesejados
Por padrão, o Tomcat vem com os seguintes aplicativos web, que podem não ser necessários em um ambiente de produção:
Você pode excluí-los para manter a instalação limpa e evitar qualquer risco de segurança relacionado aos aplicativos padrão do Tomcat.
- ROOT – página de boas-vindas padrão
- docs – Documentação do Tomcat
- examples – JSP e servlets para demonstração
- manager, host-manager – administração do Tomcat
Esses aplicativos estão localizados na pasta $tomcat/webapps.
[[email protected] webapps]# ls -lt drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT [[email protected] webapps]#
Alterar a Porta e o Comando SHUTDOWN
Por padrão, o Tomcat está configurado para ser desligado na porta 8005.
Você sabia que é possível desligar a instância do Tomcat através de um telnet para IP:porta e enviando o comando SHUTDOWN?
Chandans # telnet localhost 8005 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SHUTDOWN Connection closed by foreign host. Chandans #
Isso é perigoso!
Configurações padrão representam um alto risco de segurança.
Recomenda-se alterar a porta de desligamento do Tomcat e o comando padrão para algo imprevisível.
- Modifique o seguinte em server.xml:
<Server port="8005" shutdown="SHUTDOWN">
8005 – Altere para outra porta não utilizada.
SHUTDOWN – Altere para algo complexo.
Exemplo:
<Server port="8867" shutdown="NOTGONNAGUESS">
Substituir as Páginas Padrão 404, 403 e 500
Utilizar as páginas de erro padrão para “não encontrado”, “proibido” e “erro do servidor” expõe informações da versão do Tomcat.
Veja a página 404 padrão:
Para mitigar isso, crie uma página de erro genérica e configure o arquivo web.xml para redirecionar para essa página.
- Acesse a pasta $tomcat/webapps/$application.
- Crie um arquivo error.jsp utilizando o editor vi:
<html> <head> <title>Error Page</title> </head> <body> That's an error! </body> </html>
- Acesse a pasta $tomcat/conf.
- Adicione o seguinte ao arquivo web.xml. Certifique-se de adicionar antes da tag </web-app>:
<error-page> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>403</error-code> <location>/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page>
- Reinicie o servidor Tomcat para testar as alterações.
Bem melhor!
Você também pode fazer isso para java.lang.Exception. Isso evitará a exposição de informações da versão do Tomcat caso ocorra alguma exceção Java Lang.
Basta adicionar o seguinte no web.xml e reiniciar o servidor Tomcat:
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Esperamos que este guia tenha fornecido uma boa visão sobre como proteger o Tomcat. Caso deseje aprofundar seus conhecimentos em administração do Tomcat, confira este curso online. Além disso, descubra como configurar o WAS para evitar solicitar senha durante o desligamento aqui.