Apache Tomcat 强化和安全指南

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

  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.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
  • 将以下内容添加到Connector port
Server =""
示例
<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
Server =" "
redirectPort="8443" />
  • 保存文件并重新启动 Tomcat。现在,当您访问应用程序时,您应该会看到 Server 标头的空白值。

使用安全管理器启动 Tomcat

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

使用安全管理器运行 Tomcat 比不使用安全管理器要好。Tomcat 有关于Tomcat 安全管理器的优秀文档。

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

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

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

启用 SSL/TLS

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

假设您已经准备好带有证书的密钥库,您可以在部分server.下的 xml 文件中添加以下行Connector port

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

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

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

强制 HTTPS

这仅在您启用 SSL 时适用。如果没有,它将破坏应用程序。

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

  • 转到 $tomcat/conf 文件夹
  • web.xml使用修改vi
  • </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。这是一个注入响应头的标志。

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

<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 文件夹下

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

更改 SHUTDOWN 端口和命令

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

你知道你可以通过远程登录到 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 文件中添加以下内容。</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服务器测试一下

好多了!

你也可以这样做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 的想法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值