Linux Tomcat8安装规范

版权声明:仅供学习参考 转载请标明出处。 https://blog.csdn.net/xujiamin0022016/article/details/81880651

前言

随着公司内部使用Tomcat作为web应用服务器的较多,为保证Tomcat的配置安全,防止信息泄露,恶性攻击以及配置的安全规范,参考网上资料制定了此Tomcat安全配置规范。欢迎补充以及指正~~!!

 

1. Tomcat安装规范

注:所有线上运行tomcat必须严格安装本标准执行

       适用版本范围:tomcat 8.*

 

1.1 tomcat用户设置

#!/bin/bash

# Author:jiaminxu

# Email:[email protected]

user=tomcat

group=Devops

tomcat_path=/usr/local/tomcat

 

#create group if not exists

egrep "^$group" /etc/group >& /dev/null

if [ $? -ne 0 ]

then

    groupadd $group

fi

 

#create user if not exists

egrep "^$user" /etc/passwd >& /dev/null

if [ $? -ne 0 ]

then

    useradd -g $group $user

fi

 

echo "tomcat用户创建成功 Devops运维组创建成功!"

id tomcat

chown -R $user:$group $tomcat_path

 

 

1.2 tomcat安装

jdk 1.8

tomcat 8.*

可以直接下载ftp上的8.5.32.0版本  解压后运行

curl ftp://172.16.129.72/tomcat.tar.gz --user read:ht00@pass -o tomcat.tar.gz

tar zxvf  tomcat.tar.gz

cd tomcat/bin

 

 

 

1.3 tomcat配置

在/etc/profile中添加Java环境

JAVA_HOME=/usr/java/jdk1.8.0_65

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

JRE_HOME=$JAVA_HOME/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export JAVA_HOME CLASSPATH  JRE_HOME PATH

 

使/etc/profile马上生效

source /etc/profile

 

1.4 应用程序配置(推荐)

[tomcat@tuan-node1 ~]$ mkdir webapps

将应用程序放置在/tomcat/目录下。建立相应的目录如团购wmw_tuan,静态化wmw_static,并修改server.xml,对应好目录即可。

 

1.5 启动Tomcat

cd tomcat/bin

sh startup.sh

 

 

2 . 安全设置规范

 

2.1 telnet管理端口保护(强制)

telnet管理端口保护  

1.修改默认的8005管理端口为不易猜测的端口(大于1024);

2.修改SHUTDOWN指令为其他字符串;

 

以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;

 

 因为telnet 输入SHUTDOWN可直接关闭tomcat

 

2.2 ajp连接端口保护(推荐)

Ajp 连接端口保护     

1.修改默认的ajp 8009端口为不易冲突的大于1024端口;

2.通过iptables规则限制ajp端口访问的权限仅为线上机器;

 

以上配置项的配置内容仅为建议配置,请按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间;;

保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器;

 

 

2.3 禁用管理端(强制或使用nginx配置规则)

禁用管理端 

1. 删除默认的{Tomcat安装目录}/conf/tomcat-users.xml文件;强制

2. 删除{Tomcat安装目录}/webapps下默认的所有目录和文件;强制

3.将tomcat 应用根目录配置为tomcat安装目录以外的目录;

 <Context path="" docBase="/home/work/local/tomcat_webapps" debug="0" reloadable="false" crossContext="true"/>   

对于前段web模块,Tomcat管理端属于tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取得服务器的控制权,后果极其严重;

(如果用普通用户启动 可以避免 篡改别的文件夹)

 

2.4 降权启动(强制)

降权启动     

1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;

2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全;

 

 

2.5 文件列表访问控制(强制)

文件列表访问控制

1.conf/web.xml文件中default部分listings的配置必须为false;

以下是标准配置:

false为不列出目录文件,true为允许列出,默认为false;

 

 

2.6 版本信息隐藏(强制)

版本信息隐藏     

1.修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面;

2.也可以通过修改应用程序目录下的WEB-INF/web.xml下的配置进行错误页面的重定向:

<error-page>

<error-code>403</error-code>

<location>/forbidden.jsp</location>

</error-page>

<error-page>

<error-code>404</error-code>

<location>/notfound.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/systembusy.jsp</location>

</error-page>     

 

