当前位置: 首页 > news >正文

firewalld(8) policies

简介

前面的文章中我们介绍了firewalld的一些基本配置以及NAT的相关配置。在前面的配置中,我们所有的策略都是与zone相关的,例如配置的rich rule,--direct,以及NAT,并且这些配置都是数据包进入zone或者从zone发出时设置的策略。

我们在介绍firewalld的基本原理时候就介绍过,firewalld zone处理数据时的一些原则,更加详细的内容在firewalld(1)基本原理中都有介绍。本篇文章主要介绍firewalld的policies,即如何管理进入和离开某个区域的流量。

firewalld中,策略(Policies)是一种用于在防火墙的不同区域(Zones)之间应用一系列规则的方法。每个策略都定义了一组入口区域(Ingress Zones)和一组出口区域(Egress Zones),这些区域之间的流量将受到策略中定义的规则的影响。

策略policies

策略是一系列规则的集合,这些规则应用于在两个或多个区域之间流动的流量。策略以有状态的单向方式影响流量,例如从区域A到区域B。这种设计允许实现异步的过滤策略。

策略与区域的关系

策略通过指定一组入口区域和一组出口区域来定义与区域的关系。例如,如果入口区域包含“trusted”且出口区域包含“public”,则该策略将影响从“trusted”区域流向“public”区域的所有流量。但需要注意,由于策略是单向的,因此它不会应用于从“public”到“trusted”的流量。入口和出口区域集合中可以包含多个区域。

策略与区域的主要区别

尽管策略和区域在功能上有所重叠,但它们之间存在一些关键的区别:

  1. 方向性:策略允许在所有方向上进行过滤:输入(input)、输出(output)和转发(forwarding)。相比之下,区域通常只支持输入过滤,这对于终端站点的防火墙来说是足够的。但是,对于网络级别的过滤或代表虚拟机和容器进行的过滤,需要更灵活的东西,即策略。

  2. 灵活性:策略提供了更高的灵活性,允许根据流量流动的特定方向来定义规则。

  3. 内部实现:现代 firewalld 中的区域实际上是作为策略集合来内部实现的。这意味着区域可以看作是策略的一种特殊形式或子集。

激活策略的条件

策略只有满足以下条件时才会生效:

  1. 入口区域列表:至少包含一个常规区域或单个符号区域。
  2. 出口区域列表:至少包含一个常规区域或单个符号区域。
  3. 非符号区域的激活状态:对于非符号区域,该区域必须处于激活状态,即必须有接口或源被分配给它。

如果策略未激活,则它不会产生任何效果。

符号区域

firewalld中,除了常规的区域(如publicinternal等)外,还定义了一些符号区域来填补特定场景下的需求。这些符号区域在处理数据包过滤时具有独特的用途和限制。。例如,没有区域能表示流向或来自运行firewalld的主机的流量。因此,引入了一些符号区域来填补这些空白。但符号区域在入口或出口区域集合中是唯一的,例如,不能在入口区域中同时使用“public”和“HOST”。

符号区域包括:

  • HOST
    • 此符号区域用于流向或从运行firewalld的主机流出的流量。这对应于netfilter(iptables/nftables)的INPUT和OUTPUT链。
      • 在入站区域列表中:当HOST用于入站区域列表时,它实际上应用于OUTPUT链。这意味着它过滤的是由主机自身发出的流量。尽管这里提到的是“入站”,但在这个上下文中,它是指从主机视角出发的“出站”流量,即主机发出的流量。
      • 在出站区域列表中:当HOST用于出站区域列表时,它实际上应用于INPUT链。这看起来有些反直觉,因为“出站”通常指的是离开主机的流量,但在这里,它是指进入主机的流量(从主机防火墙的视角来看)。也就是说,它过滤的是进入主机的流量。
  • ANY
    • ANY符号区域在入站和出站区域中充当通配符的角色,但不包括HOST区域。它在你希望某个策略应用于除了主机自身以外的所有区域时非常有用。
      • 在入站区域列表中:当ANY用于入站区域列表时,它适用于来自任何区域(除了主机自身)的流量。这意呀着它过滤的是进入主机的外部流量。
      • 在出站区域列表中:当ANY用于出站区域列表时,它适用于离开主机前往任何区域(除了主机自身)的流量。这意呀着它过滤的是从主机发出的、前往外部目标的流量。

预定义策略

防火墙附带了一些预定义的策略。默认情况下,这些选项可能是活动的,也可能不是活动的。

例如默认的预定义策略
allow-host-ipv6

policy配置文件结构

文件位置

  • 用户自定义策略:通常存放在 /etc/firewalld/policies/ 目录下。这里的策略文件是用户可以自定义和修改的。
  • 系统默认策略:可能存放在 /usr/lib/firewalld/policies/ 目录下。这些策略文件通常是系统预定义的,用户不应直接修改它们,除非有特殊需要并且了解可能的影响。

