使用FirewallD构建动态防火墙(9)

news2024/9/20 14:59:19

预备知识

firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具。它也支持允许服务或者应用程序直接添加防火墙规则的接口。在 Linux 历史上已经使用过的防火墙工具包括:ipfwadm、ipchains、iptables

在RHEL7/CentOS7.x 版本上,firewalld已经替代iptables成为默认的防火墙软件,firewalld是centos7的一大特性,最大的好处有两个:

第一个:

在后台, firewalld 和 iptables 服务都通过相同的接口来与内核中的 netfilter 框架相交流,这不足为奇,即它们都通过 iptables 命令来与 netfilter 交互。然而,与 iptables 服务相反, firewalld支持动态更新,不用重启服务,随时添加规则,随时生效,这个过程不需要重新装载netfilter内核模块,但是要求所有的规则都通过firewalld守护进程来实现,以确保守护进程内的防火墙状态和内核中的防火墙状态一致;守护进程firewalld,应用程序、守护进程和用户可以通过D-BUS请求一个防火墙特性,特性可以是预定义的防火墙功能,例如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP拦截或自定义的规则。原有的静态防火墙规则还可以继续使用,但是不能和firewalld同时存在,需要使用这两者中的任何一个时,停止另外一个的使用。

第二个:

加入了区域(zone)的概念

区域定义了网络连接的可信等级,这是一个一对多的关系,意味着一次连接可以仅仅是一个区域的一部分,一个区域可以用于很多连接。

比较 system-config-firewall 以及 iptables 的 firewalld:

firewalld 和 iptables service 之间最本质的不同是:

iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld 将配置储存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件里。要注意,当 firewalld 在Red Hat Enterprise Linux上安装失败时, /etc/sysconfig/iptables 文件就不存在。

使用 iptables service,每一个单独更改意味着清除所有旧有的规则和从 /etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld 却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld 可以在运行时间内,改变设置而不丢失现行连接。

 对网络区的理解:

由firewalld 提供的区域按照从不信任到信任的顺序排序:

drop(丢弃)

任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。

block(限制)

任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。

public(公共)

在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。

external(外部)

特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。

dmz(非军事区)

用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。

work(工作)

用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。

home(家庭)

用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。

internal(内部)

用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。

trusted(信任)

可接受所有的网络连接。

安装时,firewalld 里的默认区域被设定为公共区域。

firewalld home page:http://www.firewalld.org

参考文档:

RHEL7 安全性指南4.5. 使用防火墙 https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html

实验目的
1)firewalld 的基本操作

2)用firewall-cmd 配置防火墙

3) 高级配置
实验环境
操作系统:Centos7

 IP随机

所用软件:firewalld

PS:更多相关课程,《Linux防火墙》http://hetianlab.com/expc.do?w=exp_ass&ec=8b3a16a6-3eb7-4035-a94b-26baa0d05d51

实验步骤一

firewalld 的基本操作

1、启动firewalld

systemctl start firewalld

 查看版本:firewall-cmd --version

 2、检查防火墙是否运行

如果 firewalld 在运行,输入以下命令检查:

 另外,检查 firewall-cmd 是否可以连接后台程序:

 3、列出支持的区域列表

 PS:firewalld 的缺省区域是 public。
4、区域相关设置

查看当前的区域
firewall-cmd --get-active-zones

 更改区域为家庭区域:
使用firewall-cmd --set-default-zone设置区域(立即生效)

 找出当前分配了接口(例如 eth0)的区域
使用 firewall-cmd --get-zone-of-interface

 找出分配给一个区域(例如home区域)的所有接口

 列出一个区域的所有设置,比如public:

 5、应急模式:(只做说明,请勿实际操作)

阻止所有网络链接:

firewall-cmd --panic-on

 恢复链接:
firewall-cmd --panic-off

 查看是否启用应急模式:

 如果启用,会显示 yes,如果未启用,屏幕会显示 no。

实验步骤二

1、重新加载防火墙:

重新加载防火墙,并不中断用户连接,即不丢失状态信息

重新加载防火墙并中断用户连接,即丢弃状态信息:

禁止在实验室环境使用。通常在防火墙出现严重问题时,这个命令才会被使用。比如,防火墙规则是正确的,但却出现状态信息问题和无法建立连接。



2、打开防火墙里的端口

列出某个区域所有开放的端口:

firewall-cmd --zone=zone --list-ports

要将一个端口加入一个区域,例如,允许 TCP流量通过端口 80 进入dmz分区,输入以下命令:

firewall-cmd --zone=dmz --add-port=80/tcp

