https://www.yuque.com/geray-alxoc/bapt5y/hg4ere#UofNs
1、网络访问控制
如果您的业务不需要使用 Tomcat 管理后台管理业务代码,建议您使用安全组防火墙功能对管理后台 URL 地址进行拦截,或直接将 Tomcat 部署目录中 webapps 文件夹中的 manager、host-manager 文件夹全部删除,并注释 Tomcat 目录中 conf 文件夹中的 tomcat-users.xml 文件中的所有代码。
如果您的业务系统确实需要使用 Tomcat 管理后台进行业务代码的发布和管理,建议为 Tomcat 管理后台配置强口令,并修改默认 admin 用户,且密码长度不低于10位,必须包含大写字母、特殊符号、数字组合。
2、开启Tomcat访问日志
修改 conf/server.xml 文件,将下列代码取消注释:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
启用访问日志功能,重启 Tomcat 服务后,在 tomcat_home/logs 文件夹中就可以看到访问日志。
3、Tomcat默认账户安全
修改 Tomcat 安装目录 conf 下的 tomcat-user.xml 文件,重新设置复杂口令并保存文件。重启 Tomcat 服务后,新口令即生效。
4、修改默认端口
修改 conf/server.xml 文件把默认的 8080 访问端口改成其它端口。
5、重定向错误页面
修改访问 Tomcat 错误页面的返回信息,在 webapps\manger 目录中创建相应的401.html、404.htm、500.htm 文件,然后在 conf/web.xml 文件的最后一行之前添加下列代码:
<error-page>
<error-code>401</error-code>
<location>/401.htm</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.htm</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.htm</location>
</error-page>
6、禁止列出目录
在web.xml文件中,防止直接访问目录时由于找不到默认页面,而列出目录下的文件的情况。
<param-name>listings</param-name>
<param-value>false</param-value>
7、删除文档和实例程序
删除 webapps 目录下的 docs、examples、manager、ROOT、host-manager 文件夹。
8、安全审计
开启审计功能,在server.xml里的
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
9、隐藏版本号
修改$CATALINA_HOME/conf/server.xml,在Connector节点添加server字段
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" server="noinfo" />
10、会话超时退出以及线程数
应配置server.xml文件,配置会话超时退出时间KeepAliveTimeout及CONNECTIONTIMEOUT的值, 以及线程数限制, 样例:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="1800" #会话超时
maxthreads="300" #线程数限制
KeepAliveTimeout="1800"
redirectPort="8443" />
11、服务权限控制
tomcat以非root权限启动,应用部署目录权限和tomcat服务启动用户分离,如tomcat以tomcat用户启动,而部署应用的目录设置为nobody用户750
12、修改SHUTDOWN字符串(或使用其他端口)
主要用于防止未授权用户关闭tomcat服务器
在Tomcat配置文件$CATALINA_HOME/conf/server.xml,有如下的配置,
< Server port ="8005" shutdown="SHUTDOWN" debug="0" >
将shutdown 属性值改成SHUTDOWNT,即
13、拒绝TRACE请求
TRACE方法是HTTP(超文本传输)协议定义的一种协议调试方法,该方法使得服务器原样返回任何客户端请求的内容(可能会附加路由中间的代理服务器的信息),由于该方法原样返回客户端提交的任意数据,因此,可用来进行跨站脚本(XSS)攻击
配置TOMCAT服务器拒绝TRACE请求方法:
在Tomcat配置文件$CATALINA_HOME/conf/server.xml中,可以给 Connector(连接器)配置allowTrace属性,该属于用于设置是否启用指定连接器的Trace方法,如下:
默认,没有启用Trace,配置如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
如果当进行如下配置时,则允许接受TRACE请求
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
allowTrace="true"/>
14、不发送“X-Powered-By”HTTP响应头
X-Powered-By字段值包含 Servlet 和 JSP 规范版本号、完整的 Tomcat 版本号(比如 Apache Tomcat/8.0)、JVM Vendor 名称,以及 JVM 版本号等信息,禁止发送Tomcat服务器发送X-Powered-By”HTTP响应头,可以防止恶意攻击者从中获取目标服务器信息。
在Tomcat配置文件$CATALINA_HOME/conf/server.xml中,可以给 Connector(连接器)配置xpoweredBy属性,该属于在于设置指定连接器在响应头部是否发送X-Powered-By, 默认,不发送X-Powered-By。如果配置成xpoweredBy=”true”,比如:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
xpoweredBy="true"/>