文件命名

策略文件的命名规则是 policy_name.xml,其中 policy_name 是策略的名称这个命名规则确保了文件名在系统中的唯一性,并简化了策略的识别和管理。

命令结构

<?xml version="1.0" encoding="utf-8"?>
<policy [version="versionstring"] [target="CONTINUE|ACCEPT|REJECT|DROP"] [priority="priority"]>[ <ingress-zone name="zone"/> ][ <egress-zone name="zone"/> ][ <short>short description</short> ][ <description>description</description> ][ <service name="string"/> ][ <port port="portid[-portid]" protocol="tcp|udp|sctp|dccp"/> ][ <protocol value="protocol"/> ][ <icmp-block name="string"/> ][ <masquerade/> ][ <forward-port port="portid[-portid]" protocol="tcp|udp|sctp|dccp" [to-port="portid[-portid]"] [to-addr="IP address"]/> ][ <source-port port="portid[-portid]" protocol="tcp|udp|sctp|dccp"/> ][<rule [family="ipv4|ipv6"] [priority="priority"]>[ <source address="address[/mask]"|mac="MAC"|ipset="ipset" [invert="True"]/> ][ <destination address="address[/mask]"|ipset="ipset" [invert="True"]/> ][<service name="string"/> |<port port="portid[-portid]" protocol="tcp|udp|sctp|dccp"/> |<protocol value="protocol"/> |<icmp-block name="icmptype"/> |<icmp-type name="icmptype"/> |<masquerade/> |<forward-port port="portid[-portid]" protocol="tcp|udp|sctp|dccp" [to-port="portid[-portid]"] [to-addr="address"]/>][<log [prefix="prefix text"] [level="emerg|alert|crit|err|warn|notice|info|debug"]> [<limit value="rate/duration"/>] </log> |<nflog [group="group id"] [prefix="prefix text"] [queue-size="threshold"]> [<limit value="rate/duration"/>] </nflog>][ <audit> [<limit value="rate/duration"/>] </audit> ][<accept> [<limit value="rate/duration"/>] </accept> |<reject [type="rejecttype"]> [<limit value="rate/duration"/>] </reject> |<drop> [<limit value="rate/duration"/>] </drop> |<mark set="mark[/mask]"> [<limit value="rate/duration"/>] </mark>]</rule>]</policy>
<policy> 标签
必需:这个标签定义了策略的开始和结束,每个策略配置文件中只能使用一次。可选属性:version="string":为策略指定一个版本号。target="CONTINUE|ACCEPT|REJECT|DROP":指定不匹配任何规则(如端口、服务等)的数据包的处理方式。CONTINUE 是默认值,用于非终端策略;ACCEPT 接受数据包;REJECT 拒绝数据包并发送一个响应;DROP 丢弃数据包且不发送任何响应。<ingress-zone> 和 <egress-zone> 标签
可选:这两个标签可以多次使用,分别指定入站和出站流量的防火墙区域。它们可以是 firewalld 的区域名称之一,或者是符号区域 HOST 或 ANY。<short> 标签
可选:这是一个可选的开始和结束标签,用于为策略提供一个更易读的名称。<description> 标签
可选:这也是一个可选的开始和结束标签,用于提供策略的详细描述。<service> 标签
可选:这是一个空元素标签,可以多次使用以启用多个服务条目。必需属性:name="string":要启用的服务的名称。可以使用 firewall-cmd --get-services 命令获取有效的服务名称列表。<port> 标签
可选:这也是一个空元素标签,可以多次使用以定义多个端口条目。必需属性:port="portid[-portid]":指定端口号,可以是单个端口号 portid 或端口范围 portid-portid。protocol="tcp|udp|sctp|dccp":指定协议类型,可以是 tcp、udp、sctp 或 dccp。<protocol> 标签
可选:这是一个空元素标签,可以多次使用以定义多个协议条目。必需属性:value="string":这是一个必需的属性,指定了系统支持的任何协议。要查看系统支持的协议列表,可以查看 /etc/protocols 文件。<icmp-block> 标签
可选:这也是一个空元素标签,可以多次使用以定义多个 ICMP 阻塞条目。必需属性:name="string":这是一个必需的属性,指定了要阻塞的 Internet Control Message Protocol (ICMP) 消息类型的名称。可以使用 firewall-cmd --get-icmptypes 命令获取有效的 ICMP 类型列表。<tcp-mss-clamp> 标签
可选:这是一个空元素标签,可以多次使用(尽管在实践中,通常只设置一次 TCP MSS Clamp 的值)。必需属性:value="string":这是一个可选的属性。如果留空,则最大段大小(MSS)将设置为“pmtu”(路径最大传输单元)。如果设置了该属性,其值可以是“pmtu”或用户定义的值(该值应大于或等于 536)。TCP MSS Clamp 用于限制 TCP 数据包的最大段大小,这有助于避免在具有较小 MTU(最大传输单元)的网络路径上发生分片。<masquerade> 标签
可选:这是一个空元素标签,用于启用地址伪装(也称为网络地址转换,NAT)。
限制:这个标签只能使用一次。如果出现在配置文件中,则表示启用了地址伪装。地址伪装允许内部网络(私有地址空间)的设备通过防火墙访问外部网络(公共地址空间),同时隐藏它们的真实 IP 地址。<forward-port> 标签
可选:这是一个空元素标签,可以多次使用以定义多个端口或数据包转发条目。强制属性:port="portid[-portid]":指定要转发的本地端口。这可以是一个单独的端口号(portid)或一个端口范围(portid-portid)。
protocol="tcp|udp|sctp|dccp":指定协议类型,可以是 tcp、udp、sctp 或 dccp。可选属性:to-port="portid[-portid]":指定转发到的目标端口或端口范围。如果省略,则使用 port= 属性的值。to-addr="address":指定目标 IP 地址,用于远程转发。这可以是 IPv4 或 IPv6 地址。
<forward-port> 标签允许配置本地或远程端口转发。对于本地转发,通常只需指定 to-port(如果目标端口与源端口不同)。对于远程转发,需要指定 to-addr 和可选的 to-port。<source-port> 标签
可选:这是一个空元素标签,可以多次使用以定义多个源端口条目。所有属性都是强制的:port="portid[-portid]":指定源端口或端口范围。protocol="tcp|udp|sctp|dccp":指定协议类型。

