Tomcat安装部署和安全加固优化

1、Tomcat介绍

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。

2、Tomcat安装部署和配置

(1)tomcat下载和解压

[[email protected] ~]# ll apache-tomcat-8.0.50.tar.gz jdk-8u161-linux-x64.tar.gz
-rw-r--r-- 1 root root   9417189 3月  17 11:27 apache-tomcat-8.0.50.tar.gz
-rw-r--r-- 1 root root 189756259 3月  17 11:51 jdk-8u161-linux-x64.tar.gz
[[email protected] ~]# mv apache-tomcat-8.0.50 /usr/local/
[[email protected] ~]# ln -s /usr/local/apache-tomcat-8.0.50/ /usr/local/tomcat
[[email protected] ~]# mv jdk1.8.0_161 /usr/local/
[[email protected] ~]# ln -s /usr/local/jdk1.8.0_161 /usr/local/jdk

(2)jdk环境变量配置

[[email protected] ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
TOMCAT_HOME=/usr/local/tomcat
[[email protected] ~]# source /etc/profile
[[email protected] ~]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

(3)设置tomcat以普通用户启动

[[email protected] ~]# useradd -u 601 tomcat
[[email protected] ~]# chown -R tomcat.tomcat /usr/local/jdk
[[email protected] ~]# chown -R tomcat.tomcat /usr/local/tomcat
[[email protected] ~]# su - tomcat
[[email protected] ~]$ /usr/local/tomcat/bin/startup.sh

(4)查看tomcat的配置

[[email protected] logs]$ pwd
/usr/local/tomcat/logs
[[email protected] logs]$ ll
总用量 20
-rw-rw-r-- 1 tomcat tomcat 6449 3月  17 13:49 catalina.2018-03-17.log
-rw-rw-r-- 1 tomcat tomcat 6449 3月  17 13:49 catalina.out           ==>启动日志查看,有任何tomcat启动相关可以进行查看
-rw-rw-r-- 1 tomcat tomcat    0 3月  17 13:49 host-manager.2018-03-17.log
-rw-rw-r-- 1 tomcat tomcat  465 3月  17 13:49 localhost.2018-03-17.log
-rw-rw-r-- 1 tomcat tomcat    0 3月  17 13:49 localhost_access_log.2018-03-17.txt
-rw-rw-r-- 1 tomcat tomcat    0 3月  17 13:49 manager.2018-03-17.log

[[email protected] conf]$ pwd
/usr/local/tomcat/conf
[[email protected] conf]$ vim server.xml   #tomcat的主配置文件

    <Connector port="8080" protocol="HTTP/1.1"          HTTP协议连接tomcat,连接超时20000ms,重定向用8443端口
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />    AJP协议连接tomcat

[[email protected] tomcat]# tree -L 1
.
├── bin                             #→用以启动、关闭Tomcat或者其它功能的脚本(.bat文件和.sh文件)
├── conf                           #→用以配置Tomcat的XML及DTD文件
├── lib                              #→存放web应用能访问的JAR包
├── LICENSE
├── logs                          #→Catalina和其它Web应用程序的日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp                       #→临时文件
├── webapps                #→Web应用程序根目录
└── work                      #→用以产生有JSP编译出的Servlet的.java和.class文件

7 directories, 4 files

(5)tomcat配置用户管理界面的用户和密码

测试功能,生产环境不要用。

Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。在默认情况下是处于禁用状态的。如果需要开启这个功能,就需要配置管理用户,即配置前面说过的tomcat-users.xml。

[[email protected] webapps]$ pwd
/usr/local/tomcat/webapps
[[email protected] webapps]$ ll
总用量 4
drwxr-xr-x 14 tomcat tomcat 4096 3月  17 11:33 docs               #→tomcat帮助文档
drwxr-xr-x  6 tomcat tomcat   83 3月  17 11:33 examples          #→web应用实例
drwxr-xr-x  5 tomcat tomcat   87 3月  17 11:33 host-manager   #→管理
drwxr-xr-x  5 tomcat tomcat  103 3月  17 11:33 manager          #→管理
drwxr-xr-x  3 tomcat tomcat  306 3月  17 11:33 ROOT             #→默认网站根目录
[[email protected] conf]$ pwd
/usr/local/tomcat/conf
[[email protected] conf]$ vim tomcat-users.xml #配置用户管理界面的用户和密码,Server status/Manager App/Host Manager
  <role rolename="manager-gui" />
  <role rolename="admin-gui" />
  <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui" />

[[email protected] conf]$ /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[[email protected] conf]$ /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

访问192.168.56.110:8080可进行分别点击查看

每次重启,都需要将temp/ work/目录下的东西清空,避免影响tomcat的运行。所以写一个脚本在tomcat停止时进行清除。

(6)tomcat启动脚本编写

[[email protected] ~]$ vim tomcat.sh
#!/bin/bash
useage(){
    echo "Useage: $0 [start|stop|restart|status]"
}

status_tomcat(){
ps -axu |grep java |grep tomcat|grep -v "grep"

}

start_tomcat () {
/usr/local/tomcat/bin/startup.sh

}

stop_tomcat() {
TPID=$(ps -axu |grep java |grep tomcat|grep -v "grep" |awk ‘{print $2}‘)
kill -9 $TPID
sleep 5
TSTAT=$(ps -axu |grep java |grep tomcat|grep -v "grep" |awk ‘{print $2}‘)
    if [ -z $TSTAT ];then
        echo "tomcat stop."
    else
        kill -9 $TSTAT
    fi

}

main(){
case $1 in
    start)
        start_tomcat
        ;;
    stop)
        stop_tomcat
        ;;
    restart)
        stop_tomcat && start_tomcat
        ;;
    status)
        status_tomcat
        ;;
    *)
        useage;