如果是端口范围可以使用以下命令:

firewall-cmd --zone=zone --add-port=port-port/[udp|tcp]

比如允许public区域 3000 到 3020 的udp端口

3、服务管理设置

列出支持的服务(不一定启用):

firewall-cmd --get-service     

 
列出某个区域中启用的服务

firewall-cmd --zone=zone --list-services

要把一个服务加入到区域,例如允许 SMTP 接入public区域,可以使用如下命令

firewall-cmd --zone=public --add-service=smtp     

从区域移除服务

firewall-cmd --zone=zone --remove-service=servicename

4、IP伪装功能

启用区域中的IP伪装功能,私有网络地址被隐藏并映射到一个公有IP,常用于路由。

使用如下命令检查区域是否启用ip伪装功能

firewall-cmd --zone=zone --query-masquerade


如果可用,屏幕会显示 yes,不可用显示no

允许伪装IP,可以使用如下命令:

firewall-cmd --zone=zone --add-masquerade

禁用伪装IP则使用:firewall-cmd --zone=zone --remove-masquerade

5、ICMP阻塞功能

阻止一个或多个 ICMP 类型。要获得被支持的 ICMP 类型列表,输入以下命令:

firewall-cmd --get-icmptypes

启用区域的ICMP阻塞功能

firewall-cmd --zone=zone --add-icmp-block=<icmptype>

禁用区域的ICMP阻塞功能

firewall-cmd --zone=zone --remove-icmp-block=<icmptype>

查询区域的ICMP阻塞状态

firewall-cmd --zone=zone --query-icmp-block=<icmptype>

例如,阻塞public区域的响应应答报文:

firewall-cmd --zone=public --add-icmp-block=echo-reply


6、配置端口转发

可以配置端口映射到另外一个端口,端口映射到另外一个地址上的相同端口,端口映射到另外一台主机上的不同端口,命令格式如下:

firewall-cmd --zone=zone --add-forward-port=port=<port>-[<port>]:proto=<protocol> {:toport=<port>-[<port>] | :toaddr=<address> | :toport=<port>-[<port>]:toaddr=<address>}

在配置端口转发之前需要将IP伪装打开

实例:

firewall-cmd --zone=external --add-masquerade

将本机的80端口转发到8080端口

firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

本来要送到 80 端口的程序包现在被转发到 8080 端口。源目的端口用 port 选项指定。这个选项可以是一个端口,或者一组端口范围并加上协议。如果指定协议的话,这个协议必须是 tcp 或 udp。这个新的本地端口,即流量被转发过去的端口或者端口范围,需用 toport 选项指定

映射到另外一个地址上的相同端口(以下地址为演示所用,实验室环境不存在):

firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.99.100


端口映射到另外一台主机上的不同端口(以下地址为演示所用,实验室环境不存在):

firewall-cmd --zone=external /

--add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.99.100

禁用端口转发或者映射:

命令格式如下:

firewall-cmd --zone=zone --remove-forward-port=port=<port>-[<port>]:proto=<protocol> {:toport=<port>-[<port>] | :toaddr=<address> | :toport=<port>-[<port>]:toaddr=<address>}

移除本机80到8080端口的转发:

firewall-cmd --zone=external --remove-forward-port=port=80:proto=tcp:toport=8080

移除本机80端口到主机192.168.99.100的80端口的映射

firewall-cmd --zone=external --remove-forward-port=port=80:proto=tcp:toaddr=192.168.99.100

查询区域内的端口转发可以使用如下命令:

firewall-cmd --zone=zone --query-forward-port



7、设置永久保留

上面所有的配置都是临时性的配置,当重启/载服务或重启系统后,配置将不再保留。就像这样:



如果需要将设置永久保留,则需要使用--permanent 选项,当然永久选项不直接影响运行时的状态,只有在增加 --permanent 选项并重新加载防火墙,永久选项才会生效

用法:将--permanent设置为第一个参数,即可将临时性的设置为永久性生效的配置

比如这条配置:firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.99.100

只需要加一个 “--permanent”参数即可设置为永久

firewall-cmd --permanent  --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.99.100

其他,比如服务配置,icmp阻塞等配置,都可以将--permanent设置为第一个参数,即可使这个设置永久保留

实验步骤三
firewalld高级配置


1、用 XML 文件配置防火墙

firewalld 的配置设定存储在/etc/firewalld/ 目录下的 XML 文件里。切勿编辑 /usr/lib/firewalld/ 目录下的文件,因为它们是为默认设定准备的.

三个操作手册对 XML 文件进行了解说:

