博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tomcat安装部署和安全加固优化以及反向代理应用
阅读量:6256 次
发布时间:2019-06-22

本文共 11701 字,大约阅读时间需要 39 分钟。

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下载和解压

[root@linux-node1 ~]# 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[root@linux-node1 ~]# mv apache-tomcat-8.0.50 /usr/local/[root@linux-node1 ~]# ln -s /usr/local/apache-tomcat-8.0.50/ /usr/local/tomcat[root@linux-node1 ~]# mv jdk1.8.0_161 /usr/local/[root@linux-node1 ~]# ln -s /usr/local/jdk1.8.0_161 /usr/local/jdk

(2)jdk环境变量配置

[root@linux-node1 ~]# vim /etc/profile export JAVA_HOME=/usr/local/jdkexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jarTOMCAT_HOME=/usr/local/tomcat[root@linux-node1 ~]# source /etc/profile[root@linux-node1 ~]# java -versionjava 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以普通用户启动

[root@linux-node1 ~]# useradd -u 601 tomcat[root@linux-node1 ~]# chown -R tomcat.tomcat /usr/local/jdk[root@linux-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat[root@linux-node1 ~]# su - tomcat[tomcat@linux-node1 ~]$ /usr/local/tomcat/bin/startup.sh

(4)查看tomcat的配置