esac
}
main $1

JVM的内存优化(堆内存和非堆内存)
为了安全,需要将webapps下的东西进行清除。Sever status可以保留,使用nginx进行反向代理,并限制只能内网进行访问。

[[email protected] webapps]$ pwd
/usr/local/tomcat/webapps
[[email protected] webapps]$ ll
总用量 4
drwxr-xr-x 14 tomcat tomcat 4096 3月  17 11:33 docs
drwxr-xr-x  6 tomcat tomcat   83 3月  17 11:33 examples
drwxr-xr-x  5 tomcat tomcat   87 3月  17 11:33 host-manager
drwxr-xr-x  5 tomcat tomcat  103 3月  17 11:33 manager
drwxr-xr-x  3 tomcat tomcat  306 3月  17 11:33 ROOT
[[email protected] webapps]$ mv docs examples host-manager /tmp

(7)tomcat安全加固

① 更改服务监听端口

若 Tomcat 都是放在内网的,则针对 Tomcat 服务的监听地址都是内网地址

标准配置:<Connector port="10000" server="webserver"/>

② telnet管理端口保护

修改默认的 8005 管理端口不易猜测(大于1024),但要求端口配置在8000~8999之间
修改SHUTDOWN命令为其他字符串
标准配置:<Server port="8578" shutdown="dangerous">

③ AJP连接端口的保护

修改默认的ajp 8009端口为不易冲突(大于1024),但要求端口配置在8000~8999之间
通过iptables规则限制ajp端口访问的权限仅为线上机器,目的在于防止线下测试流量被apache的mod_jk转发至线上tomcat服务器
标准配置:<Connector port="8349" protocol="AJP/1.3"/>

④ 禁用管理端

删除默认$CATALINA_HOME/conf/tomcat-users.xml文件,重启tomcat将会自动生成新的文件
删除$CATALINA_HOME/webapps下载默认的所有目录和文件
将tomcat应用根目录配置为tomcat安装目录以外的目录
标准配置:
    a.server.xml配置
        一种直接修改Host节点信息,表示全局配置
        <Host name="localhost"  appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"></Host>
        另一种直接在Host节点中新增Context节点,指定具体的项目:
        <Context path="" docBase="/usr/local/tomcat/webapps/jenkins" debug="0" reloadable="false" crossContext="true">
</Context>

    b.在$CATALINA_HOME/conf/Catalina/locathost目录下新增文件 test##20160506172651.xml
        <Context displayName="test" docBase="/data/www/tomcat_webapps/test##20160506172651.war" reloadable="false" />

⑤ 隐藏Tomcat的版本信息

针对该信息的显示是由一个jar包控制的,该jar包存放在$CATALINA_HOME/lib目录下,名称为 catalina.jar,通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org ,修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们tomcat的版本信息

$ cd $CATALINA_HOME/lib
$ jar xf catalina.jar
$ cat org/apache/catalina/util/ServerInfo.properties |grep -v ‘^$|#‘
$ mkdir -p org/apache/catalina/util
$ vim ServerInfo.properties
server.info=nolinux        # 把这个值改成其它值就行了

自定义错误页面:修改$CATALINA_HOME/conf/web.xml重定向 403/404/500等错误到指定的错误页面

⑥ 降权启动

