防火墙概述及实战

目录

前言

一、概述

(一)、防火墙分类

(二)、防火墙性能

(三)、iptables

(四)、iptables中表的概念

二、iptables规则匹配条件分类

(一)、基本匹配条件

(二)、显式匹配使用选项及功能

(三)、iptables规则

三、iptables应用

(一)、进行标记,可在LVS调度器中应用

(二)、iptables nat表应用案例

四、什么是防火墙

五、FireWalld防火墙的配置

(一)、Firewalld默认共9个zone

(二)、端口和服务名称的对应关系

总结




前言

防火墙是一种综合性的技术,涉及到计算机网络技术、密码技术、安全技术、软件技术、安全协议、网络标准化组织的安全规范以及安全操作系统等多方面。

一、概述

在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。

作用

用于保护内网安全的一种设备

依据规则进行防护

用户定义规则

允许或拒绝外部用户访问

(一)、防火墙分类

逻辑上划分

防火墙可以大体分为主机防火墙和网络防火墙

主机防火墙

针对于单个主机进行防护

网络防火墙

针对网络进行防护,处于网络边缘,防火墙背后是本地局域网网络防火墙主外(服务集体),主机防火墙主内(服务个人)

物理上划分

防火墙可分为硬件防火墙和软件防火墙

硬件防火墙

在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高

软件防火墙

应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火墙低,成本较低,对于

Linux系统已自带,直接使用即可

硬件防火墙定义

硬件防火墙是指把具备配置数据包通过规则的软件嵌入硬件设备中,为网络提供安全防护的硬件设备。多见于网络边缘。

硬件防火墙作用(拓扑图 ups)

硬件防火墙品牌Juniper、cisco(思科ASA) 、华为、天融信等

软件防火墙定义

软件防火墙是单独使用具备配置数据包通过规则的软件来实现数据包过滤。多见于单主机系统或个人计算机。

硬件防火墙与软件防火墙比较

硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。

软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用   于单机系统或个人计算机中,不直接用于计算机网络中。

Web应用防火墙(WAF)

Web应用防火墙是对web防护(网页保护)的安全防护设备(软件),主要用于截获所有HTTP数据或仅仅满足某些规则的   会话。多见于云平台中。

(二)、防火墙性能

吞吐量

并发连接

新建连接

时延

抖动

(三)、iptables

iptables是什么?

iptables不是防火墙,是防火墙用户代理用于把用户的安全设置添加到安全框架中  安全框架是防火墙,安全框架的名称为netfilter。

netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具。

平常我们使用iptables并不是防火墙的服务,而服务是由内核提供的。

iptables工作依据 规则(rules)

iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为如果数据包头符合这样的条件,就这样处理这个数据包

规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCPUDPICMP)和服务类型(HTTPFTP)等。

当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、   丢弃(DROP)等。

配置防火墙主要工作就是对iptables规则进行添加、修改、删除等。

iptables规则管理

iptables规则显示

netfilter/iptables功能

netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的   企业级硬件防火墙,能够实现如下功能:

数据包过滤,即防火墙;

数据包重定向,即转发;

网络地址转换,即可NAT。

iptables中链的概念

当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所     以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所  监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址,  我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内   核中设置关口,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被  阻止,于是就出现了inputoutput关口,然而在iptables中我们把关口叫做

如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够  进行转发,那么这个转发就是本机内核所支持的IP_FORWARD功能,此时我们的主机类似于路由器功能,所以我们会   看到在iptables中,所谓的关口并只有上面所提到的inputoutput这两个,应该还有路由前转发路由后它们所对应的英文名称分别为PREROUTINGFORWARDPOSTROUTING,这就是我们说到的5链

当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,各报名经常  的可能不同,如果报文目标地址是本机,则会经常input链发往本机用户空间,如果报文目标不是本机,则会直接  在内核空间中经常forward链和postrouting链转发出去。

有的时候我们也经常听到人们在称呼input规则链,这又是怎么回事呢?我们知道,防火墙的作用在于对经过的数  据报文进行规则匹配,然后执行对应的动作,所以数据包经过这些关口时,必须匹配这个关口规则,但是关口规则   可能不止一条,可能会有很多,当我们把众多规则放在一个关口上时,所有的数据包经常都要进行匹配,那么就形成  了一个要匹配的规则链条,因此我们也把称作规则链