rich rule命令结构

<rule [family="ipv4|ipv6"] [priority="priority"]>[ <source address="address[/mask]"|mac="MAC"|ipset="ipset" [invert="True"]/> ][ <destination address="address[/mask]"|ipset="ipset" [invert="True"]/> ][<service name="string"/> |<port port="portid[-portid]" protocol="tcp|udp|sctp|dccp"/> |<protocol value="protocol"/> |<icmp-block name="icmptype"/> |<icmp-type name="icmptype"/> |<masquerade/> |<forward-port port="portid[-portid]" protocol="tcp|udp|sctp|dccp" [to-port="portid[-portid]"] [to-addr="address"]/> |<source-port port="portid[-portid]" protocol="tcp|udp|sctp|dccp"/> |][ <log [prefix="prefix text"] [level="emerg|alert|crit|err|warn|notice|info|debug"]> [<limit value="rate/duration"/>] </log> |<nflog [group="group id"] [prefix="prefix text"] [queue-size="threshold"]> [<limit value="rate/duration"/>] </nflog>][ <audit> [<limit value="rate/duration"/>] </audit> ][<accept> [<limit value="rate/duration"/>] </accept> |<reject [type="rejecttype"]> [<limit value="rate/duration"/>] </reject> |<drop> [<limit value="rate/duration"/>] </drop> |<mark set="mark[/mask]"> [<limit value="rate/duration"/>] </mark>]
</rule>

以上的内容和参数在我们介绍各部分功能时都有对应的介绍,这里可以再次回顾一下firewalld-cmd的命令结构。

实验环境

配置环境和前面所介绍的环境一致。

和我们在做iptables网络防火墙以及rich rule时的环境是一模一样,内部区域为192.168.140.0/24网段,firewalld配置在主机B上,分为内部trusted区域,和外部public区域。其中主机A的网关是主机B 192.168.140.250,主机B的网关是主机C模拟的公网192.168.170.128。
​​​​​

清除除前面配置的安全策略,可以直接编辑?etc/firewalld/下面的文件进行删除,如我们前面配置的trusted.xml,public.xml,direct.xml文件

查看结果

此时除了接口加入到对应的zone和public zone开启了masquerade外,其他安全策略均已经被删除

测试

此时我们的主机A是可以访问主机C的

主机A可以正常访问主机C

配置policy

firewall-cmd --permanent --new-policy myOutputPolicy
firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone 
firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone 

创建策略

我这里创建一个policy名为trusted-to-public。注意,此时policy的优先级为-1,默认的那个是-15000,target是CONTINUE

设置策略默认动作

将该policy的默认动作改为ACCEPT模式,即为黑名单模式,默认放行所有,然后在前面设置禁止策略。也可以改为白名单模式,默认禁止所有,可以根据自己的需求进行自定义。下面是可以设置的动作类型
ACCEPT: 允许数据包通过防火墙,不会对其进行任何处理或过滤。CONTINUE: 与 ACCEPT 类似,但继续查看下一个规则进行匹配,而不是停止执行规则集。DROP: 静默丢弃数据包,不给发送方任何响应,也不通知接收方数据包未到达目的地。REJECT: 拒绝数据包,并向发送端发出拒绝通知,告知其连接被主机拒绝