firewalld.icmptype(5) 操作手册 — 描述了 ICMP 过滤的 XML 配置文件。

https://twoerner.fedorapeople.org/firewalld/doc/firewalld.icmptype.html

firewalld.service(5) 操作手册 — 描述了 firewalld service 的 XML 配置文件。

https://twoerner.fedorapeople.org/firewalld/doc/firewalld.service.html

firewalld.zone(5) 操作手册 — 描述了配置 firewalld 区域的 XML 配置文件。

https://twoerner.fedorapeople.org/firewalld/doc/firewalld.zones.html

我们来看一下XML文件的结构,以ssh服务为例:


可以看出每一个服务定义都需要一个简短的名字、描述和端口网络用于指定需要使用的协议、端口和模块名

以这个结构,我们来自定义一个服务配置

进入 /etc/firewalld/services目录

假设我们有一个ELK的服务,那么配置文件如下:


<?xml version="1.0" encoding="utf-8"?>

<service>

      <short>ELK</short>

      <description>Elasticsearch + Logstash + Kibana</description>

      <port port="9200" protocol="tcp"/>

</service>

接着我们使用firewall-cmd --reload生效,然后使用 firewall-cmd --get-services 查看服务列表,就能看到我们自定义的服务了


接着我们就可以添加服务到区域了。


2、firewalld直接接口(firewall-cmd --direct 命令)

可以使用 --direct 选项在运行时间里增加或者移除链,命令立刻生效,但重载后失效。传递的参数 <args> 与 iptables, ip6tables 以及 ebtables 一致。如果不熟悉 iptables ,使用直接接口非常危险,可能无意间导致防火墙被入侵。

增加一个自定义规则到 “INPUT” 链里:

firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m tcp -p tcp --dport 666 -j ACCEPT

列出INPUT链中的规则:

firewall-cmd --direct --get-rules ipv4 filter INPUT

移除规则使用:firewall-cmd --direct --remove-rule命令,比如移除刚刚我们自定义的规则:

firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -m tcp -p tcp --dport 666 -j ACCEPT

请查阅 firewall-cmd(1) 操作说明获取更多信息 

https://twoerner.fedorapeople.org/firewalld/doc/firewall-cmd.html

3、使用“Rich Language” 配置复杂防火墙规则

通过 “rich language” 语法,可以用比直接接口方式更易理解的方法建立复杂防火墙规则。此外,还能使用 –permanent参数永久保留设置。这种语言使用关键词值,是 iptables 工具的抽象表示。还可以用来配置分区,也仍然支持现行的配置方式,具有极强的灵活性。

Firewalld Rich Language 文档:

https://fedoraproject.org/wiki/Features/FirewalldRichLanguage/zh-cn

语法如下:

增加一项规则:firewall-cmd [--zone=zone] --add-rich-rule='rule'

移除一项规则:firewall-cmd [--zone=zone] --remove-rich-rule='rule'

检查一项规则是否存在:firewall-cmd [--zone=zone] --query-rich-rule='rule'

只允许从 192.168.99.100 到 web 服务器(80 号端口)的连接而阻塞 192.168.99.0/24 网络中的其它来源,该如何设置呢?

可以这样:

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.99.100/24" service name="http" accept'

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.99.0/24" service name="http" drop'

如果要永久生效可以添加 --permanent参数

Rich Language”多规则结构:

rule [family="<rule family>"]

    [ source address="<address>" [invert="True"] ]

    [ destination address="<address>" [invert="True"] ]

    [ <element> ]

    [ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ]

    [ audit ]

    [ accept|reject|drop ]


source

源地址

destination

目标地址

service

服务名称是 firewalld 提供的其中一种服务。命令为以下形式:

service name=service_name

port

可以是一个具体的端口,也可以是端口范围,例如,5060-5062。协议可以指定为 tcp 或 udp。命令为以下形式:

port port=number_or_range protocol=protocol

protocol

协议值可以是一个协议 ID 数字,或者一个协议名。预知可用协议,请查阅 /etc/protocols。命令为以下形式:

protocol value=protocol_name_or_ID

icmp-block

用这个命令阻绝一个或多个 ICMP 类型。 ICMP 类型是 firewalld 支持的 ICMP 类型之一。要获得被支持的 ICMP 类型列表,输入以下命令:

firewall-cmd --get-icmptypes

命令为以下形式:

icmp-block name=icmptype_name

masquerade

打开规则里的 IP 伪装。

forward-port

