Apache Tomcat 强化和安全指南

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

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

  • LinkedIn.com
  • Dailymail.co.uk
  • 康卡斯特网
  • 沃尔玛网
  • 路透社
  • Meetup.com
  • 网站

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

资料来源:Plumbr

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

使用 Web 服务器处理请求可以带来性能和安全优势。 如果您使用 Apache HTTP 作为前端 Web 服务器,那么您还必须考虑保护它。

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

以下是在 Tomcat 7.x、UNIX 环境下测试的。

观众

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

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

笔记

我们需要一些工具来检查 HTTP 标头以进行验证。 有两种方法可以做到这一点。

如果测试面向 Internet 的应用程序,那么您可以使用以下 HTTP 标头工具来验证实现。

对于 Intranet 应用程序,您可以使用 Google Chrome、Firefox 开发工具。

作为最佳实践,您必须对要修改的任何文件进行备份。

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

让我们来看看硬化和固定程序。

删除服务器横幅

从 HTTP 标头中删除服务器标语是强化的首要任务之一。

使用服务器横幅会暴露您正在使用的产品和版本,并导致信息泄漏漏洞。

默认情况下,由 Tomcat 提供的页面将显示如下。

让我们从 Server 标头中隐藏产品和版本详细信息。

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

前任: –

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • 保存文件并重新启动 Tomcat。 现在,当您访问应用程序时,您应该会看到 Server 标头的空白值。
  15 个需要练习和学习的 Python 初学者项目

使用安全管理器启动 Tomcat

安全管理器保护您免受浏览器中运行的不受信任的小程序的侵害。

使用安全管理器运行 Tomcat 比不使用安全管理器要好。 Tomcat 有很好的文档 Tomcat 安全管理器.

这样做的好处是您不需要更改任何配置文件。 这只是您执行 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]#

启用 SSL/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 时适用。 如果没有,它将破坏应用程序。

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

  • 转到 $tomcat/conf 文件夹
  • 使用 vi 修改 web.xml
  • 在 语法之前添加以下内容
<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

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

  如何在 Microsoft Excel 电子表格之间交叉引用单元格

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

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

配置截图:

保存文件并重新启动 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
  • Manager, host-manager – 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 端口上关闭。

  7 种修复方法

你知道你可以通过远程登录到 IP: 端口并发出 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 关闭端口和默认命令更改为不可预测的内容。

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

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

SHUTDOWN – 改变一些复杂的东西

前任-

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

替换默认的 404、403、500 页面

具有未找到、禁止、服务器错误的默认页面会公开版本详细信息。

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

为了缓解,您可以首先创建一个常规错误页面并将 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 文件中添加以下内容。 确保在 语法之前添加
<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服务器测试一下

好多了!

您也可以对 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 管理的更多信息,请查看此 在线课程.
此外,在此处了解如何配置 WAS 以在关机期间停止询问密码。