修改策略优先级

数值越小优先级越高

设置policy中的策略

在配置policy的策略的时候,会发现其实policy的策略和我们前面配置的zone的策略非常的相似的,只不过一个是在zone中配置策略,一个是在policy中配置策略

我这里配置策略,拒绝从192.168.140.248即主机A来的数据包去ping 192.168.170.128即主机C其他可以正常访问,那么策略该如何设置呢?因为要设置具体的源和目的地,我们可以通过rich rule来配置。rich rule在firewalld中是非常重要的,因为很多复杂的策略都是通过rich rule来完成的。

如上图所示,reject从192.168.140.248-192.168.170.128的icmp流量

策略与zone关联

将该policy应用到对应的zone中,一定要注意方向,如果方向和自己定义的rich rule不匹配,那么该条策略也是不会生效的。此时在zone中,并没有其他显示信息。

测试

此时主机A ping主机C因为我们策略的动作是Reject所以会显示不可达。
但是http还是可以正常访问的。

需求1

前面我们介绍了普通区域之间的策略,那么现在有一个需求,阻止从任何区域到我们本机的icmp数据包。也就是不允许从任何区域对我们主机进行ping操作。这个我们应该如何实现呢,可以配置我们前面介绍的irch rule,然后将该规则配置到我们所有的区域上,这样从任何区域来的icmp数据包都会被阻止。那么还有其他方式吗?

注意该规则前面应该都很好理解,注意最后调用的区域,--add-egress-zone=HOST,这个HOST的含义在前面我们有专门介绍,在这里虽然调用在egress-zone其实是应用在INPUT链上的。我们可以看看如下显示
root@debian:~# iptables -nvL   IN_any-to-local
Chain IN_any-to-local (2 references)pkts bytes target     prot opt in     out     source               destination206 17608 IN_any-to-local_pre  0    --  *      *       0.0.0.0/0            0.0.0.0/02   472 IN_any-to-local_log  0    --  *      *       0.0.0.0/0            0.0.0.0/02   472 IN_any-to-local_deny  0    --  *      *       0.0.0.0/0            0.0.0.0/02   472 IN_any-to-local_allow  0    --  *      *       0.0.0.0/0            0.0.0.0/02   472 IN_any-to-local_post  0    --  *      *       0.0.0.0/0            0.0.0.0/02   472 ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0
root@debian:~# iptables -nvL  INPUT_POLICIES_pre
Chain INPUT_POLICIES_pre (3 references)pkts bytes target     prot opt in     out     source               destination241 20548 IN_allow-host-ipv6  0    --  *      *       0.0.0.0/0            0.0.0.0/0202 16968 IN_any-to-local  0    --  ens36  *       0.0.0.0/0            0.0.0.0/00     0 IN_any-to-local  0    --  ens33  *       0.0.0.0/0            0.0.0.0/0
root@debian:~# iptables -nvL  IN_trusted
Chain IN_trusted (1 references)pkts bytes target     prot opt in     out     source               destination28  2352 INPUT_POLICIES_pre  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 IN_trusted_pre  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 IN_trusted_log  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 IN_trusted_deny  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 IN_trusted_allow  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 IN_trusted_post  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 INPUT_POLICIES_post  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0
root@debian:~# iptables -nvL  INPUT_ZONES
Chain INPUT_ZONES (1 references)pkts bytes target     prot opt in     out     source               destination28  2352 IN_trusted  0    --  ens33  *       0.0.0.0/0            0.0.0.0/0           [goto]435 36844 IN_public  0    --  ens36  *       0.0.0.0/0            0.0.0.0/0           [goto]0     0 IN_block   0    --  *      *       0.0.0.0/0            0.0.0.0/0           [goto]
root@debian:~# iptables -nvL  INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target     prot opt in     out     source               destination523 35381 ACCEPT     0    --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED,DNAT0     0 ACCEPT     0    --  lo     *       0.0.0.0/0            0.0.0.0/00     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID477 40372 INPUT_direct  0    --  *      *       0.0.0.0/0            0.0.0.0/0477 40372 INPUT_ZONES  0    --  *      *       0.0.0.0/0            0.0.0.0/00     0 REJECT     0    --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
root@debian:~#

 我们配置的策略是在IN_any-to-local_pre-------->IN_any-to-local-------->INPUT_POLICIES_pre------->IN_trusted------->INPUT_ZONE-------->INPUT

测试