从一个带有指定为 tcp 或 udp 协议的本地端口转发数据包到另一个本地端口,或另一台机器,或另一台机器上的另一个端口。 port 和 to-port 可以是一个单独的端口数字,或一个端口范围。而目的地址是一个简单的 IP 地址。这个命令为以下形式:

forward-port port=number_or_range protocol=protocol /

     to-port=number_or_range to-addr=address

log

写入日志,等级可以是 emerg 、 alert 、 crit 、 error 、warning 、 notice、 info 或者 debug 中的一个。语法如下:

log [prefix=prefix text] [level=log level] limit value=rate/duration

日志等级用正的自然数 [1, ..] 表达,持续时间的单位为 s 、 m 、 h 、 d 。 s 表示秒, m 表示分钟, h 表示小时, d 表示天。最大限定值是 1/d ,意为每天最多有一条日志。

audit

审核为发送到 auditd 服务。审核类型可以是 ACCEPT 、 REJECT 或 DROP 中的一种,但不能在 audit 命令后指定,因为审核类型将会从规则动作中自动收集。审核不包含自身参数,但可以选择性地增加限制。审核的使用是可选择的。

accept|reject|drop

规则动作

accept | reject [type=reject type] | drop

选择 accept 所有新的连接请求都会被允许。选择 reject ,连接将被拒绝,连接来源将接到一个拒绝信息。选择 drop , 所有数据包会被丢弃,并且不会向来源地发送任何信息。

多规则登录命令使用示例1:

允许IPv4 和 IPv6 连接 FTP,并使用审核每分钟登录一次

rule service name="ftp" log limit value="1/m" audit accept

多规则登录命令使用示例2:

同意来自 192.168.0.0/24 网络的IP地址使用ipv4访问本机的http,并且每一分钟写入一次系统日志

rule family="ipv4" source address="192.168.0.0/24" service name="http" log prefix="http" level="info" limit value="1/m" accept

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

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

相关文章

redis命令大量超时 连接数突增

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一个线上线上redis命令大量超时&#xff0c;连接数突增的问题。由于不是我这边的业务&#xff0c;只能根据事后的一些客观数据进行分析。 配置&#xff1a; ​ redis 4.0 3主3从&#xff0c;总内存36G。 ​ 业务服务7台…

跨平台代码编写工具 Visual Studio Code

随着生产力的提高&#xff0c;生产工具也在不断的提高。 今天就介绍 目前最好用的工具 Visual Studio Code。 1. 入门 Visual Studio Code 是一款轻量级但功能强大的源代码编辑器&#xff0c;可在您的桌面上运行&#xff0c;适用于 Windows、macOS 和 Linux。它内置了对 Java…

蓝库云|制造业转型不可或缺的“PLM”的作用和真正价值

PLM是产品生命周期管理&#xff0c;是一种应用于在单一地点的企业内部、分散在多个地点的企业内部&#xff0c;以及在产品研发领域具有协作关系的企业之间的&#xff0c;支持产品全生命周期的信息的创建、管理、分发和应用的一系列应用解决方案&#xff0c;它能够集成与产品相关…

如何短期通过PMP考试?

PMP考试相比较其他考试&#xff0c;首先就是PMP是不卡通过率的&#xff0c;所以只要你做题的正确率上去了&#xff0c;那是有很大机会能通过考试的&#xff01;想要短期通过PMP考试&#xff0c;就得每天安排具体的任务&#xff0c;规划好&#xff0c;按计划去做。抓紧时间&…

QFramework框架学习

主要学习内容TypeEventSystemActionKitTimer类1、TypeEventSystem-适用于一个条件触发&#xff0c;多个组件响应的情况例如&#xff1a;动物园系统中&#xff0c;点击肉食动物按钮&#xff0c;动物园中有肉食属性的动物都进行显示。步骤&#xff1a;1、动物自身脚本上进行判断是…

产品的可持续发展

如今&#xff0c;产品的可持续性对于取得商业成功至关重要。越来越多的政府提出了相关的合规性要求&#xff0c;普通消费者也在翘首期待符合可持续性发展理念的产品上市。然而&#xff0c;许多企业面临的首要问题是如何确定他们的产品是否满足可持续性发展的要求。 毕竟&#x…

后量子 KEM 方案:LAC

参考文献&#xff1a; Lyubashevsky V, Peikert C, Regev O. On ideal lattices and learning with errors over rings[J]. Journal of the ACM (JACM), 2013, 60(6): 1-35.Lu X, Liu Y, Zhang Z, et al. LAC: Practical ring-LWE based public-key encryption with byte-leve…

java -数据结构,List相关基础知识,ArrayList的基本使用,泛型的简单、包装类介绍

