1. Tomcat运行在非root用户下
为Tomcat创建的专用用户,并拥有必须的最小权限。
useradd tomcat -M -d / -s /usr/sbin/nologin
2. 删除默认的应用
webapps目录下的应用删除或禁止访问。
3. 关闭Shutdown端口或复杂化停止密码
Shutdown端口设置为-1 或为Shutdown提供复杂密码。
<Server port="-1" shutdown="1q2w3e4r">
4. 禁用TRACE请求
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" allowTrace="fasle"/>
5. 关闭xpoweredBy响应头
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" xpoweredBy="fasle"/>
6. 禁用SSL v3协议
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" sslProtocols = "TLS" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2"/>
7. 禁用deployXML功能
<Host name="localhost" unpackWARs="false" deployXML="false">
8. 关闭自动部署
防止被植入恶意程序,关闭自动部署。部署应用时重启生效。
<Host name="localhost" appBase="" unpackWARs="false" autoDeploy="false">
9. 隐藏Tomcat的版本信息
修改catalina.jar!org\apache\catalina\util\ServerInfo.properties文件中的版本信息为
server.info=Apache Tomcat
server.number=
server.built=
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" server="AS 1.0"/>
10. 自定义错误页面
Tomcat内部生成的错误页面包含Tomcat相关信息。
编辑conf/web.xml,在</web-app>标签前添加以下内容
404 /404.html 500 /500.html
11. 限定访问的IP地址
一般存在前端负载均衡,请求地址比较固定。
<Host name="localhost" appBase="/data/www/apps" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.11,192.168.2.*" deny=""/>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,*.test.com" deny=""/></Host>
12. 开启访问日志记录
记录流量访问,会带来部分性能开销
<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 %{User-Agent}i %D"
resolveHosts="false" />
13. 禁用访问目录列表
编辑conf/web.xml文件
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
14. 禁用资源的修改权限
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
15. Tomcat与项目文件属主分离
即便攻破了Tomcat,也不能对项目文件进行更改。