192.168.170.200在public此时已经无法ping通了

 

此时从主机Aping,192.168.140.250是在trusted区域,也是无法ping通的

注意:

此时从主机B去ping主机A和主机C能否ping通呢?

此时可以ping通,因为我们配置的policy是有方向性的,在策略调用的时候一定要注意策略配置的方向和调用的方向保持一致。

需求2

        在需求1中我们用HOST过滤了从外部任何区域来的到达本机的icmp流量。那么此时我想要过滤任何从本机发出的http流量应该如何做呢?也就是说从本机发出的,目的地址是80端口的不管从那个区域发出,都是不允许的。

先定义一个策略名为local-to-public,注意这个public只是一个名字,与public区域无关。名字可以根据自己的需求自行设置,所有http服务全部被reject
将该策略应用到ingress-zone位HOST,HOST在ingress zone意味着,从本机发出的流量,而egress是ANY表示任何区域。那么该策略的含义就为从本机发出的http流量都会被reject。HOST和ANY在上面有具体的介绍,需要多理解多测试便可以充分掌握这两个参数的含义。

测试

此时主机B已经不能发起任何http流量了
主机A访问主机C的80端口依旧可以正常访问。

总结

通过使用policy我们可以设置基于zone之间的安全策略,并且可以将不同的应用进行整合,不同的应用类型设置不通的policy,提升策略的灵活度。可以根据自己的需求,自定义自己的安全策略模式和风格,这样当策略数量非常庞大且复杂的时候,可以极大的提升策略的可视化程度,提升管理效率。

相关文章:

firewalld(8) policies

简介 前面的文章中我们介绍了firewalld的一些基本配置以及NAT的相关配置。在前面的配置中&#xff0c;我们所有的策略都是与zone相关的&#xff0c;例如配置的rich rule&#xff0c;--direct,以及NAT,并且这些配置都是数据包进入zone或者从zone发出时设置的策略。 我们在介绍…...

为什么进口主食冻干那么高贵?必入榜主食冻干总结分享

新手养猫人常常会有这样的疑问&#xff1a;为何进口主食冻干价格如此昂贵&#xff0c;但仍有大量养猫达人对其推崇备至&#xff1f;与国产主食冻干相比&#xff0c;进口产品的价格高出3-4倍之多&#xff0c;那么这高昂的价格背后&#xff0c;进口主食冻干是否真的值得推荐&…...

状态模式在金融业务中的应用及其框架实现

引言 状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。状态模式通过将状态的相关行为分离到独立的状态类中&#xff0c;使得状态转换更加明确和简洁。在金融业务中&#xff0c;状态模式可以用于实现交易状…...

redis学习(002 安装redis和客户端)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第5p-第p7的内容 文章目录 安装redis启动启动方式1&#xff1a;可执行文件启动启动方式2 基于配置文件启动修改redis配置文件 …...

在线客服系统多国语言,适合跨境外贸业务对外沟通 ,哈萨克语客服系统,根据浏览器语种标识自动切换...

我们看一下我们客服系统的哈萨克语展示。 演示网站&#xff1a;gofly.v1kf.com 有个客户&#xff0c;他们的业务主要是位于哈萨克斯坦&#xff0c;需求是访客端使用哈萨克语来展示。 现在这个界面就是哈萨克语的。当然&#xff0c;也可以切换成中文。界面上的文案已经切换成中文…...

等保2.0是否强制要求所有物联网设备都必须支持自动更新?

等保2.0对物联网设备自动更新的要求 等保2.0&#xff08;网络安全等级保护2.0&#xff09;是中国政府为了加强网络安全而推出的一套标准和要求。在物联网设备的安全管理方面&#xff0c;等保2.0确实提出了一系列措施&#xff0c;以确保设备的软件安全更新。这些措施包括&#…...

gin框架解决跨域问题

文章目录 前言一、使用github.com/gin-contrib/cors 前言 今天遇到了前后端跨域问题&#xff0c;前后端跨域解决蛮简单的&#xff0c;下面是解决方案 一、使用github.com/gin-contrib/cors go get github.com/gin-contrib/cors在路由的地方 r : gin.Default()corsConfig : c…...

4.判断登录用户选择按钮的展示

接着上一个文章&#xff0c;我们把按钮设置好了之后怎样可以做到登录的用户不同&#xff0c;选择展示的按钮不同&#xff1f; 我们可以从面向对象上手&#xff0c;例如获取到返回网站数据中&#xff0c;判断登录用户有特殊权限&#xff0c;就是管理员&#xff1a; # 1.判断登录…...

【硬核科普】存算一体化系统(Processing-in-Memory, PIM)深入解析

