Guia de proteção e segurança do Apache Tomcat
Publicados: 2015-02-14Um guia prático para fortalecer e proteger o Apache Tomcat Server com as melhores práticas.
O Tomcat é um dos servidores Servlet e JSP Container mais populares. É usado por alguns dos seguintes sites de alto tráfego:
- LinkedIn.com
- Dailymail.co.uk
- Comcast.net
- Wallmart.com
- Reuters.com
- Meetup.com
- Webs.com
O gráfico abaixo mostra a posição de mercado do Tomcat no servidor de aplicativos Java.

Tecnicamente, você pode usar o Tomcat como um servidor front-end para atender solicitações do site diretamente. No entanto, em um ambiente de produção, você pode querer usar alguns servidores web como Apache, Nginx como front-end para rotear as solicitações para o Tomcat.
O uso de um servidor da Web para lidar com as solicitações oferece benefícios de desempenho e segurança . Se você estiver usando o Apache HTTP como um servidor web front-end, considere protegê-lo também.
A configuração padrão do Tomcat pode expor informações confidenciais, o que ajuda o hacker a se preparar para um ataque ao aplicativo.
A seguir são testados no Tomcat 7.x, ambiente UNIX.
Público
Isso foi projetado para Administrador de Middleware, Suporte de Aplicativo, Analista de Sistemas ou qualquer pessoa que esteja trabalhando ou ansiosa para aprender o Tomcat Hardening and Security.
Bom conhecimento do comando Tomcat e UNIX é obrigatório.
Notas
Exigimos alguma ferramenta para examinar cabeçalhos HTTP para verificação. Há duas maneiras de você fazer isto.
Se estiver testando um aplicativo voltado para a Internet , você poderá usar as seguintes ferramentas de cabeçalho HTTP para verificar a implementação.
- Verificador de cabeçalho HTTP
- Alvo de hackers
E para um aplicativo de Intranet , você pode usar as ferramentas de desenvolvedor do Google Chrome e Firefox.
Como prática recomendada, você deve fazer um backup de qualquer arquivo que esteja prestes a modificar.
Chamaremos a pasta de instalação do Tomcat como $tomcat ao longo destas diretrizes.
Vamos passar pelos procedimentos de endurecimento e fixação.
Remover banner do servidor
Remover o banner do servidor do cabeçalho HTTP é uma das primeiras coisas a fazer como proteção.
Ter um banner de servidor expõe o produto e a versão que você está usando e leva à vulnerabilidade de vazamento de informações.
Por padrão, uma página servida pelo Tomcat será exibida assim.

Vamos ocultar os detalhes do produto e da versão do cabeçalho do servidor.
- Vá para a pasta $tomcat/conf
- Modifique server.xml usando vi
- Adicione o seguinte à
Connector port
Server =” “
Exemplo: –
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
- Salve o arquivo e reinicie o Tomcat. Agora, ao acessar um aplicativo, você deverá ver um valor em branco para o cabeçalho do servidor.