Tomcat启动用户权限必须非root权限,尽量降低tomcat启动用户的目录访问权限,如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发,为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。要将 Tomcat 和项目的属主做分离,即便被破坏也无法创建和编辑项目文件

⑦ 文件列表访问控制

$CATALINA_HOME/conf/web.xml文件中的default部分的listings的配置必须为false(默认),表示不列出文件列表

⑧ 访问限制

通过配置,限定访问的IP来源
全局设置限定IP和域名访问:

<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>

⑨ 脚本权限回收

控制CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限,chmod?R 744 CATALINAHOME/bin目录下的start.sh、catalina.sh、shutdown.sh的可执行权限,chmod?R744 CATALINAHOME/bin/*

⑩ 访问日志格式规范和Server header重写

开启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 %{User-Agent}i %D"
     resolveHosts="false" />

在HTTP Connector配置中加入server的配置,server=”chuck-server”

原文地址:http://blog.51cto.com/jinlong/2088834

时间: 2024-10-26 01:44:55

Tomcat安装部署和安全加固优化的相关文章

Tomcat安装部署和安全加固优化以及反向代理应用

1.Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成. Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomcat和Nginx.Apache(httpd).lighttpd等Web服务器一样,具有处理HTML页面的功能,另

如何在tomcat安装部署php项目

java开发者都知道,tomcat是用来部署java web项目的.前几天老k偶然得知PHP/Java Bridge,通过它可以实现在jsp和php之间共享session,详见<如何实现jsp和php共享session>php教程,今天突发奇想,通过PHP/Java Bridge能不能把一个完全用php开发的项目部署到tomcat里,尽管意义不是很大,但对于那些需要在java项目里集成php开发的模块的话还是很有用的.说干就干,我马上去PHP/Java Bridge的官网看了,原来它还真可以用

eclipse的web项目的tomcat安装部署问题

一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没有出现所建立的工程名字.或者说可以访问项目工程,但是localhost:8080无法访问 二.验证 很明显项目并没有自动部署到Tomcat的Webapps中而是部署在了别的容器中.在内置浏览器中输入http://localhost:8080/webDemo/login.jsp可正常打开.但在外部浏

tomcat安装部署调优

工作中遇到了在linux系统中部署tomcat,由于是在生产环境中部署,还是些许谨慎,这里把部署的方案截图展示. 1.解包 tar -xvf apache-tomcat-7.0.68 2.修改端口号 在解压出来的目录结构中有conf目录,需要修改的是server.xml目录 这里要注意,端口号不能大于65535,因为都是使用的tcp连接,tcp的端口号不能超过65535,在一台主机上部署的多个tomcat的端口号也不能相同,因为只要一个端口在监听状态,另一个进程无法将该端口号激活. <Serve

tomcat 安装部署

系统环境: [[email protected] logs]# uname -a Linux ORACLE 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux [[email protected] logs]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.8 (Tikanga) 安装包: jdk-7

tomcat安装部署

1.配置环境(centos 7.6) systemctl stop firewalld iptables -F setenforce 0 2.安装jdk软件包 上传jdk软件包 tar xf jdk-8u191-linux-x64.tar.gz mv jdk1.8.0_191/ /usr/local/java 3.jdk路径不在path中,进入/etc/profile添加环境变量 vim /etc/profile 在最后插入两个export变量 4.安装tomcat 上传tomcat软件包 ta

安装部署LNMP/大并发nginx优化/php性能加速 实战

安装部署LNMP及Nginx优化.PHP加速进行压力测试 部署LNMP环境: 主机 IP 主机名 Centos7.2 192.168.5.128 www.benet.com 部署步骤如下: 使用yum仓库安装Nginx依赖包 yum -y install  gcc gcc-c++ make libtool zlib zlib-devel pcre pcre-devel openssl openssl-devel 创建Nginx用户 组解压Nginx软件包 编译安装Nginx ./configur

Tomcat安装、配置、优化及负载均衡详解

一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服务器:             Sun公司在推出的小型Servlet/JSP调试工具的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用java语言编写,所以tomcat的运行需要java的支持,所以要先安装JDK,才能运行.目前是Apache开源软件组织的一个软件项目,它的官网

高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机

一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示"Too many open files"如何解决 3> 如何解决客户端访问头部信息过长的问题 4> 开启gzip压缩功能,提高数据传输效率 5> 如何让客户端浏览器缓存数据 6> 如何自定义返回给客户端的404错误页面 然后客户机访问此Web服务器验证效果: 1> 使用ab压力