文章目录 0. 前言1. 提出背景1.1 存储墙1.2 功耗墙 2. 架构方案2.1 核心特征2.2 技术实现2.2.1 电流模式2.2.2 电压模式2.2.3 模式选择 2.3 PIM方案优势 3. 应用场景4. 典型产品4.1 鸿图H304.2 三星HBM-PIM 5. 存算一体化缺点6. 总结 0. 前言 按照国际惯例&#xff0c;首先声明…...

基于Java的壁纸网站设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

Zookeeper底层原理

ZooKeeper 是一个高可用的分布式协调服务&#xff0c;广泛应用于分布式系统中&#xff0c;用于解决分布式系统的一致性问题。下面将详细介绍 ZooKeeper 的底层原理&#xff0c;包括其架构、数据模型、核心机制和一致性协议等方面。 1. 架构 ZooKeeper 采用主从架构&#xff0…...

Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】

前言&#xff1a; 上一篇我们分析了 Spring Boot 事件监听的原理&#xff0c;本篇我们来自定义实现自己的监听器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; Spring Boot 启动流程源码分析&#xff08;2&#xff09; Spring Bo…...

AIGC笔记--Stable Diffusion源码剖析之DDIM

1--前言 以论文《High-Resolution Image Synthesis with Latent Diffusion Models》 开源的项目为例&#xff0c;剖析Stable Diffusion经典组成部分&#xff0c;巩固学习加深印象。 2--DDIM 一个可以debug的小demo&#xff1a;SD_DDIM 以文生图为例&#xff0c;剖析SD中DDIM的…...

【BUUCTF-PWN】13-jarvisoj_level2_x64

参考&#xff1a;BUU pwn jarvisoj_level2_x64 64位函数调用栈 - Nemuzuki - 博客园 (cnblogs.com) 64位&#xff0c;开启了NX保护 执行效果如下&#xff1a; main函数&#xff1a; vulnerable_function函数 read函数存在栈溢出&#xff0c;溢出距离为0x808 查找后门…...

项目实战--Spring Boot 3整合Flink实现大数据文件处理

一、应用背景 公司大数据项目中&#xff0c;需要构建和开发高效、可靠的数据处理子系统&#xff0c;实现大数据文件处理、整库迁移、延迟与乱序处理、数据清洗与过滤、实时数据聚合、增量同步&#xff08;CDC&#xff09;、状态管理与恢复、反压问题处理、数据分库分表、跨数据…...

开发者工具攻略:前端测试的极简指南

前言 许多人存在一个常见的误区&#xff0c;认为测试只是测试工程师的工作。实际上&#xff0c;测试是整个开发团队的责任&#xff0c;每个人都应该参与到测试过程中。 在这篇博客我尽量通俗一点地讲讲我们前端开发过程中&#xff0c;该如何去测试 浏览器开发者工具简介 开…...

git保存分支工作状态

git stash...

系统架构设计师——计算机体系结构

分值占比3-4分 计算机硬件组成 计算机硬件组成主要包括主机、存储器和输入/输出设备。 主机&#xff1a;主机是计算机的核心部分&#xff0c;包括运算器、控制器、主存等组件。运算器负责执行算术和逻辑运算&#xff1b;控制器负责协调和控制计算机的各个部件&#xff1b;主存…...

3D鸡哥又上开源项目!单图即可生成,在线可玩

大家好&#xff0c;今天和大家分享几篇最新的工作 1、Unique3D Unique3D从单视图图像高效生成高质量3D网格&#xff0c;具有SOTA水平的保真度和强大的通用性。 如下图所示 Unique3D 在 30 秒内从单视图野生图像生成高保真且多样化的纹理网格。 例如属于一张鸡哥的打球写真照 等…...

设计模式实现思路介绍

设计模式是在软件工程中用于解决特定问题的典型解决方案。它们是在多年的软件开发实践中总结出来的&#xff0c;并且因其重用性、通用性和高效性而被广泛接受。设计模式通常被分为三种主要类型&#xff1a;创建型、结构型和行为型。 创建型设计模式 创建型设计模式专注于如何创…...

Node.js学习教程

Node.js学习教程可以从基础到高级&#xff0c;逐步深入理解和掌握这一强大的JavaScript运行环境。以下是一个详细的Node.js学习教程概述&#xff0c;帮助初学者和进阶者更好地学习Node.js。 一、Node.js基础入门 1. 了解Node.js 定义&#xff1a;Node.js是一个基于Chrome V8…...

项目页面优化,我们该怎么做呢?

避免页面卡顿 怎么衡量页面卡顿的情况呢&#xff1f; 失帧和帧率FPS 60Hz就是帧率fps&#xff0c;即一秒钟60帧&#xff0c;换句话说&#xff0c;一秒钟的动画是由60幅静态图片连在一起形成的。 卡了&#xff0c;失帧了&#xff0c;或者掉帧了&#xff0c;一秒钟没有60个画面&…...

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …...