INPUT:处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)

当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip  不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目的主机。

PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机。

POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往下一跳。

iptables链管理方法(了解)

(四)、iptables中表的概念

每个规则链上都设置了一串规则,这样的话,我们就可以把不同的规则链组合成能够完成某一特定功能集合分类,而这个集合分类我们就称为表,iptables中共有5张表。security:是后加上的,定义强制访问控制规则;通常为4表

filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter。

nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat。

mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle。

raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw。

iptables中表链之间的关系

iptables中表的优先级:raw-mangle-nat-filter(由高至低)

二、iptables规则匹配条件分类

(一)、基本匹配条件

-p(protocal)

指定规则协议,tcp(传输层) udp(传输层) icmp(网络层) ip(网络层)

-s(source) 

指定数据包的源地址

-d(destination)

指定目的地址

-i

输入网卡接口(lo本地回环,ens33)

-o

输出网卡接口(ens37,ens33等)

!取反

基本匹配的特点是:无需加载扩展模块,匹配规则生效。

拒绝icmp的访问ACCEPT为允许

iptables -A INPUT -p icmp -j REJECT

拒绝tcp的访问

iptables -A INPUT -p tcp -j REJECT

拒绝源地址的访问

iptables -A INPUT -s 192.168.238.131 -j REJECT

除了icmp协议可以通信DROP为拒绝但反应较慢)

iptables -A INPUT ! -p icmp -i ens33 -j DROP

(二)、显式匹配使用选项及功能

禁止访问80端口,其他都可以

不允许别人Ping我,我可以Ping别人

iptables -A INPUT -p icmp --icmp-type 8/0 -j REJECT

多端口:multiport

禁止80和20端口访问,其他端口允许

iptables -I INPUT  -p tcp -m multiport --dports 80,20 -j REJECT

多IP地址:iprange

禁止192.168.238.120~192.168.238.130IP的访问

指定访问时间范围:time注意时区

iptables -I INPUT -p tcp --dport 80 -m time --weekdays Tus --timestart 10:00:00 --timestop 18:00:00  -j REJECT

connlimit(了解)

连接限制,根据每个客户端IP作并发连接数量限制。

limit(了解)

报文速率限制。

state

追踪本机上的请求和响应之间的数据报文的状态。

状态有五种

NEW

新连接请求

ESTABLISHED

已建立的连接

INVALID

无法识别的连接

RELATED

相关联的连接,当前连接是一个新请求

UNTRACKED

未追踪的连接

(三)、iptables规则

制定iptables规则思路

选择一张表,此表决定了数据报文处理的功能

选择一条链,此链决定了数据报文流经哪些位置

选择合适的规则,此条件决定了对数据做何种条件匹配

选择处理数据报文的动作 拒绝还是允许

制定iptables规则策略

黑名单

没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐

白名单

没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策略,推荐

iptables规则中动作

iptables规则中的动作常称为target,也分为基本动作和扩展动作。

ACCEPT

允许数据包通过

DROP

直接丢弃数据包,不给任何回应信息

REJECT

拒绝数据包通过,发送回应信息给客户端

SNAT

源地址转换

数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,接收方认为数据包的来

源是被替换的那个IP主机,返回响应时,也以被替换的IP地址进行

修改数据包源地址,当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址

(目的IP地址不变),使网络内部主机能够与网络外部主机通信

MASQUERADE

伪装,类似于SNAT,适用于动态的、临时会变的ip地址上,例如:家庭使用的宽带。  用发送数据的网卡上的IP来替换源IP,对于IP地址不固定场合使用

DNAT

目标地址转换

数据包从网卡发出时,修改数据包中的目的IP,表现为你想访问A,但因网关做了DNAT,把所有  访问A的数据包中的目的IP地址全部修改为B,实际最终访问的是B

改变数据包目的地址,当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换

(源IP地址不变),重新转发到内网的主机

REDIRECT

在本机做端口映射

LOG

/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则

SNAT

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100

DNAT

iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to- destination 192.168.10.254

路由是按照目的地址进行路由选择的,因此,DNAT是在PREROUTING链上进行的,SNAT是在数据包发出的时候进行的,因此是在POSTROUTING链上进行的。

