ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Tomcat优化及安全配置

2021-09-09 10:31:05  阅读:173  来源: 互联网

标签:xml CATALINA Tomcat tomcat 配置 server HOME 优化


1、Tomcat优化

Tomcat优化分为对Tomcat本身的优化以及对JVM进行优化,本文针对Tomcat自身的优化进行阐述,JVM优化参考其他文档。

1.1 优化连接数

tomcat 连接数分为最大连接数,最大排队数等,配置时需要根据部署的程序是计算型还是内存型还是IO型,不同类型的应用的配置参数略有差异,通用的配置参考:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="1000" minSpareThreads="100" prestartminSpareThreads="true"
        maxQueueSize="100" enableLookups="false" URIEncoding="utf-8" acceptCount="500"/>

参数说明:

  • maxThreads: 客户请求最大线程数
  • minSpareThreads: Tomcat初始化时创建的 socket 线程数
  • maxSpareThreads: Tomcat连接器的最大空闲 socket 线程数
  • prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
  • maxQueueSize: 最大的等待队列数,超过则拒绝请求
  • enableLookups: 设为true, 则支持域名解析,可把 ip 地址解析为主机名
  • acceptAccount: 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads)
  • URIEncoding: URL统一编码

1.2 使用线程池

<Connector executor="tomcatThreadPool"
               port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
               connectionTimeout="2000" disableUploadTimeout="ture"
               redirectPort="8443" />

参数说明

  • connectionTimeout: 主要是HTTP协议也有个连接过程,客户端连接到服务器上后,如果长时间没有得到处理就会被释放。如果服务器处理速度较慢,但是希望每个用户都能得到有效处理,或者网络环境不好,需要保证用户不会因为超时中断,也可以把时间加长。但是一般设置成connectionTimeout="30000"即可。太长对系统来说价值不大,反而会浪费系统资源在无谓的长连接上。
  • disableUploadTimeout: 允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false。
  • executor: 使用executor连接器对Tomcat进行优化

1.3 session共享

基于tomcat集群的session共享

在{TOMCST_HOME}/conf/server.xml取消下面代码注释即可:

<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

此种方式目前已经很少使用了,更多的是结合redis缓存来配置Tomcat集群中的各应用节点的session共享。

1.4 错误页面自定义

站点的默认网页、自定义错误页面、禁止列目录等功能

这些功能开发会在工程的WEB-INF目录下的web.xml中设置,运维了解下就好,者遇到类似问题可以找到解决思路。

<error-page>
<error-code>404</error-code>
<location>/404.htm</location>
</error-page>

1.5 禁止列目录

<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

1.6 管理AJP端口

AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。
如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。
由于我们公司前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。在{TOMCST_HOME}/conf/server.xml中找到下列代码,注释即可:

<!-- <Connector port="8009" protocol="AJP/1.3"redirectPort="8443" /> -->

1.7 取消默认GC监听

如果开启了GClog,再开启GC监听,会影响GClog输出,功能重复,可以选择取消。

<!-- 内存泄露侦测,对于垃圾回收不能处理的对像,它就会做日志,开启gcc后,不需要这个功能-->
<!-- ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener"gcDaemonProtection="false"/ -->

1.8 自定义代码路径

<Context docBase="/code_path/code_file"path="/code_file " reloadable="false" />

其中:
docBase这个是你代码的路径
path这个是你访问网站的URL路径,要区别path的意义,请看下面的举例
举例:访问www.aaa.com
<Context docBase="/code_path/code_file"path=" " reloadable="false" />
访问www.aaa.com/code_file
<Context docBase="/code_path/code_file"path="/code_file " reloadable="fasle" />

reloadable如果为true,会自动加载变化的动态文件,看起来挺智能的,但是,在tomcat加载变化代码的时候有可能会出现内存溢出,tomcat服务不正常等异常,建议还是false掉,更新完代码脚本重启tomcat才是王道。

1.9 屏蔽DNS查询

Web应用程序可以通过Web容器提供的getRemoteHost()方法获得访问Web应用客户的IP地址和名称,但是这样会消耗Web容器的资源,并且还需要通过IP地址和DNS服务器反查用户的名字。因此当系统上线时,可以将这个属性关闭,从而减少资源消耗,那么Web应用也就只能记录下IP地址。修改的属性是enableLoopups="false"。

1.10 文件压缩管理

tomcat作为一个应用服务器,也是支持 gzip 压缩功能的。我们可以在 server.xml 配置文件中的 Connector 节点中配置如下参数,来实现对指定资源类型进行压缩。
compression="on" # 打开压缩功能
compressionMinSize="50" # 启用压缩的输出内容大小,默认为2KB
noCompressionUserAgents="gozilla, traviata" # 对于以下的浏览器,不启用压缩
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些资源类型需要压缩
如果使用apache/nginx代理,所以tomcat自身不需要进行压缩,会给服务器增加压力

1.11 调整运行模式

tomcat的三种运行模式选择: Bio, Nio, Apr

  • Bio: 默认的模式,性能非常低下,没有经过任何优化处理和支持。
  • Nio: 利用java的异步io护理技术,no blocking IO技术.想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为 protocol="org.apache.coyote.http11.Http11NioProtocol"
  • Apr: 安装困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.。必须要安装apr和native,直接启动就支持apr。