Linux shell编程学习笔记62: top命令 linux下的任务管理器

0 前言 top命令是Unix 和 Linux下常用的性能分析工具&#xff0c;提供了一个动态的、交互式的实时视图&#xff0c;显示系统的整体性能信息&#xff0c;以及正在运行的进程的相关信息&#xff0c;包括各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器。 1 top命令…...

如何在Java中实现高性能的网络通信

如何在Java中实现高性能的网络通信 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在当今互联网时代&#xff0c;高性能的网络通信是构建大规模分布…...

政务单位网站SSL证书选择策略

在数字化快速发展的今天&#xff0c;政务单位网站作为政府与公众沟通的重要桥梁&#xff0c;其安全性和可信度显得尤为重要。SSL证书作为保障网站安全的重要手段&#xff0c;其选择对于政务单位网站来说至关重要。本文将探讨政务单位网站在选择SSL证书时应该考虑的因素&#xf…...

零基础入门 Ai 数据挖掘竞赛-速通 Baseline-1

#AI夏令营 #Datawhale #夏令营 本项目为Datawhale 2024 年 AI 夏令营赛事&#xff0c;零基础入门 AI 数据挖掘竞赛-速通学习手册配套的代码项目。 项目链接&#xff1a;https://aistudio.baidu.com/bd-cpu-02/user/2961857/8113198/home#codelab 任务目标 根据给的test&…...

第二十六章 生成器(generator)(Python)

文章目录 前言一、生成器函数 前言 在 Python 中&#xff0c;使用了 yield 的函数被称为生成器&#xff08;generator&#xff09; yield 是一个关键字&#xff0c;用于定义生成器函数&#xff0c;生成器函数是一种特殊的函数&#xff0c;可以在迭代过程中逐步产生值&#xff…...

Vue通过Key管理状态

Vue通过Key管理状态 Vue 默认按照“就地更新”的策略来更新&#xff0c;通过 v-for 渲染的元素列表。当数据项的顺序改变时&#xff0c;Vue 不会随之移动 DOM 元素的顺序&#xff0c;而是就地更新每个元素&#xff0c;确保它们在原本指定的索引位置上渲染。为了给 Vue 一个提示…...

鸿蒙 HarmonyOs 网络请求 快速入门

官方文档&#xff1a; ArkUI简介-ArkUI&#xff08;方舟UI框架&#xff09;-应用框架 | 华为开发者联盟 (huawei.com) 一、通过原有的http组件进行网络请求&#xff08;方式一&#xff09; 1.1 HttpRequestOptions的操作 名称类型描述methodRequestMethod请求方式&#xff…...

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本(helm部署)

Kubernetes云原生存储解决方案openebs部署实践-4.0.1版本&#xff08;helm部署&#xff09; 简介 OpenEBS 是一种开源云原生存储解决方案。OpenEBS 可以将 Kubernetes 工作节点可用的任何存储转化为本地或复制的 Kubernetes 持久卷。OpenEBS 帮助应用和平台团队轻松地部署需要…...

如何使用Pip生成requirements.txt文件:全面指南与实践示例

如何使用Pip生成requirements.txt文件&#xff1a;全面指南与实践示例 Python的包管理工具Pip是Python开发中不可或缺的一部分。它不仅可以帮助我们安装和管理Python包&#xff0c;还可以通过生成requirements.txt文件来记录项目所需的所有依赖。本文将详细介绍如何使用Pip生成…...

微信小程序消息通知(一次订阅)

在微信公众平台配置通知模版 通过wx.login获取code发送给后端 let that this // 登陆codewx.login({success: function (res) {if (res.code) {// 发送code到后端换取openid和session_keythat.setData({openCode: res.code})console.log(that.data.openCode, openCode);// 调…...

电传动无杆飞机牵引车交付用户

自2019年起&#xff0c;我们计划做电传动控制&#xff0c;先后做了电传动水泥搅拌罐车罐体控制&#xff08;国内首创&#xff09;&#xff0c;初步理解了电机控制的特点。 20-21年接着做了10t飞机牵引车控制&#xff0c;还是电液控制联合的&#xff0c;把越野叉车的行驶控制方…...

react框架,使用vite和nextjs构建react项目

react框架 React 是一个用于构建用户界面(UI)的 JavaScript 库,它的本质作用是使用js动态的构建html页面&#xff0c;react的设计初衷就是为了更方便快捷的构建页面&#xff0c;官方并没有规定如何进行路由和数据获取&#xff0c;要构建一个完整的react项目&#xff0c;我们需要…...

Games101学习笔记 Lecture16 Ray Tracing 4 (Monte Carlo Path Tracing)