一、 预备知识-泛型(Generic) 1.1、泛型的引入 比如&#xff1a;我们实现一个简单的顺序表 class MyArrayList{public int[] elem;public int usedSize;public MyArrayList(){this.elem new int[10];}public void add(int key){this.elem[usedSize] key;usedSize;}public …

Ethercat系列(4)Twcat3激活配置过程的协议分析

广播设置ESC的4个端口环路设置从-》主广播读从站状态机实际状态主-》从从-》主广播清除接收错误计数器0x300且读应用层状态从-》主顺序读从站基本信息&#xff0c;链路层配置与状态从-》主广播读从站状态机状态主-》从从-》主顺序写ESC控制模式&#xff0c;广播读从站状态主-》…

一、图机器学习导论【CS224W】(Datawhale组队学习)

开源内容&#xff1a;https://github.com/TommyZihao/zihao_course/tree/main/CS224W 子豪兄B 站视频&#xff1a;https://space.bilibili.com/1900783/channel/collectiondetail?sid915098 斯坦福官方课程主页&#xff1a;https://web.stanford.edu/class/cs224w 文章目录前…

C++中的标准输入和输出

一、 C 输入输出的含义 在C语言中我们的输入和输出都是以printf和scanf进行操作的。他们都是函数。在C中的我们的输入输出都是以终端为对象的&#xff0c;即从键盘输入数据&#xff0c;运行结果输出到显示器屏幕上。从操作系统(Linux)的角度看&#xff0c;每一个与主机相连的输…

RKE2部署高可用Rancher v2.7.1

先决条件 注意修改主机名&#xff0c;不要有冲突 第一个server节点安装 官方文档的描述感觉对于新手来说太不友好了&#xff0c;建议以下链接都看一下。Rancher新老文档都建议看一下&#xff0c;不然刚刚入门很蒙。 RKE2快速开始&#xff1a;https://docs.rke2.io/zh/install…

html+css综合练习一

文章目录一、小米注册页面1、要求2、案例图3、实现效果3.1、index.html3.2、style.css二、下午茶页面1、要求2、案例图3、index.html4、style.css三、法国巴黎页面1、要求2、案例图3、index.html4、style.css一、小米注册页面 1、要求 阅读下列说明、效果图&#xff0c;进行静…

由浅入深,聊聊OkHttp的那些事(很长,很细节)

引言 在 Android 开发的世界中&#xff0c;有一些组件&#xff0c;无论应用层技术再怎么迭代&#xff0c;作为基础支持&#xff0c;它们依然在那里。 比如当我们提到网络库时&#xff0c;总会下意识想到一个名字&#xff0c;即 OkHttp 。 尽管对于大多数开发者而言&#xff0…

spark02-内存数据分区分配原理

代码&#xff1a;val conf: SparkConf new SparkConf().setMaster("local[*]").setAppName("wordcount") val scnew SparkContext(conf) //[1] [2,3] [4,5] val rdd: RDD[Int] sc.makeRDD(List(1,2,3,4,5),3) //将处理的数据保存分区文件 rdd.saveAsText…

【Apifox Helper】自动生成接口文档,IDEA+Apifox懒人必备

文章目录前言&#x1f34a;缘由接口文档对接爽&#xff0c;整理起来真费脑⏲️本文阅读时长约10分钟&#x1f96e;前置条件1. IDEA开发工具2. Apifox(不必要)&#x1f3af;主要目标一秒生成接口文档&#x1f369;水图IDEA中项目接结构图生成到Apifox接口文档图&#x1f468;‍&…

Django框架之模板系列

模板 思考 : 网站如何向客户端返回一个漂亮的页面呢&#xff1f; 提示 : 漂亮的页面需要html、css、js.可以把这一堆字段串全都写到视图中, 作为HttpResponse()的参数,响应给客户端. 问题 : 视图部分代码臃肿, 耦合度高.这样定义的字符串是不会出任何效果和错误的.效果无法及时…

论文投稿指南——中文核心期刊推荐(矿业工程)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

springMVC概念(第一个入门案例)

目录 一、概念 1.什么是mvc&#xff1f; 2.mvc的工作流程&#xff1f; 3.什么是springMVC&#xff1f; 4.springMVC的特点 二、入门案例 准备工作&#xff1a; 正式代码例子 &#xff1a; 一、概念 1.什么是mvc&#xff1f; 答&#xff1a;MVC是一种软件架构的思想&a…

leaflet 上传包含shp的zip文件,在map上解析显示图形(059)

第059个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包含shp的zip文件,利用shapefile读取shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果加载shapefile.js方式安装引用jszip(…