sudo yum -y install apr apr-devel
tar zxvf tomcat-native.tar.gz //该文件在tomcat的bin目录下面
cd tomcat-native-1.1.24-src/jni/native
./configure--with-apr=/usr/bin/apr-1-config
make
make install

安装完成之后 会出现如下提示信息
Libraries have been installed in:
/usr/local/apr/lib

安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加一 行:

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
修改8080端对应的
protocol="org.apache.coyote.http11.Http11AprProtocol"

其他就是关于JVM的优化,如GCC算法,对内存大小等,请参考另外的JVM调优文档。

2、Tomcat安全加固

2.1 Tomcat版本统一(必选)

生产环境中推荐将Tomcat版本进行统一,并且隐藏掉Tomcat版本号,这样一方面能够在Tomcat出现漏洞或bug时统一处理,另外一方面也减小了因为版本问题导致应用风险的增加。同时,避免因为应用错误,将Tomcat版本暴露给用户,导致因为该版本漏洞等问题被利用和攻击。

2.2 Tomcat帐号安全(必选)

将$CATALINA_HOME\conf\tomcat-users.xml中文件的所有用户都注释掉,配置如下:

<?xmlversion='1.0' encoding='utf-8'?>
<tomcat-users>
<!--
<rolerolename="tomcat"/>
<rolerolename="role1"/>
<rolerolename="manager"/>
<rolerolename="admin"/>
<user username="tomcat"password="tomcat" roles="tomcat"/>
<userusername="both" password="tomcat"roles="tomcat,role1"/>
<userusername="role1" password="tomcat"roles="role1"/>
<userusername="admin" password="admin"roles="manager"/>
-->
</tomcat-users>

如果业务需要内置的Tomcat用户【不推荐这种方式】,则需要给其分配合理的权限,密码设置符合密码策略(随机生成包含大小写字母、数字、特殊符号在内的不少于16位的密码),Tomcat角色类型如下:
role1:具有读权限;
tomcat:具有读和运行权限;
admin:具有读、运行和写权限;
manager:具有远程管理权限。
如果使用启用了Tomcat用户,则需要设置Tomcat定时登出。

2.3 默认webapps应用清理(必选)

除了需要部署上去的应用,其余位于$CATALINA_HOME\webapps文件夹中的应用如docs、examples、host-manager、manager和ROOT。
注:若无业务必要,请执行删除上述的应用包。
加固检查:
输入:http://localhost:8080/manager/html
出现的页面空白

2.4 禁止Tomcat目录列表(可选)

确保$CATALINA_HOME\conf\web.xml中listings的值为false:

避免项目目录及文件和配置泄漏,在早期的Tomcat版本中,该项为true,在无默认页面的情况下,用户可以浏览项目目录。新版本Tomcat该项默认是false。

2.5 配置shutdown端口(可选)

server.xml中定义了可直接关闭 Tomcat 实例的管理端口。通过 telnet 连接上该端口,输入 SHUTDOWN (此为默认关闭指令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭Tomcat 的端口和指令都很简单。默认端口为8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。
当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此该项也可以不改。除非黑客登陆到tomcat本机去执行关闭操作。

修改方法:

在$CATALINA_HOME\conf\server.xml中“”,将shutdown的值改成其他的值,如stopapp等自定义的Tomcat关闭命令。或者其他较为复杂的字符串。

<Serverport="未被占用的端口" shutdown="较为复杂的字符串">
注:配置的端口需要大于1024。
加固检查:
使用telnet 127.0.0.1 8005进入,输入“SHUTDOWN”,Tomcat不会被关闭。

2.6 隐藏Tomcat版本信息(必选)

在默认配置下,当应用出现异常时,客户端会显示Tomcat的版本信息。攻击者可以根据Tomcat版本信息选择漏洞库攻击,所以需要将Tomcat的版本信息隐藏,将$CATALINA_HOME\lib\catalina.jar\org\apache\catalina\util中的配置ServerInfo.properties如下:

server.info=需要展现的信息如SmartCity
server.number=SmartCity
server.built=20201101

加固检测:
输入一个异常的URL看看出现的异常页面是否出现类似(无Tomcat的版本信息)

2.7 关闭war自动部署(必选)

默认的配置war放在$CATALINA_HOME\webapps中会自动部署,所以关闭war自动部署防止被植入木马等恶意程序。将$CATALINA_HOME\conf\server.xml配置如下:

<Hostname="localhost"
appBase="webapps"
unpackWARs="false"
autoDeploy="false"
xmlValidation="false"
xmlNamespaceAware="false">

加固检查:
将一个war文件放进$CATALINA_HOME\webapps,启动Tomcat后,war文件不会被部署。

2.8 Tomcat启动权限(必选)

普通用户运行java程序

2.9 配置Tomcat pid(可选)

配置tomcat启动后将进程号保存至 ./bin/tomcat.pid 文件。

修改 catalina.sh 文件,在 PRGDIR 下面一行添加 CATALINAPID 参数行,如下:

PRGDIR=dirname "$PRG"
CATALINA_PID=$PRGDIR/tomcat.pid

启动tomcat在 ./bin 下生成PID文件tomcat.pid

[root@localhost bin]# ls tomcat.pid 
tomcat.pid
[root@localhost bin]# cat tomcat.pid 
12016
[root@localhost bin]# jps 
12016 Bootstrap

标签:xml,CATALINA,Tomcat,tomcat,配置,server,HOME,优化
来源: https://www.cnblogs.com/miaocbin/p/15245859.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有