Tomcat8安装, 安全配置与性能优化

简介: Tomcat8安装, 安全配置与性能优化

一、Tomcat 安装

官网:http://tomcat.apache.org/

Tomcat8官网下载地址:http://tomcat.apache.org/download-80.cgi

为了便于文件管理,个人习惯  在/opt目录下创建 一个install目录用于存放 软件安装包,在/usr 目录下创建local文件夹用户存放解压文件

下载安装包: wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.32/bin/apache-tomcat-8.0.32.tar.gz

解压压缩包: tar -zxvf apache-tomcat-8.0.32.tar.gz

移动解压文件到 mv apache-tomcat-8.0.32/ /usr/local/

为方便起见,可以使用  mv /usr/local/apache-tomcat-8.0.32/ /usr/local/tomcat8/ 修改目录名称

设置端口防火墙:

  centos7以下版本设置方法:

     方法一:便于测试,可以先关闭关闭 iptables,防止端口拦截无法进行测试:service iptables stop

     方法二:在iptables中添加允许规则(以下以Tomcat默认端口8080为例),操作步骤如下:

       1、添加规则  sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT  

       2、保存规则:sudo /etc/rc.d/init.d/iptables save

       3、重启iptables: sudo service iptables restart

  centos7设置方法:

开启端口

    firewall-cmd --zone=public --add-port=80/tcp --permanent

 

命令含义:

 --zone #作用域

 --add-port=80/tcp  #添加端口,格式为:端口/通讯协议

 --permanent   #永久生效,没有此参数重启后失效

 

重启防火墙

 firewall-cmd --reload

     

Tomcat服务启动停止:

     启动tomcat:sh /usr/local/tomcat8/bin/startup.sh

     查看日志:tail -200f /usr/local/tomcat8/logs/catalina.out

   

     停止tomcat: sh /usr/local/tomcat8/bin/shutdown.sh

二、Tomcat 安全配置与优化

  2.1优化server.xml

      2.1.1 隐藏版本信息

隐藏HTTP 头部的版本信息 。  

        编辑server.xml: vi /usr/local/tomcat8/conf/server.xml

                为Connector 添加 server 属性      

<span style="font-family:Consolas, Liberation Mono, Menlo, Courier, monospace;">                </span><span style="font-family:Microsoft YaHei;"> <Connector port="8080" protocol="HTTP/1.1"

                                         connectionTimeout="20000"

                                         redirectPort="8443" server="APP Srv1.0"/></span>

隐藏404页面出现的版本号

   

         针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar。

        我们可以通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,通过修改 org/apache/catalina/util/ServerInfo.properties 文件中        的 serverinfo 字段来实现来更改我们tomcat的版本信息。

     文件信息如下:

[root@localhost ~]#  cat /usr/local/tomcat8/lib/org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'

server.info=Apache Tomcat/8.0.23

server.number=8.0.23.0

server.built=Mar 18 2016 20:31:49 UTC

还有另外一种方法来实现隐藏或伪装Tomcat的版本信息,其本质和上面一样,操作如下:

[root@localhost ~]# cd /usr/local/tomcat8/lib

[root@localhost lib]# mkdir -p org/apache/catalina/util

[root@localhost lib]# cd org/apache/catalina/util

[root@localhost util]# vim ServerInfo.properties

