1、telnet 管理端口保护(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
telnet 管理端口保护 |
1、修改默认的 8005 管理端口为不易猜测的端口(大于 1024); 2、修改 SHUTDOWN 指令为其他字符串; |
<Server port="8527" shutdown="guanbi"> | 以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在 8000~8999 之间; |
2、ajp 连接端口保护(推荐)
类别 | 配置内容及说明 | 标准配置 | 备注 |
AJP 连接端口保护 |
1、修改默认的 ajp 8009 端口为不易冲突的大于 1024 端口; 2、通过 iptables 规则限制 ajp 端口访问的权限仅为线上机器; |
<Connector port="8528" protocol="AJP/1.3"> |
以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置,但要求端口配置在 8000~8999 之间;保护此端口的目的在于防止线下的测试流量被 mod_jk 转发至线上 tomcat 服务器; |
3、禁用管理端(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
禁用管理端 |
1、删除默认的{Tomcat 安装目录}/conf/tomcat-users.xml 文件,重启 tomcat 后将会自动生成新的文件; 2、删除{Tomcat 安装目录}/webapps 下默认的所有目录和文件; 3、将 tomcat 应用根目录配置为 tomcat 安装目录以外的目录; |
<Context path="" docBase="/web/webapps" debug="0" reloadable="false" crossContext="true" /> | 对于前端 web 模块,Tomcat 的高危安全隐患,一旦被攻破,黑客通过上传 web shell 的方式将会直接取得服务器的控制权,后果极其严重; |
4、降权启动(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
降权启动 |
1、tomcat 启动用户权限必须为非 root 权限,尽量降低 tomcat 启动用户的目录访问权限; 2、如需直接对外使用 80 端口,可通过普通账号启动后,配置 iptables 规则进行转发; |
useradd tomcat cp -a /usr/local/tomcat8 /home/tomcat/tomcat8_1/ chown -R tomcat:tomcat /home/tomcat/tomcat8_1/ su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat ps -ef | grep tomcat |
避免一旦 tomcat 服务被入侵,黑客直接获取高级用户权限危害整个 server 的安全; |
5、文件列表访问控制(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
文件列表访问控制 | 1、conf/web.xml 文件中 default 部分 listings 的配置必须为 false; |
<init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> |
false 为不列出目录文件,true 为允许列出,默认为 false; |
6、版本信息隐藏(强制)
类别 | 配置内容及说明 | 标准配置 | 备注 |
版本信息隐藏 |
1、修改 conf/web.xml,重定向 403、404 以及 500 等错误到指定的错误页面; 2、也可以通过修改应用程序目录下的 WEB-INF/web.xml 下的配置进行错误页面的重定向; |
<error-page> <error-code>403</error-code> <location>/forbidden.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/notfound.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/systembusy.jsp</location> </error-page> |
在配置中对一些常见错误进行重定向,避免当出现错误时 tomcat 默认显示的错误页面暴露服务器和版本信息;必须确保程序根目录下的错误页面已经存在; |
7、Server header 重写(推荐)
类别 | 配置内容及说明 | 标准配置 | 备注 |
Server header 重写 | 在 HTTP Connector 配置中加入 server 的配置; | server="webserver" | 当 tomcat HTTP 端口直接提供 web 服务时此配置生效,加入此配置,将会替换 http 响应 Server header 部分的默认配置,默认是 Apache-Coyote/1.1 |
8、访问限制(可选)
类别 | 配置内容及说明 | 标准配置或操作 | 备注 |
访问限制 | 通过配置,限定访问的 ip 来源 |
<Context path="" docBass="/web/webapps" debug="0" reloadable="false" crossContext="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="61.148.18.138,61.135.165.*" deny="*.*.*.*"/> </Context> |
通过配置信任 ip 的白名单,拒绝非白名单 ip 的访问,此配置主要是针对高保密级别的系统,一般产品线不需要; |
9、起停脚本权限回收(推荐)
类别 | 配置内容及说明 | 标准配置或操作 | 备注 |
起停脚本权限回收 | 去除其他用户对 Tomcat 的 bin 目录下 shutdown.sh、startup.sh、catalina.sh 的可执行权限; | chmod -R 744 tomcat/bin/* | 防止其他用户有起停线上 Tomcat 的权限; |
10、访问日志格式规范(推荐)
类别 | 配置内容及说明 | 标准配置或操作 | 备注 |
访问日志格式规范 | 开启 Tomcat 默认访问日志中的 Referer 和 User-Agent 记录 | <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i %{UserAgent}i %D" resolveHosts="false"/> | 开启 Referer 和 User-Agent 是为了一旦出现安全问题能够更好的根据日志进行问题排查; |
11、禁止列出目录
vim /usr/local/tomcat8/conf/web.xml
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
12、页面超时
<session-config>
<session-timeout>30</session-timeout>
</session-config>
13、默认页面
vim /usr/local/tomcat8/conf/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome.file>
</welcome-file-list>
14、配置页面传输压缩
vim /usr/local/tomcat8/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on" #开启压缩
compressionMinSize="50" #指定最小的压缩文件,单位是字节
noCompressionUserAgents="gozilla,Traviata" #此浏览器类型不进行压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/> #文件的格式
/usr/local/tomcat8/bin/shutdown.sh
/usr/local/tomcat8/bin/startup.sh