1 删除默认目录和修改tomacat-users.xml
安装完tomcat后,删除$CATALINA_HOME/webapps下默认的所有目录文件 rm -rf /srv/apache-tomcat/webapps/*
注释conf/tomacat-users.xml 含有用户名、角色以及密码的清单文件
2 禁止列目录
Tomcat的设置中禁止列目录。conf/web.xml下
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
确认是false而不是true。
3 关闭war自动部署
conf/server.xml host标签关闭war自动部署unpackWARs=”false” autoDeploy=”false”。
防止被植入木马等恶意程序
4 修改或隐藏默认Tomcat的版本信息
在lib/catalina.jar 里依次路径找到\org\apache\catalina\util\ServerInfo.properties
将
server.info=Apache Tomcat/7.0.42
server.number=7.0.42.0
server.built=Jul 2 2013 08:57:41
改成
server.info=Neo App Srv 1.0
server.number=0.0.0.0
server.built=Mar 9 2018 13:49:01 UTC
5 管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
6 更改关闭 Tomcat 实例的指令
server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。 当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非黑客登陆到tomcat本机去执行关闭操作。
修改实例:
<Server port="8005" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
或者:
这种情况 ./shutdown 命令无法使用
<Server port="-1" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">
7 更改 Tomcat 的服务监听端口
一般公司的 Tomcat 都是放在内网的,因此我们针对 Tomcat 服务的监听地址都是内网地址。
<Connector port="8080" address="127.0.0.1" />
8 访问限制
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30,192.168.2.*" deny=""/>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,*.test.com" deny=""/>
</Host>
只能域名访问
<Host name="www.test.com" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false">deny=""/>
</Host>
个别属性的优化配置:
<Connector port="8080" address="127.0.0.1"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true"
URIEncoding="UTF-8"
enableLookups="false"
SSLEnabled="false"
server="Neo App Srv 1.0"/>