iptables基础语法结构

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]

不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略,否则  需要指定匹配条件。

三、iptables应用

服务名:iptables-services(yum)

centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件,安装iptables- services后,将直接生成配置文件,便于配置保存。包含ipv4及ipv6。

保存规则:ptables-save > /etc/sysconfig/iptables(路径可自定义)

重载:iptables-restore < /etc/sysconfig/iptables

不允许通过本地回环网卡访问本机

iptables -I INPUT -i lo -j REJECT

本机无法访问本机

解决办法

(一)、进行标记,可在LVS调度器中应用

详细列表

iptables -t mangle -nL

进行标记

(二)、iptables nat表应用案例

nat表作用:导流

nat表作用位置

KVMOpenStack中虚拟机或云主机与外部通信

Docker管理的容器与外部通信

开启路由转发功能

SNAT源地址转换、DNAT目标地址转换

案列

实验环境

hd1:192.168.238.101、网关:192.168.238.100

hd2: 192.168.100.101

hd3: 192.168.100.100(ens33)、192.168.238.100(ens37)

注意:为了方便互相验证先在hd1和hd3上先装好httpd服务

步骤

snat

hd1       

 安装httpd服务,启动httpd服务

配置静态IP及网关

创建访问文件        echo hello > /var/www/html/index.html(可不创建,只是为了方便观察)

hd2      

安装httpd服务,启动httpd服务

配置静态IP及网关

创建访问文件        echo OKOK > /var/www/html/index.html

hd3        添加网卡ens37,配置静态IP

开启防火墙的路由转发功能

vim  /etc/sysctl.conf

sysctl -p 激活

配置防火墙的snat地址转换

iptables -t nat -A POSTROUTING -s 192.168.238.0/24 -o ens37 -j SNAT --to-source 192.168.100.100

到hd1上进行验证

dnat

hd3配置防火墙的dnat地址转换

iptables -t nat -A PREROUTING -d 192.168.100.100 -p tcp -j DNAT --to-destination 192.168.238.101

到hd2上进行验证

四、什么是防火墙

防火墙:防范一些网络攻击。有软件防火墙、硬件防火墙之分。

防火墙选择让正常请求通过,从而保证网络安全性。

Windows防火墙

传统Linux防火墙

FireWalld防火墙的概念

CentOS6中防火墙叫做iptables

CentOS7中默认使用的防火墙是firewalld

FireWalld增加了区域的概念,所谓区域是指,firewalld预先准备了几套防火墙策略的集合,类似于策略的模板,用户可以根据需求选择区域。

FireWalld属于动态防火墙,是CentOS7系统中用于对netfilter内核模块用户空间管理工具。FireWalld仅仅替代了iptables service部分,其底层还是使用iptables做为防火墙规则管理入口。

常见区域及相应策略规则

trusted

允许所有数据包

home

拒绝流入的流量,除非与流出的流量相关,允许

ssh,mdns,ippclient,amba-client,dhcpv6-client服务通过

internal

等同于home

work

拒绝流入的流量,除非与流出的流量相关,允许ssh,ipp

client,dhcpv6-client服务通过

public

拒绝流入的流量,除非与流出的流量相关,允许

ssh,dhcpv6-client服务通过

external

拒绝流入的流量,除非与流出的流量相关,允许ssh服务通

dmz

拒绝流入的流量,除非与流出的流量相关,允许ssh服务通

block

拒绝流入的流量,除非与流出的流量相关,非法流量采取拒

绝操作

drop

拒绝流入的流量,除非与流出的流量相关,非法流量采取丢

弃操作

运行模式

配置的防火墙策略立即生效,但是不写入配置文件

永久模式

配置的防火墙策略写入配置文件,但是需要reload

重新加载才能生效

五、FireWalld防火墙的配置

使用systemctl来管理firewalld的服务

语法:systemctl [选项] firewalld

start

启动指定服务

status检查指定服务的运行状况

reload

重新加载指定服务的配置文件(并非所有服务都支持

reload,通常使用restart)

restart

重启指定服务

stop

停止指定服务

管理firewall配置

查看默认使用的区域        firewall-cmd --get-default-zone

