Tomcat 安全配置手册
前提 1:CATALINA_HOME 为 tomcat 安装目录!
前提 2:修改任何文件请提前备份!
一 目录安全
1:移除 tomcat 样例目录和帮助文档应用
1) 删除CATALINA_HOME/webapps/manager目录。
2) 删除CATALINA_HOME/webapps/host-manager目录。
3) 删除CATALINA_HOME/webapps/docs目录。
这些 tomcat 自带文件并不包含任何已知的漏洞,但现已证明,它所包含的一些功能可以被攻击者利用。
2:移除 tomcat 样例程序
1) 删除CATALINA_HOME/webapps/ROOT目录。
ROOT 应用带来安全风险的可能性非常小,但它确实含有正在使用的 Tomcat 的版本号。
3:隐藏版本信息
[解压catalina.jar]
cd CATALINA_HOME/lib/
unzip catalina.jar
[修改ServerInfo.properties ,把版本信息删除]
vi org/apache/catalina/util/ServerInfo.properties
server.info=
server.number=
server.built=
[重新压缩到catalina.ja中]
cd CATALINA_HOME/lib/
jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
[重启 tomcat]
docs, examples 等目录以及默认的 404 页面会泄露 Tomcat 的版本信息。此外,攻击者可以利用 example 中的部分示例代码读写 session, 有一定潜在危害。。
二 web.xml 安全配置
路径:CATALINA_HOME/conf/web.xml
1:自定义错误页面
在web.xml最后面加上配置(参考图片)
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
减少在错误页面中暴露敏感信息的风险。
三 server.xml 安全配置
路径:CATALINA_HOME/conf/server.xml
1:SHUTDOWN 字符串修改
找到shutdown="SHUTDOWN",把"SHUTDOWN"改成"ishutdown"
主要用于防止未授权用户关闭 tomcat 服务器。
2:禁止目录列表
找到如下字样,确保值是false
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
禁止目录列表功能可以避免因暴露目标网站的目录结构和敏感文件,最终造成敏感信息丢失。
3:拒绝 TRACE 请求方法
在文件中查找"allowTrace"字样,如果是"allowTrace"不存在或者"allowTrace=false",则没问题,
如果"allowTrace=true",必须改成false
TRACE 方法是 HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此,可用来进行跨站脚本(XSS)攻击,这种攻击方式又称为跨站跟踪攻击(XST)。
4:不发送“X-Powered-By”HTTP 响应头
在文件中查找"xpoweredBy"字样,如果是"xpoweredBy"不存在或者"xpoweredBy=false",则没问题,
如果"xpoweredBy=true",必须改成false
X-Powered-By 字段值包含 Servlet 和 JSP 规范版本号、完整的 Tomcat 版本号(比如 Apache Tomcat/8.0)、JVM Vendor 名称,以及 JVM 版本号等信息,禁止发送 Tomcat 服务器发送 X-Powered-By”HTTP 响应头,可以防止恶意攻击者从中获取目标服务器信息。
四 账号安全配置
路径:CATALINA_HOME\conf\tomcat-users.xml
1: 去除 tomcat 的用户配置
确保文件中role和user开头的行是注释状态。参考如下:
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->
不要使用 tomcat 内置用户。