Tomcat 安全优化

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

原文地址:https://www.cnblogs.com/2567xl/p/12682311.html