查看所有可用区域           firewall-cmd --get-zones

列出当前使用区域配置    firewall-cmd --list-all

列出所有区域的配置        firewall-cmd --list-all-zones

在public区域,添加允许tcp协议的1024端口通过的规则       

firewall-cmd --zone=public --add-port=1024/tcp

在public区域,去掉允许tcp协议的1024端口通过的规则

firewall-cmd --zone=public --remove-port=1024/tcp

在public区域,使用permanent参数,永久添加允许1024端口通过的规则

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

(一)、Firewalld默认共9个zone

FireWalld不同区域之间的差异主要是每个区域对待数据包的默认行为不同

内部

internal

非军事化

dmz

外部external

家 庭

home

拒 绝

block

默认区域

Firewalld

丢 弃

drop

信  任

trusted

工作区

work

(二)、端口和服务名称的对应关系

查看端口和服务名称的对应关系        cat /etc/services

新建规则

--add

删除规则

--remove

改变规则

--change

查询规则

--query

--add-interface=eth0             将网络接口添加到默认的区域内

--add-service=http --permanent

添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)

--remove-interface=eth0        将网络接口在默认的区域内删除

--change-interface=eth1        改变指定的接口到其他区域

--query-masquerade              查询SNAT的状态


总结

首先要了解防火墙的一些概念再去操作要好一些,因为操作命令较长,不好背记,理解了选项的含义会更加得心应手。4表5链和iptables服务需要重点掌握。

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

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

相关文章

sklearn中的数据集使用

导库 from sklearn.datasets import load_iris 实现 # 加载数据集 iris load_iris() print(f查看数据集&#xff1a;{iris}) print(f查看数据集的特征&#xff1a;{iris.feature_names}) print(f查看数据集的标签&#xff1a;{iris.target_names}) print(f查看数据集的描述…

看板管理:以可视化方式确定任务优先级

确定工作的优先级是我们今天都要面对的挑战。若处理不当&#xff0c;我们就可能试图一心多用&#xff0c;从而严重损害工作效率。 使用看板方法来设定工作优先级是一种非常直观、快速的方法。 确定工作优先级的看板方法 看板工作流程管理方法的核心在于工作可视化。工作被划…

Elasticsearch:什么是生成式人工智能?

生成式人工智能定义 给学生的解释&#xff08;基本&#xff09;&#xff1a; 生成式人工智能是一种可以创造新的原创内容的技术&#xff0c;例如艺术、音乐、软件代码和写作。 当用户输入提示时&#xff0c;人工智能会根据从互联网上现有示例中学到的知识生成响应&#xff0c;…

记录vite下使用require报错和解决办法

前情提要 我们现在项目用的是vite4react18开发的项目、但是最近公司有个睿智的人让我把webpack中的bpmn组件迁移过来、结果就出现问题啦&#xff1a;因为webpack是commonjs规范、但是vite不是、好像是es吧、可想而知各种报错 废话不多说啦 直接上代码&#xff1a; 注释是之前c…

【Spring】手动实现Spring底层机制-问题的引出

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理手动实现Spring底层机制-问题的引出 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1…

工厂设计模式

github&#xff1a;GitHub - QiuliangLee/pattern: 设计模式 概念 根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式&#xff0c;根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。 简单工厂模式、工厂方法模式和抽象工厂模式有何区别&#xff1f; - 知…

一点整理

&#xff08;1&#xff09; 美国在2010年以后开始流行数字化转型的。 在2010年以前&#xff0c; 2006年社交网络FB “YOU”&#xff1a;在2004-2006 Web2.0热之前&#xff0c;企业是无法直接触达到每个消费者的2006年Amazon电子商务&#xff1a;这个是我瞎凑的&#xff0c;但因…

运算放大器学习笔记

目录 一、基本定理二、基本定义三、负反馈电路四、同向放大电路五、反向放大电路六、差分放大电路 一、基本定理 【电路示意图】 开环放大公式 VOAvo(V-V-) 开环放大倍数&#xff08;增益&#xff09;非常大&#xff0c;105 或 106 输入阻抗超级大&#xff08;可以理解为电…

八股文学习一(存储)