[tomcat@linux-node1 logs]$ pwd/usr/local/tomcat/logs[tomcat@linux-node1 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[tomcat@linux-node1 conf]$ pwd/usr/local/tomcat/conf[tomcat@linux-node1 conf]$ vim server.xml   #tomcat的主配置文件    
AJP协议连接tomcat[root@linux-node1 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。

[tomcat@linux-node1 webapps]$ pwd/usr/local/tomcat/webapps[tomcat@linux-node1 webapps]$ ll总用量 4drwxr-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             #→默认网站根目录[tomcat@linux-node1 conf]$ pwd/usr/local/tomcat/conf[tomcat@linux-node1 conf]$ vim tomcat-users.xml #配置用户管理界面的用户和密码,Server status/Manager App/Host Manager  
[tomcat@linux-node1 conf]$ /usr/local/tomcat/bin/shutdown.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar[tomcat@linux-node1 conf]$ /usr/local/tomcat/bin/startup.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarTomcat started.访问192.168.56.110:8080可进行分别点击查看

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

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

(6)tomcat启动脚本编写

[tomcat@linux-node1 ~]$ vim tomcat.sh#!/bin/bashuseage(){    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 $TPIDsleep 5TSTAT=$(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

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

JVM的内存优化(堆内存和非堆内存)

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

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

(7)tomcat安全加固

① 更改服务监听端口

若 Tomcat 都是放在内网的,则针对 Tomcat 服务的监听地址都是内网地址标准配置:

② telnet管理端口保护

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

③ AJP连接端口的保护

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

④ 禁用管理端

删除默认$CATALINA_HOME/conf/tomcat-users.xml文件,重启tomcat将会自动生成新的文件删除$CATALINA_HOME/webapps下载默认的所有目录和文件将tomcat应用根目录配置为tomcat安装目录以外的目录标准配置:    a.server.xml配置         一种直接修改Host节点信息,表示全局配置        
另一种直接在Host节点中新增Context节点,指定具体的项目:
b.在$CATALINA_HOME/conf/Catalina/locathost目录下新增文件 test##20160506172651.xml

⑤ 隐藏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.propertiesserver.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和域名访问:

⑨ 脚本权限回收

控制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记录

标准配置:

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

3、Nginx反向代理tomcat

3.1、配置Nginx虚拟主机反向代理

[root@linux-node1 ~]# cat /usr/local/nginx/conf/vhost/test.conf server {    listen 80;    server_name www.linuxlong.com;    root /webroot/web-demo;    index index.htm index.html index.php index.jsp;    access_log /usr/local/nginx/logs/test.log access_json;    location ~* \.(jsp|do)$ {   #使用location匹配以jsp或do结尾的对象进行反向代理        proxy_pass http://node1.long.com:8080;    }}

3.2、配置tomcat虚拟主机

[root@linux-node1 ~]# ll /data/webapps/ROOT/total 4drwxr-xr-x 2 root root   6 Mar 21 07:32 classes-rw-r--r-- 1 root root 187 Mar 21 07:48 index.jspdrwxr-xr-x 2 root root   6 Mar 21 07:32 libdrwxr-xr-x 2 root root   6 Mar 21 07:32 META-INFdrwxr-xr-x 2 root root   6 Mar 21 07:32 WEB-INF[root@linux-node1 ~]# cd /data/webapps/ROOT/[root@linux-node1 ROOT]# cat index.jsp <%@ page language="java" %><%@ page import="java.util.*" %>            JSP Test Page on web1                <% out.println("Hello, Web1!"); %>    [root@linux-node1 ~]# cat /usr/local/tomcat/conf/server.xml
[root@linux-node1 ~]# /usr/local/tomcat/bin/catalina.sh stop[root@linux-node1 ~]# /usr/local/tomcat/bin/catalina.sh start

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

4、Apache反向代理tomcat

[root@linux-node1 ~]# yum install -y httpd[root@linux-node1 ~]# grep ^[a-Z] /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd"Listen 80Include conf.modules.d/*.confUser apacheGroup apacheServerAdmin root@localhostServerName www.linuxlong.comErrorLog "logs/error_log"LogLevel warnAddDefaultCharset UTF-8EnableSendfile onIncludeOptional conf.d/*.conf[root@linux-node1 ~]# cat /etc/httpd/conf.d/vhosts.conf   #配置反向代理虚拟主机
ServerName www.linuxlong.com ProxyVia On #开启via ProxyRequests Off #关闭正向代理,即开启了反向代理 ProxyPreserveHost On
Require all granted
ProxyPass /status ! ProxyPass / ajp://node1.long.com:8009/ #这里使用ajp协议进行和tomcat通信,也可以更换成http协议。此处也可以使用ip地址进行反向代理,这样可以不用进行域名解析。 ProxyPa***everse / ajp://node1.long.com:8009/
#定义访问属性 Require all granted
[root@linux-node1 ~]# httpd -tSyntax OK[root@linux-node1 ~]# systemctl restart httpd

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

5、apache+nginx+tomat实现动静分离

5.1、配置nginx作为反向代理

[root@lb01 nginx]# cat nginx.confuser nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;include /usr/share/nginx/modules/*.conf;events {    worker_connections 1024;}http {    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  /var/log/nginx/access.log  main;    sendfile            on;    tcp_nopush          on;    tcp_nodelay         on;    keepalive_timeout   65;    types_hash_max_size 2048;    include             /etc/nginx/mime.types;    default_type        application/octet-stream;    include /etc/nginx/conf.d/*.conf;    server {        listen       80 default_server;        server_name  _;        root         /usr/share/nginx/html;    error_log /var/log/nginx/tomcat_error.log;        include /etc/nginx/default.d/*.conf;    location / {    #静态反向代理        proxy_pass http://192.168.56.120;    }        location ~* \.(jsp|do)$ {   #动态反向代理        proxy_pass http://192.168.56.110;    }        location ~ \.php$ {            root           html;            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;            include        fastcgi_params;        }        error_page 404 /404.html;            location = /40x.html {        }        error_page 500 502 503 504 /50x.html;            location = /50x.html {        }    }}

5.2、配置静态web-->nginx

[root@linux-node2 vhost]# cat oss.conf server {    listen 80;    server_name localhost;    root /webroot/web-demo;    index index.php index.html index.htm;   }

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

5.3、配置动态反向代理-->apache

[root@linux-node1 conf]# cat /etc/httpd/conf.d/vhosts.conf 
ServerName 192.168.56.110 ProxyVia On ProxyRequests Off ProxyPreserveHost On
Require all granted
ProxyPass /status ! ProxyPass / ajp://node1.long.com:8009/ ProxyPa***everse / ajp://node1.long.com:8009/
Require all granted

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

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

转载于:https://blog.51cto.com/jinlong/2088834

你可能感兴趣的文章
[转载]如何破解Excel VBA密码
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
国内外MD5在线解密网站
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Git-命令行-删除本地和远程分支
查看>>
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。...
查看>>
顺序图【6】--☆☆
查看>>
Docker Swarm 让你事半功倍
查看>>
[转]IC行业的牛人
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
linux系统常用命令
查看>>
在 Word 中的受支持的区域设置标识符的列表
查看>>
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明2
查看>>
An easy to use android color picker library
查看>>
Oracle SID爆破工具SidGuess
查看>>
批处理常用命令总结2
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>