Iniciando o Tomcat com um gerenciador de segurança
O Security Manager protege você de um applet não confiável em execução em seu navegador.
Executar o Tomcat com um gerenciador de segurança é melhor do que executar sem um. O Tomcat possui uma excelente documentação sobre o Tomcat Security Manager.
O bom disso é que você não precisa alterar nenhum arquivo de configuração. É apenas a maneira como você executa o arquivo startup.sh
.
Tudo o que você precisa fazer é iniciar o tomcat com o argumento –security
.
[root@geekflare 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. [root@geekflare bin]#
Ativar SSL/TLS
O atendimento de solicitações da Web por HTTPS é essencial para proteger os dados entre o cliente e o Tomcat. Para tornar seu aplicativo da Web acessível por meio de HTTPS, você precisa implementar o certificado SSL.
Supondo que você já tenha o keystore pronto com o certificado, você pode adicionar a linha abaixo no server.
xml na seção da Connector port
.
SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"
Altere o nome e a senha do arquivo Keystore com o seu.
Se você precisar de ajuda com o processo de armazenamento de chaves e CSR, consulte este guia.
Aplicar HTTPS
Isso só é aplicável quando você ativou o SSL. Caso contrário, ele interromperá o aplicativo.
Depois de habilitar o SSL, seria bom forçar o redirecionamento de todas as solicitações HTTP para HTTPS para comunicação segura entre o usuário e o servidor de aplicativos Tomcat.
- Vá para a pasta $tomcat/conf
- Modifique
web.xml
usandovi
- Adicione o seguinte antes da sintaxe
</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 sinalizador Secure & HttpOnly ao Cookie
É possível roubar ou manipular a sessão e os cookies do aplicativo da Web sem ter um cookie seguro. É um sinalizador que é injetado no cabeçalho de resposta.

Isso é feito adicionando abaixo da linha na seção session-config
do arquivo web.xml
<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>
Captura de tela de configuração:

Salve o arquivo e reinicie o Tomcat para examinar o cabeçalho de resposta HTTP.
Execute o Tomcat de uma conta sem privilégios
É bom usar um usuário não privilegiado separado para o Tomcat. A ideia aqui é proteger outros serviços em execução caso alguma conta seja comprometida.
- Crie um usuário UNIX, digamos tomcat
useradd tomcat
- Pare o Tomcat se estiver em execução
- Altere a propriedade do $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 do tomcat
Remover aplicativos padrão/indesejados
Por padrão, o Tomcat vem com os seguintes aplicativos da web, que podem ou não ser necessários em um ambiente de produção.
Você pode excluí-los para mantê-los limpos e evitar qualquer risco de segurança conhecido com o aplicativo padrão do Tomcat.
- ROOT – página de boas-vindas padrão
- Documentos – Documentação do Tomcat
- Exemplos – JSP e servlets para demonstração
- Gerente, gerente de host – administração do Tomcat
Eles estão disponíveis na pasta $tomcat/webapps
[root@geekflare 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 [root@geekflare webapps]#
Alterar porta e comando SHUTDOWN
Por padrão, o tomcat está configurado para ser desligado na porta 8005.
Você sabe que pode desligar a instância do tomcat fazendo um telnet para IP: port e emitindo 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 #
Perigoso!
Veja bem, ter uma configuração padrão leva a 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 – Mude para alguma outra porta não utilizada
SHUTDOWN – Mudar para algo complicado
Ex-
<Server port="8867" shutdown="NOTGONNAGUESS">
Substituir a página padrão 404, 403, 500
Ter a página padrão para não encontrado, proibido, erro do servidor expõe os detalhes da versão.
Vejamos a página 404 padrão.

Para atenuar, você pode primeiro criar uma página de erro geral e configurar o web.xml para redirecionar para uma página de erro geral.
- Vá para $tomcat/webapps/$application
- Crie um arquivo error.jsp usando o editor
vi
<html> <cabeça> <title>Página de erro</title> </head> <body> Isso é um erro! </body> </html>
- Vá para a pasta $tomcat/conf
- Adicione o seguinte no arquivo web.xml. Certifique-se de adicionar antes da sintaxe
</web-app>
<página de erro> <error-code>404</error-code> <location>/error.jsp</location> </error-page> <página de erro> <error-code>403</error-code> <location>/error.jsp</location> </error-page> <página de erro> <error-code>500</error-code> <location>/error.jsp</location> </error-page>
- Reinicie o servidor tomcat para testá-lo

Muito melhor!
Você também pode fazer isso para java.lang.Exception
. Isso ajudará a não expor informações de versão do tomcat se houver alguma exceção de java lang.
Basta adicionar o seguinte no web.xml
e reiniciar o servidor tomcat.
<página de erro> <exception-type>java.lang.Exception</exception-type> <location>/error.jsp</location> </error-page>
Espero que o guia acima lhe dê uma ideia de como proteger o Tomcat. Se você deseja aprender mais sobre a administração do Tomcat, confira este curso online.
Além disso, saiba como configurar o WAS para parar de pedir senha durante o desligamento aqui.