一. 存储 行式存储的原理与特点 对于 OLAP 场景&#xff0c;大多都是对一整行记录进行增删改查操作的&#xff0c;那么行式存储采用以行的行式在磁盘上存储数据就是一个不错的选择。 当查询基于需求字段查询和返回结果时&#xff0c;由于这些字段都埋藏在各行数据中&#xf…

Uniapp学习之从零开始写一个简单的小程序demo(新建页面,通过导航切换页面,发送请求)

先把官网文档摆在这&#xff0c;后面会用到的 [uniapp官网文档]: https://uniapp.dcloud.net.cn/vernacular.html# 一、开发工具准备 1-1 安装HBuilder 按照官方推荐&#xff0c;先装一个HBuilder 下载地址&#xff1a; https://www.dcloud.io/hbuilderx.html1-2 安装微信开…

chrome插件:一个基于webpack + react的chrome 插件项目模板

项目结构 $ tree -L 1 . ├── README.md ├── node_modules # npm依赖 ├── package.json # 详细依赖 ├── pnpm-lock.yaml ├── public # 里边包含dist&#xff0c;安装的时候安装这个目录即可 ├── src …

postgre 12.11单实例安装文档

一 下载 访问https://www.postgresql.org/download/&#xff0c;点击左侧的‘source进行下载&#xff0c;一般选择bz2的安装包。 二 安装 这里安装12.11版本的postgre&#xff0c;数据目录路径为/data/server/pgdata&#xff0c;端口为5432. 2.1 安装依赖包 #安装 yum in…

C++信息学奥赛1171:大整数的因子

该程序是一个寻找能够整除输入数字的最小正整数的程序。下面是代码的逻辑解析&#xff1a; #include <iostream> #include <string> #include <cstring>using namespace std;int main() {string n; // 定义一个字符串变量nint fale 0; // 用于标记是否能…

企业形象片宣传片策划要从哪里展开

企业形象片宣传片是一种有效的营销工具&#xff0c;能够向潜在客户传达企业的核心价值观、品牌形象和产品服务。对于企业来说&#xff0c;一个成功的宣传片可以增加品牌知名度&#xff0c;提高销售额&#xff0c;并建立与客户的良好关系。然而&#xff0c;要想策划一部成功的企…

换行符转换

将\t\n、\n、多个\n\n\n...转换为\n\n。 import pandas as pd import re # 创建一个示例DataFrame data {msgText: [这是示例文本1&#xff0c;包含\t\n换行符,这是示例文本2&#xff0c;包含\n\n多个\n换行符,这是示例文本3&#xff0c;没有换行符]} df pd.DataFrame(data)…

多语言开发(vant

参考&#xff1a;https://blog.csdn.net/qq_44649801/article/details/131878128?spm1001.2014.3001.5506 一、抛出字段对象A export default { } 二、引入汇总文件&#xff0c;&#xff08;主要的是 模块分割 汇总&#xff0c;对A 等的处理 export default { A&#xff0c;B,…

Redis RedLock算法和底层源码分析

Redlock红锁算法 官网地址&#xff1a;Distributed Locks with Redis | Redis 为什么要使用RedLock&#xff1f; 解释&#xff1a; 线程 1 首先获取锁成功&#xff0c;将键值对写入 redis 的 master 节点&#xff0c;在 redis 将该键值对同步到 slave 节点之前&#xff0c;mas…

使用 CSS 伪类的attr() 展示 tooltip

效果图: 使用场景: 使用React渲染后台返回的数据, 遍历以列表的形式展示, 可能简要字段内容需要鼠标放上去才显示的 可以借助DOM的自定义属性和CSS伪类的attr来实现 所有代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-…

Navicat导入Excel数据顺序变了

项目场景&#xff1a; Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中。但是&#xff0c;在导入的过程中&#xff0c;我们常会发现数据顺序出现了问题&#xff0c;导致数据错位&#xff0c;给数据的处理带来了极大的麻烦。 原因分析&#xff1a; 这个问题的…

vue2.X 中使用 echarts5.4.0实现项目进度甘特图

vue2.X 中使用 echarts5.4.0实现项目进度甘特图 效果图&#xff1a; 左侧都是名称&#xff0c;上面是时间&#xff0c;当中的内容是日志内容 组件&#xff1a; gantt.vue <template><div id"main" style"width: 100%; height: 100%"></…