个性化阅读
专注于IT技术分析

Apache Tomcat强化和安全性指南

本文概述

实用指南, 以最佳实践强化和保护Apache Tomcat服务器。

Tomcat是最流行的Servlet和JSP容器服务器之一。以下一些高流量网站使用它:

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com

下图显示了Tomcat在Java应用服务器中的市场地位。

Apache Tomcat强化和安全性指南2

资料来源:Plumbr

从技术上讲, 你可以将Tomcat用作前端服务器来直接服务站点请求。但是, 在生产环境中, 你可能希望使用某些Web服务器(如Apache, Nginx)作为前端将请求路由到Tomcat。

使用Web服务器处理请求可以提高性能和安全性。如果将Apache HTTP用作前端Web服务器, 则还必须考虑确保其安全。

使用默认的Tomcat配置可能会泄露敏感信息, 这有助于黑客为对应用程序的攻击做好准备。

以下是在Tomcat 7.x和UNIX环境下进行的测试。

听众

这是为中间件管理员, 应用程序支持, 系统分析师或任何正在工作或渴望学习Tomcat强化和安全性的人员设计的。

必须具备Tomcat&UNIX命令的良好知识。

笔记

我们需要一些工具来检查HTTP标头以进行验证。有两种方法可以执行此操作。

如果测试面向Internet的应用程序, 则可以使用以下HTTP Header工具来验证实现。

  • HTTP标头检查器
  • 黑客目标

对于Intranet应用程序, 你可以使用Google Chrome, Firefox开发人员工具。

最佳做法是, 你必须备份要修改的任何文件。

在本指南中, 我们将Tomcat安装文件夹称为$ tomcat。

让我们来看看强化和保护程序。

删除服务器横幅

从HTTP标头中删除服务器横幅是进行加固的第一件事。

使用服务器标语公开你正在使用的产品和版本, 并导致信息泄漏漏洞。

默认情况下, Tomcat服务的页面将显示如下。

Apache Tomcat强化和安全性指南4

让我们从”服务器”标题中隐藏产品和版本的详细信息。

  • 转到$ tomcat / conf文件夹
  • 使用vi修改server.xml
  • 将以下内容添加到连接器端口
Server =" "

例如:–

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • 保存文件并重新启动Tomcat。现在, 当你访问应用程序时, 应该看到”服务器”标头的空白值。
Apache Tomcat强化和安全性指南6

使用安全管理器启动Tomcat

安全管理器可保护你免受浏览器中运行的不受信任的applet的侵害。

使用安全管理器运行Tomcat优于不使用安全管理器运行。 Tomcat具有有关Tomcat Security Manager的出色文档。

这样做的好处是你不需要更改任何配置文件。这只是你执行startup.sh文件的方式。

你要做的就是以–security参数启动tomcat。

[[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]#

启用S​​SL / TLS

通过HTTPS服务Web请求对于保护客户端和Tomcat之间的数据至关重要。为了使你的Web应用程序可以通过HTTPS访问, 你需要实现SSL证书。

假设你已经准备好证书的密钥库, 则可以在连接器端口部分的server.xml文件中添加以下行。

SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

用你的密钥库文件名和密码更改。

如果你需要有关密钥库和CSR流程的帮助, 请参阅本指南。

实现HTTPS

仅在启用SSL的情况下适用。如果没有, 它将中断应用程序。

启用S​​SL后, 最好将所有HTTP请求重定向到HTTPS, 以确保用户与Tomcat应用程序服务器之间的安全通信。

  • 转到$ tomcat / conf文件夹
  • 使用vi修改web.xml
  • 在</ 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>
  • 保存文件并重新启动Tomcat

将Secure&HttpOnly标志添加到Cookie

可以在没有安全cookie的情况下窃取或操纵Web应用程序会话和cookie。这是一个插入响应头的标志。

这是通过在web.xml文件的session-config部分的行下面添加来完成的

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

配置屏幕截图:

Apache Tomcat强化和安全性指南8

保存文件, 然后重新启动Tomcat以检查HTTP响应标头。

从非特权帐户运行Tomcat

最好为Tomcat使用一个单独的非特权用户。这里的想法是在任何帐户被盗用的情况下保护运行的其他服务。

  • 创建一个UNIX用户, 例如tomcat
useradd tomcat
  • 如果正在运行, 请停止Tomcat
  • 将$ tomcat所有权更改为用户tomcat
chown -R tomcat:tomcat tomcat/

启动Tomcat, 并确保它与tomcat用户一起运行

删除默认/不需要的应用程序

默认情况下, Tomcat随附以下Web应用程序, 在生产环境中可能需要或不需要。

你可以删除它们以使其保持干净, 并避免使用Tomcat默认应用程序的任何已知的安全风险。

  • ROOT –默认欢迎页面
  • 文档– Tomcat文档
  • 示例–用于演示的JSP和servlet
  • 主机管理员经理– Tomcat管理

它们位于$ 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]#

更改SHUTDOWN端口和命令

默认情况下, tomcat配置为在8005端口上关闭。

你是否知道可以通过对IP:端口进行telnet并发出SHUTDOWN命令来关闭tomcat实例?

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 #

危险的!

你会看到, 使用默认配置会带来很高的安全风险。

建议将tomcat shutdown端口和默认命令更改为不可预测的值。

  • 在server.xml中修改以下内容
<Server port="8005" shutdown="SHUTDOWN">

8005 –更改为其他未使用的端口

关机–更改为复杂的内容

<Server port="8867" shutdown="NOTGONNAGUESS">

替换默认的404、403、500页

找不到默认页面(禁止), 服务器错误公开了版本详细信息。

让我们看一下默认的404页面。

Apache Tomcat强化和安全性指南10

为了缓解这种情况, 你可以先创建一个常规错误页面, 然后将web.xml配置为重定向到常规错误页面。

  • 转到$ tomcat / webapps / $ application
  • 使用vi编辑器创建error.jsp文件
<html>
<head> 
<title>Error Page</title>
</head>
<body> That's an error! </body>
</html>
  • 转到$ tomcat / conf文件夹
  • 在web.xml文件中添加以下内容。确保在</ 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>
  • 重新启动tomcat服务器进行测试
Apache Tomcat强化和安全性指南12

好多了!

你也可以针对java.lang.Exception执行此操作。如果有任何Java lang异常, 这将有助于不公开tomcat版本信息。

只需在web.xml中添加以下内容, 然后重新启动tomcat服务器。

<error-page> 
<exception-type>java.lang.Exception</exception-type> 
<location>/error.jsp</location>
</error-page>

我希望以上指南能为你提供保护Tomcat的想法。如果你想了解有关Tomcat管理的更多信息, 请查看此在线课程。

赞(0)
未经允许不得转载:srcmini » Apache Tomcat强化和安全性指南

评论 抢沙发

评论前必须登录!