在配置中对一些常见错误进行重定向,避免当出现错误时tomcat默认显示的错误页面暴露服务器和版本信息;

必须确保程序根目录下的错误页面已经存在;

注意: 此外的错误页面定义,每个项目工程目录下都要各自建立自己的相应的错误页面。

 

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

 

 

2.7 Server header重写(推荐)

Server header重写   

在HTTP Connector配置中加入server的配置:

server="webserver"  

当tomcat HTTP端口直接提供web服务时此配置生效,加入此配置,将会替换http 响应Server header部分的默认配置,默认是Apache-Coyote/1.1

 

 

2.8 访问限制(可选)

访问限制     

通过配置 server.xml,限定访问的ip来源:

通过配置信任ip的白名单,拒绝非白名单ip的访问,此配置主要是针对高保密级别的系统,一般产品线不需要;

注意:下面是tomcat8的写法

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="192\.168\.234\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>

允许本地回环地址及192.168.234.0网段访问

 

 

2.9 起停脚本权限回收(推荐)

起停脚本权限回收    

去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限;

chmod -R 744 tomcat/bin/*     防止其他用户有起停线上Tomcat的权限;

 

 

 

2.10 访问日志格式规范(推荐)

访问日志格式规范     开启Tomcat默认访问日志中的Referer和User-Agent记录:

<Valve className="org.apache.catalina.valves.AccessLogValve"

directory="logs"  prefix="localhost_access_log." suffix=".txt"

pattern="%{X-Forwarded-For}i %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>      

开启Referer和User-Agent是为了一旦出现安全问题能够更好的根据日志进行问题排查;

X-Forwarded-For用于nginx作为反向代理服务器时,获取客户端真实的IP

 

 

2.11 屏蔽DNS查询  可用于调优(推荐)

enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址。

<Connector enableLookups="false"/>

 

2.12  压缩管理

tomcat作为一个应用服务器,也是支持 gzip 压缩功能的。我们可以在 server.xml 配置文件中的 Connector 节点中配置如下参数,来实现对指定资源类型进行压缩。 前端使用nginx作为反向代理,一般不需要启用tomcat压缩功能。

compression="on" # 打开压缩功能

compressionMinSize="50" # 启用压缩的输出内容大小,默认为2KB

noCompressionUserAgents="gozilla, traviata" # 对于以下的浏览器,不启用压缩

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"# 哪些资源类型需要压缩

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

2.13  开启软链接 (推荐)

修改conf/context.xml    添加

 <Resources allowLinking="true" />

 

2.14  支持utf-8(推荐)

修改conf/server.xml    添加

URIEncoding="UTF-8"

2.15  应用程序安全(生产环境强制)

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

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

2.16  打开被注释的默认连接池配置(调优推荐)

<!--

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

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

                 -->

参数讲解:

name: 线程名称

namePrefix: 线程前缀

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

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

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

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

 

2.17  设置开机启动(推荐)

避免服务器宕机 重启之后造成的停止服务

sed -i '$a tomcat bash /usr/local/tomcat/bin/startup.sh' /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

2.18  定时重启(推荐)

在业务空闲时期,配合负载均衡依次重启tomcat,以保证tomcat集群在高峰期的可用性。

2.19  生产版本备份 (推荐)

方便线上版本回滚。(可参考博客中Centos 针对Jenkins构建的部署以及回滚脚本 )

3. 附录:建议配置及标准执行方案

2.1 telnet管理端口保护(强制)

2.2 ajp连接端口保护(推荐)

2.3 禁用管理端(强制或使用nginx配置规则)

 

2.4 降权启动(强制)

2.5文件列表访问控制(强制)

 2.6 版本信息隐藏(强制)

这边ftp tomcat.tar.gz中的jar包已经做过修改

 

2.7 Server header重写(推荐)

2.8 访问限制(可选)

默认注释

2.9 起停脚本权限回收(推荐)

2.10 访问日志格式规范(推荐)

2.11 屏蔽DNS查询  可用于调优(推荐)

2.12  压缩管理

忽略

2.13  开启软链接 (推荐)

2.14  支持utf-8(推荐)

2.15  应用程序安全(生产环境强制)

 

2.16  打开被注释的默认连接池配置(调优推荐)

 

猜你喜欢

转载自blog.csdn.net/xujiamin0022016/article/details/81880651