Tomcat 十大安全优化方法(详解版)

news2024/10/6 20:29:46

目录

1 talnet管理端口保护

2 AJP连接端口保护

3 禁用管理器

4 降权启动

5 控制文件列表的访问

6 隐藏版本信息

7 server header重写

8 限制IP访问

9 修改脚本权限

10 访问日志格式规范


1 talnet管理端口保护

配置内容

(1)修改默认8005管理端口(要求:在8000~8999之间)

(2)修改shutdown指令为其他字符串。

配置: 

以我的为例,我的Tomcat安装在application目录下。

vi /application/tomcat/conf/server.xml

将 <Server port="8005" shutdown="SHUTDOWN"> 中的8005shutdown修改即可,例如:<Server port="8123" shutdown="mortal">。

2 AJP连接端口保护

配置内容

(1)修改默认的AJP 8009端口(要求:在8000~8999之间)

(2)限制AJP端口访问的权限为线上机器(iptables规则)

【防止线下的测试流量被转发到Tomcat服务器端】

配置

vi /application/tomcat/conf/server.xml

将port="8009"中8009修改即可,例如:port="8234"。

3 禁用管理器

配置内容

(1)删除Tomcat目录下的/conf/tomcat-users.xml文件,重启Tomcat后会自动生成新文件

(2)删除Tomcat目录下的/webapps目录下所有内容。

(3)将Tomcat应用根目录配置为Tomcat安装目录以外的目录。

【Tomcat管理端如果被黑客攻破,将会获取服务器的控制权,后果不敢想象!】

配置

