Apache Tomcat强化和安全性指南

本文概述

  • 删除服务器横幅
  • 使用安全管理器启动Tomcat
  • 启用S??SL / TLS
  • 实现HTTPS
  • 将Secure&HttpOnly标志添加到Cookie
  • 从非特权帐户运行Tomcat
  • 删除默认/不需要的应用程序
  • 更改SHUTDOWN端口和命令
  • 替换默认的404、403、500页
实用指南, 以最佳实践强化和保护Apache Tomcat服务器。
Tomcat是最流行的Servlet和JSP容器服务器之一。以下一些高流量网站使用它:
  • LinkedIn.com
  • Dailymail.co.uk
  • Comcast.net
  • Wallmart.com
  • Reuters.com
  • Meetup.com
  • Webs.com
下图显示了Tomcat在Java应用服务器中的市场地位。
Apache Tomcat强化和安全性指南

文章图片
资料来源: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强化和安全性指南

文章图片
让我们从” 服务器” 标题中隐藏产品和版本的详细信息。
  • 转到$ tomcat / conf文件夹
  • 使用vi修改server.xml
  • 将以下内容添加到连接器端口
Server =" "

例如:–
< Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />

  • 保存文件并重新启动Tomcat。现在, 当你访问应用程序时, 应该看到” 服务器” 标头的空白值。
Apache Tomcat强化和安全性指南

文章图片
使用安全管理器启动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"

用你的密钥库文件名和密码更改。
【Apache Tomcat强化和安全性指南】如果你需要有关密钥库和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强化和安全性指南

文章图片
保存文件, 然后重新启动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强化和安全性指南

文章图片
为了缓解这种情况, 你可以先创建一个常规错误页面, 然后将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强化和安全性指南

文章图片
好多了!
你也可以针对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管理的更多信息, 请查看此在线课程。

    推荐阅读