Tomcat 9 安全加固内容
NUM | 加固内容 | 说明 | 备注 |
---|---|---|---|
1 | 补丁安装 | 使用最新版本tomcat | |
2 | 目录权限 | 修改tomcat目录权限为运行用户 | |
3 | 运行权限 | 运行tomcat的用户不能是root | |
4 | 删除项目无关文件和目录 | 删除webapps/下目录 | |
5 | 删除控制台 | 在tomcat-users.xml中停用所有用户 | tomcat-users.xml |
6 | Shutdown Port | server.xml | |
7 | 禁止自动部署 | server.xml | |
8 | 开启访问日志记录 | localhost_access_log | server.xml |
9 | 系统Banner | 隐藏telnet判断信息,隐藏http请求错误信息 | server.xml ,catalina.jar |
10 | 禁用http方法 | 禁用PUT 、DELETE 等危险的HTTP方法 | web.xml |
11 | 禁止目录浏览 | web.xml | |
12 | 错误页面 | 404报错,java.lang.NullPointerException报错 | web.xml |
13 | Website Icon | 不是安全问题,影响不大,没有的话部分浏览器有报错 | favicon.ico |
14 | 修改默认默认端口 | server.xml |
5. 删除控制台
在tomcat-users.xml中停用所有用户,默认就没开
6. Shutdown Port and Command
推荐加固方式:
<Server port="18005" shutdown="stop">
另一种方法:
还可以设置port属性为 -1
,关闭 shutdown port
<Server port="-1" shutdown="SHUTDOWN">
关闭后,bin/shutdown.sh 就失效了,提示
SEVERE: No shutdown port configured. Shut down server through OS signal. Server not shut down.
7. 禁止自动部署 (在运行的Tomcat部署应用)
将host节点的autoDeploy属性设置为“false”
如果存在deployOnStartup属性,也将其更改为“false”
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false">
8. 开启访问日志记录
server.xml
默认就有如下配置,不用修改
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
9. 系统Banner
禁止Tomcat在Response Header返回server信息
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
enableLookups="false" redirectPort="8443" server="Application Server" />
server=""
也行
隐藏error page返回
server.xmlhttps://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve
修改Error_Report_Valve属性为false
,解决报错泄露,添加好host部分
<valve classname="org.apache.catalina.valves.ErrorReportValve" showreport="false" showserverinfo="false"/>
web.xml
修改DefaultServlet 配置 showServerInfo 属性为false
或者
创建文件CATALINA_BASE/lib/org/apache/catalina/util/ServerInfo.properties
,内容为:
server.info=Application Server
或者
进入 apache-tomcat-9.0.53/lib/
目录,执行如下:
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
如上会从catalina.jar
解压org/apache/catalina/util/ServerInfo.properties
文件,文件内容如下:
[root@glj_vm lib]# cat org/apache/catalina/util/ServerInfo.properties |grep -v '#'
server.info=Apache Tomcat/9.0.53
server.number=9.0.53.0
server.built=Sep 6 2021 19:09:00 UTC
修改server.info 和 server.number
执行如下,将org/apache/catalina/util/ServerInfo.properties
打包进catalina.jar
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties
10. 禁用http方法
编辑web.xml 文件中配置,将readonly 的param-value值设为false
org.apache.catalina.servlets.DefaultServlet的
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
11. 禁止目录浏览
conf/web.xml
将listings的值设置为false。
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
12. 错误页面
conf/web.xml
web-app添加子节点:
<!-- == Error Pages == -->
<error-page>
<error-code>403</error-code>
<location>/403.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.</location>
</error-page>
在webapps目录下创建ROOT/404.html
,定义自定义错误信息。范例如下:
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="utf-8" />
<title>HTTP状态 404 - 未找到</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;text-align: center; padding: 50px; background-color:#2d2d2d; color:#fff;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style>
</head>
<body>
<h1>HTTP状态 404 - 未找到</h1>
<hr class="line" />
<p><b>描述</b> 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。</p>
<hr class="line" />
<h3>Application Server</h3>
</body>
</html>
13. Change the Website Icon
添加 64*64 的LOGO到 <Tomcat_Home>/webapps/ROOT/favicon.ico
14.修改默认默认端口
1.修改默认的 8005
管理端口(最好将SHUTDOWN修改为其他字符串)
2.修改默认的 8009
AJP端口(未用到的话,最好关掉——直接注释或删掉)
3.修改默认的 HTTP 端口 8080