rm -rf /application/tomcat/conf/tomcat-users.xml
rm -rf /application/tomcat/webapps/*
vi /application/tomcat/conf/server.xml

将<Host name="localhost"  appBase="webapps" 中的webapps修改即可,例如:<Host name="localhost"  appBase="/application/test/webapps"。

【要求修改后的目录必须存在!不存在则使用mkdir -p命令创建】

4 降权启动

配置内容

降低Tomcat启动用户的目录访问权限(必须为非root权限)

【避免Tomcat服务被入侵时,直接获取高级用户权限,后果极其严重!】

配置

(1)创建用户

useradd tomcat

(2)新建目录

mkdir -p /home/tomcat

(3)将原本的Tomcat复制到新创建的目录下并改名为tomcat_1

cp -a /application/tomcat/ /home/tomcat/tomcat_1

(4)修改属组和属主

chown -R tomcat:tomcat /home/tomcat/tomcat_1/

(5)通过普通用户将新生成的tomcat_1运行起来

su -c '/home/tomcat/tomcat_1/bin/startup.sh' tomcat

 【关闭使用 su -c '/home/tomcat/tomcat_1/bin/shutdown.sh' tomcat 命令即可】

5 控制文件列表的访问

配置内容

修改Tomcat目录下的 /conf/web.xml 文件中的default部分。

【true表示允许列出目录文件,false表示不列出目录文件】

配置

vi /application/tomcat/conf/web.xml

默认就是false,不需要修改。

6 隐藏版本信息

配置内容

(1)修改Tomcat目录下的 /conf/web.xml 文件中的403、404、500等错误页面。

(2)修改Tomcat应用程序目录下的 WEB-INF/web.xml 文件中配置进行错误页面的重定向。(在Tomcat安装目录中,webapps是放置web应用的目录。在Tomcat的webapps目录下,针对每个web应用程序都有一个目录,例如:在 webapps 下新建一个名为 myapp 的目录,那么 myapp 目录下的 WEB-INF 目录就是存放 Web 应用程序的配置文件和类文件的目录。WEB-INF 目录下的 web.xml 是该web应用的核心配置文件,其他在WEB-INF/classes和WEB-INF/lib下的文件则是该web应用程序所使用的类和jar包。)

【避免出现错误时错误页面暴露出服务器或者版本信息,还必须确保修改后的重定向页面必须存在】

配置

vi /application/tomcat/conf/web.xml

在文件最下方</web-app>上面添加如下内容:

	<error-page>
		<error-code>403</error-code>
		<location>/forbidden.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/force.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/mortal.jsp</location>
	</error-page>

其中网站发布目录的根目录下面(Tomcat中webapps/)必须存在forbidden.jspforce.jspmortal.jsp

7 server header重写

配置内容

在Connector参数中加入server配置。

【修改HTTP响应中的Server头来重写Tomcat服务器的标识,重启Tomcat之后,相应的HTTP响应中的Server头就会被重写为你设置的标识。】

配置

vi /application/tomcat/conf/server.xml

Connector参数:

在其中添加如下内容:

server=”myweb-server”

添加完成后保存退出即可。

8 限制IP访问

配置内容

通过配置,限制IP的访问来源。

【配置信任IP的白名单,同时拒绝非白名单IP的访问。】

配置

修改Tomcat主配置文件server.xml

vi /application/tomcat/conf/server.xml

host参数下面添加如下内容:

<Context path="" docBase="/application/tomcat/webapps/test" debug="0" reloadable="false" crossContext="true"/>
<Value className=”org.apache.catalina.values.RemoteAddrValue” allow=”192.168.10.123,192.168.124*” deny=”*.*.*.*”/>
</Context>

 添加完毕后保存退出。

9 修改脚本权限

配置内容

去除其他用户对Tomcat目录下的bin目录下的文件(例如:shutdown.shstartup.shcatalina.sh等)的可执行权限。

【防止其他用户有启动/停止Tomcat的权限】

配置

chmod -R 774 /application/tomcat/bin/*

10 访问日志格式规范

配置内容

开启Tomcat默认访问日志中RefererUser-Agent记录。

【一旦出现安全问题能够更好的根据日志进行问题排查和解决】

配置

vi /application/tomcat/conf/server.xml

%b后添加如下内容:

%{Referer}i %{User-Agent}i %D" resolveHosts="false"

添加完成后,保存退出即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element-plus 结合Vue Router时出现的问题及解决方法之一

1、单文件应用element-plus中的Menu 侧边栏 <template><el-row class"tac"><el-col :span"12"><!-- <h5 class"mb-2">Custom colors</h5> --><el-menuactive-text-color"#ffd04b"background-…

GRU,LSTM,encoder-decoder架构,seq2seq的相关概念

门控记忆单元&#xff08;GRU&#xff09; GRU模型有专门的机制来确定应该何时更新隐状态&#xff0c;以及应该何时重置隐状态。这些机制是可学习的。门控循环单元具有以下两个显著特征&#xff1a; 重置门有助于捕获序列中的短期依赖关系&#xff1b;更新门有助于捕获序列中…

Axios入门案例——后端学习

目录 后端准备 导入依赖 解决跨域 User实体类 DemoController测试接口 前端准备 项目结构 axios.js axios.html 开始测试 后端结果 前端结果 后端准备 导入依赖 案例会用到以下的三个依赖。 <dependency><groupId>org.springframework.boot</gro…

案例066:基于微信小程序的家政预约设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

探索多功能SQL数据库编辑器 - Richardson Software RazorSQL

在当今数字化时代&#xff0c;SQL数据库的管理和编辑是许多企业和开发人员必不可少的任务。为了提高生产力和简化数据库操作&#xff0c;Richardson Software推出了一款强大而多功能的SQL数据库编辑器 - RazorSQL。 RazorSQL是一款功能全面的数据库管理工具&#xff0c;可适用…

redis五种数据结构特点

redis五种数据结构特点 redis-string介绍SDS内部存储数据结构三种编码方式特点总结 redis-list介绍quicklist特点总结 redis-hash特点总结 redis-set介绍 特点总结redis-zset介绍特点总结 redis使用五种数据结构&#xff0c;分别是string&#xff08;字符串&#xff09;&#x…

如何连接到 Azure SQL 数据库(下)

在《如何连接到 Azure SQL 数据库&#xff08;上&#xff09;》中&#xff0c;我们已经了解到了以下内容↓↓↓ 开始之前&#xff1a;Azure 连接凭据和防火墙 如何检索 Azure 连接凭据如何配置服务器防火墙使用 SQL Server Management Studio 连接到 Azure使用 dbForge Studio…

实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + y源码)

导 读 本文主要介绍基于OpenCV传统方法实现密集圆形分割与计数应用,并给详细步骤和代码。 背景介绍 实例图片来源于网络,目标是分割下图中圆形目标并计数。 本文实现效果如下: 实现步骤 【1】灰度转换 + 均值滤波 + 二值化,得到参考背景 img = cv2.imread(src.jpg)c…

AcWing 1250. 格子游戏(并查集)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/1252/ 题解 当两个点已经是在同一个连通块中&#xff0c;再连一条边&#xff0c;就围成一个封闭的圈。一般用x * n y的形式将&#xff08;x, y&#xff0…

注意力机制,Transformer相关详解

本文遵循《动手学深度学习pytorch版》的内容组织&#xff0c;从注意力机制开始讲到Transfomer&#xff0c;偏重关键知识理解并附带图解和公式&#xff0c;未加说明时&#xff0c;插图均来自于该书&#xff0c;文本内容较长&#xff08;9414字&#xff09;&#xff0c;建议收藏慢…

P33鱼和熊掌可以兼得的机器学习-why deep

Review: Why Hidden Layer? 在这里插入图片描述 ** 一个hidden 可以通过无数个 picewise linear 构成任意形状的曲线** 那么为什么还要 deep 呢 Why deep not Fat 同样参数量下&#xff0c;deep的模型表现优于 fat 的 Why we need deep? 使用deep&#xff0c;效率更高&…

mybatisplus使用雪花id通过swagger返回ID时精度丢失问题

在使用mybatisplus自带雪花的时候会发现返回的ID是19位的长度&#xff0c;因此在通过swagger页面展示的时候会发现后端返回的和页面展示的ID不一致问题。是因为精度丢失的问题。因此需要更改雪花ID的长度跟踪进去&#xff1a;发现是DefaultIdentifierGenerator类实现了Identifi…

Python基础入门第四节,第五节课笔记

第四节 第一个条件语句 if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... else: 条件不成立执行的代码1 条件不成立执行的代码2 …… 代码如下: 身高 float(input("请输入您的身高(米):")) if 身高 >1.3:print(f您的身高是{身高},已经超过1.3米,您需…

React中的setState执行机制

我这里今天下雨了&#xff0c;温度一下从昨天的22度降到今天的6度&#xff0c;家里和学校已经下了几天雪了&#xff0c;还是想去玩一下的&#xff0c;哈哈&#xff0c;只能在图片里看到了。 一. setState是什么 它是React组件中用于更新状态的方法。它是类组件中的方法&#x…

Redis——02,redis-benchmark 性能测试

redis-benchmark 性能测试 一、benchmark 性能测试。二、参数详解&#xff1a; 一、benchmark 性能测试。 在bin目录下&#xff0c;有一个redis-benchmark 工具&#xff0c;是用来测试性能的。 二、参数详解&#xff1a; http://doc.yaojieyun.com/www.runoob.com/redis/re…

正则化实战( Lasso 套索回归,Ridge 岭回归)

Lasso 套索回归 导入包 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SGDRegressor, LinearRegression原方程的计算结果 # 1. 创建数据集X&#xff0c;y X 2 * np.random.rand(100, 20) w np.random.rand(20, 1) b np.r…

MATLAB 计算点云坐标的最大最小值 (38)

MATLAB 计算点云坐标的最大最小值 (38) 一、算法介绍二、算法实现1.代码一、算法介绍 沿着X Y Z三个坐标轴方向,点云坐标存在对应的最大最小值,这在计算点云体积或者其他方面有使用,这里使用MATLAB快速获取xmax xmin ymax ymin zmax zmin6个最大最小值 二、算法实现 1.代…

详谈前端中常用的加/密算法

本文主要详细介绍了在前端开发中常用的加/解密算法&#xff0c;以及前端如何实现。 总的来说&#xff1a;前端加密无论使用哪个加密都一样是有可能性被他人获取到相关的公钥或密钥的&#xff08;比如&#xff1a;拦截请求、查看源代码等&#xff09;&#xff0c;然后进行加密与…

MS5602视频 8 位数模转换器,可替代TLC5602

MS5602 是低功率、超高速视频数模转换器。 MS5602 以 DC 至 20MHz 的采样速率&#xff0c;将数字信号转换成模拟信号。由于高速工作 的特性&#xff0c; MS5602 适合于数字电视、电脑视频处理及雷达信号处 理等数字视频应用。 MS5602 工作在 -40C 至 85C 的温度范围内 …

实验4.1 静态路由的配置

实验4.1 静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.设置交换机和路由器的基本配置。2.使用display ip interface brief命令查看接口配置信息。3.配置静态路由&#xff0c;实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…