server.info=nolinux        # 如果想修改成其它版本号,把这个地方的值改成其它值就行了

     修改效果如下:

       

        2.1.2禁用Tomcat管理界面

             生产环境一般不适用Tomcat默认的管理界面,这些页面存放在Tomcat 的webapps安装目录下,

         把该目录下的所有文件删除即可:rm -rf  /usr/local/tomcat8/webapps/*

         另外删除相关的配置文件 host-manager.xml 和 manager.xml,在Tomcat 安装目录 conf/Catalina/localhost目录下。

        注释或删除tomcat_user.xml 中的所有用户权限。

        2.1.3  应用程序安全

           

              tomcat默认 开启了对war热部署。为了防止被植入木马恶意攻击,我们要关闭war包自动部署。

             关闭自动加载最新代码(设置reloadable)

   修改实例:                          

    <Host name="localhost"  appBase="webapps"  

      unpackWARs="false" autoDeploy="false"  

       reloadable="false">

        2.1.4 更改关闭Tomcat的指令

              server.xml中定义了可以直接关闭 Tomcat 实例的管理端口。我们通过 telnet 连接上该端口之后,输入 SHUTDOWN (此为默认关闭指             令)即可关闭 Tomcat 实例(注意,此时虽然实例关闭了,但是进程还是存在的)。由于默认关闭 Tomcat 的端口和指令都很简单。默认端口为          8005,指令为SHUTDOWN 。因此我们需要将关闭指令修改复杂一点。

      当然,在新版的 Tomcat 中该端口仅监听在127.0.0.1上,因此大家也不必担心。除非黑客登陆到tomcat本机去执行关闭操作。

      修改实例:

          <Server port="8005" shutdown="9SDKJ29jksjf23sjf0LSDF92JKS9DKkjsd">

       或者禁用8005端口

           <Server port="-1" shutdown="SHUTDOWN">

       2.1.5 连接池配置

          使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。

          编辑配置文件 server.xml : vi  /usr/local/tomcat8/conf/server.xml

           2.1.5.1 打开被注释的默认连接池配置

                    默认配置:                                              

<!--

            <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

                   maxThreads="150" minSpareThreads="4"/>

                -->

                               修改实例:          

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"

            maxThreads="150" minSpareThreads="100"

        prestartminSpareThreads="true" maxQueueSize="100"/>

                  参数讲解:

name: 线程名称

namePrefix: 线程前缀

maxThreads : 最大并发连接数,不配置时默认200,一般建议设置500~ 800 ,要根据自己的硬件设施条件和实际业务需求而定。

minSpareThreads:Tomcat启动初始化的线程数,默认值25  

prestartminSpareThreads:在tomcat初始化的时候就初始化minSpareThreads的值, 不设置true时minSpareThreads  

maxQueueSize: 最大的等待队列数,超过则拒绝请求

             2.1.5.2 修改链接配置

               

                默认配置:

<Connector port="8080" protocol="HTTP/1.1"

              connectionTimeout="20000"

              redirectPort="8443" />

                 修改配置:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"

       connectionTimeout="20000"

       redirectPort="8443"

       executor="tomcatThreadPool"

       enableLookups="false"

       acceptCount="100"

       maxPostSize="10485760"

       compression="on"

       disableUploadTimeout="true"

       compressionMinSize="2048"

       noCompressionUserAgents="gozilla, traviata"

       acceptorThreadCount="2"

       compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"

       URIEncoding="utf-8"/>

           参数讲解:

  port:连接端口。  

 protocol:连接器使用的传输方式。  Tomcat 8 设置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol    

 protocol, Tomcat 6、7 设置 nio 更好:org.apache.coyote.http11.Http11NioProtocol      

           注:

          每个web客户端请求对于服务器端来说就一个单独的线程,客户端的请求数量增多将会导致线程数就上去了,CPU就忙着           跟线程切换。

           而NIO则是使用单线程(单个CPU)或者只使用少量的多线程(多CPU)来接受Socket,而由线程池来处理堵塞在pipe     或者队       列里的请求.这样的话,只要OS可以接受TCP的连接,web服务器就可以处理该请求。大大提高了web服务器的可伸缩性。  

 executor: 连接器使用的线程池名称

enableLookups:禁用DNS  查询

 acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 。

maxPostSize:限制 以FORM URL 参数方式的POST请求的内容大小,单位字节,默认是 2097152(2兆),10485760 为 10M。如果要禁用限制,则可以设置为 -1。

acceptorThreadCount: 用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2。

compression:传输时是压缩。

compressionMinSize:压缩的大小

noCompressionUserAgents:不启用压缩的浏览器

          提示:

             压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。

            Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的 浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。

               2.1.6 管理AJP端口

                       AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接                      器。 默认是开启的。如果不使用apache,注释该连接器。

                 实例:            

<span style="font-family:Microsoft YaHei;">                             <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />--></span>

   2.2 JVM

           推荐阅读:https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md

 

    2.3 应用程序部署

            默认tomcat是root身份运行的,这样不安全。不要使用root用户启动tomcat。Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系统,Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。因此我们要将 Tomcat 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。

                设置普通用户,用来启动tomcat

1

2

3

4

5

6

[root@localhost ~]# groupadd tomcat

[root@localhost ~]# useradd -g tomcat tomcat

[root@localhost ~]# passwd tomcat

[root@localhost ~]# chown tomcat.tomcat -R /usr/local/tomcat

[root@localhost ~]# su - tomcat /usr/local/tomcat/bin/startup.sh

[root@localhost ~]# echo 'su - tomcat -c "tomcat /usr/local/tomcat/bin/startup.sh"' >> /etc/rc.local  #开机启动

参考资料:

   https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md

   http://nolinux.blog.51cto.com/4824967/1608940

  centos7设置防火墙:http://stackoverflow.com/questions/24729024/centos-7-open-firewall-port

   JVM模型:http://xmuzyq.iteye.com/blog/599750

相关文章
|
5月前
|
Java 应用服务中间件 Apache
Maven程序 tomcat插件安装与web工程启动
Maven程序 tomcat插件安装与web工程启动
59 0
|
3月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
55 1
|
3月前
|
Ubuntu Java 应用服务中间件
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
如何通过 Apt-Get 在 Ubuntu 14.04 上安装 Apache Tomcat 7
92 0
|
29天前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
66 3
|
2月前
|
网络协议 Java 应用服务中间件
Tomcat 性能优化
Tomcat 性能优化
40 2
|
3月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
3月前
|
存储 搜索推荐 应用服务中间件
深入探索Docker 安装 Tomcat
【8月更文挑战第26天】
75 4
|
3月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
201 8
|
4月前
|
应用服务中间件 Linux 网络安全
|
3月前
|
Java 应用服务中间件 Windows
2022年最新最详细的tomcat安装教程和常见问的解决
这篇文章提供了2022年最新最详细的Tomcat安装教程,包括离线安装包的获取、官网下载步骤、JDK版本检查、环境变量配置,以及解决安装过程中可能遇到的常见问题,如乱码等。
2022年最新最详细的tomcat安装教程和常见问的解决

相关实验场景

更多