Lecture16 Ray Tracing 4 (Monte Carlo Path Tracing 一、蒙特卡洛积分 Monte Carlo Integration二、路径追踪 Path tracing1.Whitted-Style Ray Tracings Problems2.只考虑直接光照时3.考虑全局光照①考虑物体的反射光②俄罗斯轮盘赌 RR &#xff08;得到正确shade函数&#x…...

数据结构概念

文章目录 1. 概念 2. 数据结构和算法的关系 3. 内存 4. 数据的逻辑结构 5. 数据的存储结构 1. 顺序存储结构 2. 链式存储结构 3. 索引存储结构 4. 散列存储结构 6. 数据的运算 1. 概念 定义1&#xff08;宏观&#xff09;&#xff1a; 数据结构是为了高效访问数据而…...

Windows 下载安装ffmpeg

下载地址 https://ffmpeg.org/download.html 测试 管理员方式打开控制台&#xff0c;输入ffmpeg测试 配置环境变量...

Java AI 编程助手

Java AI 编程助手是指利用人工智能技术来增强和优化Java开发过程中的各种任务和活动。它可以涵盖从代码生成和分析到测试和优化的多个方面&#xff0c;帮助开发人员提高生产效率、降低错误率&#xff0c;并优化代码质量和性能。 ### 功能和特点 1. **智能代码生成和建议**&am…...

day10:01集合

1 作用 Python中的集合&#xff08;Set&#xff09;是一个无序的、不包含重复元素的容器。它主要用于去重、成员测试、以及执行数学上的集合运算&#xff08;如并集、交集、差集和对称差集&#xff09;等操作。集合的内部实现通常基于哈希表&#xff0c;这提供了快速的成员测试…...

03浅谈提示工程、RAG和微调

03浅谈提示工程、RAG和微调 提示词Prompt Prompt&#xff08;提示词&#xff09;是指在使用大模型时&#xff0c;向模型提供的一些指令或问题。这些指令作为模型的输入&#xff0c;引导模型产生所需要的输出。例如&#xff0c;在生成文本时&#xff0c;Prompt可能是一个问题或…...

硅纪元视角 | AI纳米机器人突破癌症治疗,精准打击肿瘤细胞

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…...

刷代码随想录有感(125):动态规划——最长公共子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>>dp(text1.size() 1, vector<int>(text2.size() 1, 0));for(int i 1; i < text1.size(); i){for(int j …...

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中&#xff08;不考虑缓存&#xff09; 任何程序在运行之前都的加入到内存。 eip->pc指针&#xff0c;指明当前指令在什么位置。 代码大概率是从上往下执行的&#xff0c;基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…...

ArcGIS Pro SDK (七)编辑 12 编辑模版

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 12 编辑模版 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 12 编辑模版1 在图层上按名称查找编辑模板2 查找属于独立表的表模板3 当前模板4 更改模板的默认编辑工具5 隐藏或显示模板上的编辑工具6 使用图层创建新模…...

数据结构底层之HashMap(面经篇1)

1 . 讲一下hashmap的数据结构 HashMap是一种基于哈希表实现的数据结构&#xff0c;通常用于关联键值对&#xff0c;其中键是唯一的&#xff0c;而值可以重复。在Java中&#xff0c;HashMap是java.util.Map接口的一个实现&#xff0c;它提供了快速的查找、插入和删除操作。 数据…...

昇思学习打卡-6-基于MindSpore的GPT2文本摘要

第一次近距离接触GPT&#xff0c;了解了tokenizers这个分词库&#xff0c;感觉NLP和CV对比起来&#xff0c;处理流程基本一致&#xff0c;都是数据集加载和处理&#xff0c;模型构建、选择学习率、模型训练&#xff0c;进而可以使用模型进行推理。 不同的是&#xff0c;NLP可能…...

代码随想录算法训练营第2天|LeetCode977,209,59

977.有序数组平方 题目链接&#xff1a; 977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a; 双指针法经典题目 | LeetCode&#xff1a;977.有序数组的平方_哔哩哔哩_bilibili 第一想法 暴力算法肯定是先将元素…...

Web前端开发——HTML快速入门

HTML&#xff1a;控制网页的结构CSS&#xff1a;控制网页的表现 一、什么是HTML、CSS &#xff08;1&#xff09;HTML &#xff08;HyperText Markup Languaqe&#xff1a;超文本标记语言&#xff09; 超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了…...

浅谈http协议及常见的面试题

1、浅谈http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;超文本传输协议&#xff0c;是互联网上应用最为广泛的一种网络协议&#xff0c;所有的WWW文件都必须遵守这个标准。它是基于TCP/IP通信协议来传递数据&#xff08;HTML文件、图片文件、查询结果等&am…...