文章目录

  • 一、firewalld基础知识
    • 1.1、firewalld基本介绍
    • 1.2、firewalld与iptables关系与区别
    • 1.3、firewalld默认策略
    • 1.4、firewalld配置模式
    • 1.5、firewalld配置方法
    • 1.6、firewalld区域概念
    • 1.7、firewalld基本指令参数
  • 二、firewalld区域配置策略
  • 三、firewalld服务配置策略
  • 四、firewalld端口配置策略
  • 五、firewalld富规则配置策略
  • 六、firewalld实现路由器功能
    • 6.1、firewalld实现SNAT
    • 6.2、firewalld实现DNAT
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?

一、firewalld基础知识

1.1、firewalld基本介绍

firewalld即Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器,是iptables的前端控制器,用于实现持久的网络流量规则。


1.2、firewalld与iptables关系与区别

1、firewalld与ipables都不是真正的防火墙,只是用来定义防火墙规则功能的管理工具,将定义好的规则交由内核中的netfilter来实现真正的防火墙功能。
2、在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。


与直接控制iptables相比,使用firewalld有两个主要区别:
1、firewalld使用区域和服务而不是链式规则。
2、firewalld默认是拒绝的,需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制。
3、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效。
4、iptables service在/etc/sysconfig/iptables中存储配置,而firewalld将配置存储在/usr/lib/firewalld/和/etc/firewalld/中的各种XML文件里。


1.3、firewalld默认策略


1.4、firewalld配置模式

firewall-cmd 命令工具有两种配置模式:

运行时规则(Runtime mode):表示当前内存中运行的防火墙配置,在系统或firewalld服务重启、停止时配置将失效。
永久规则(Permanent mode:表示重启防火墙或重新加载防火墙时的规则配置,是永久存储在配置文件中的。

firewall-cmd命令工具与配置模式相关的选项有三个。

--reload: 重新加载防火墙规则并保持状态信息,即将永久配置应用为运行时配置。
--permanent:带有此选项的命令用于设置永久性规则,这些规则只有在重新启动firewalld或重新加载防火墙规则时才会生效,若不带有此选项,表示用于设置运行时规则。
--runtime-to-permanent:将当前的运行时配置写入规则配置文件中,使之成为永久性配置。

1.5、firewalld配置方法

firewallD的配置方法主要有三种:

1、firewall-config
2、firewall-cmd
3、直接编辑xml文件

说明:其中firewall-config是图形化工具,firewall-cmd是命令行工具。


1.6、firewalld区域概念

通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。例如,互联网是不可信任的区域,而内部网络是高度信任的区域。网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化。该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。

查看所有的域

说明:firewalld的默认区域是public,firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,如下图所示:


1、block

block(限制):拒绝所有网络连接

如下图所示:


2、dmz

dmz(非军事区):仅接受ssh服务连接

如下图所示:


3、drop

drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。

如下图所示:


4、external

external(外部):出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接。

如下图所示:


5、home

home(家庭):用于家庭网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接。

如下图所示:


6、internal

internal(内部):用于内部网络,仅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接。

如下图所示:


7、public

public(公共):在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域。

如下图所示:


8、trusted

trusted(信任):可接受所有的网络连接

如下图所示:


9、work

work(工作):用于工作区,仅接受ssh或dhcpv6-client服务连接。

如下图所示:


1.7、firewalld基本指令参数

1、zone区域相关指令

firewall-cmd --get-default-zone        #查询默认的区域名称
firewall-cmd --set-default-zone=<zone> #设置默认的区域,使其永久生效
firewall-cmd --get-active-zones   #显示当前正在使用的区域与网卡名称
firewall-cmd --get-zones          #显示总共可用的区域
firewall-cmd --delete-zone=<zone> #删除指定域
firewall-cmd --new-zone=<zone> --permanent #创建指定域
firewall-cmd --zone=<zone> --list-all #查看指定域的详细信息
firewall-cmd --info-zone=<zone> #查看指定域的详细信息
firewall-cmd --list-all-zones   #查看所有域的详细信息

2、services服务相关指令

firewall-cmd --new-service=<service> --permanent #创建service
firewall-cmd --delete-service=<service> --permanent #删除service
firewall-cmd --info-service=<service> #查看指定服务的详细信息
firewall-cmd --service=<service> --set-description=<description> --permanent #设置指定服务的描述信息
firewall-cmd --service=<service> --get-description --permanent #查看指定服务的描述信息
firewall-cmd --service=<service> --set-short=<description> --permanent  #设置指定服务的描述信息
firewall-cmd --service=<service> --get-short --permanent #查看指定服务的描述信息
firewall-cmd --service=<service> --add-port=<portid>[-<portid>]/<protocol> --permanent #服务添加端口
firewall-cmd --service=<service> --remove-port=<portid>[-<portid>]/<protocol> --permanent #服务移除端口
firewall-cmd --service=<service> --query-port=<portid>[-<portid>]/<protocol> --permanent #查看服务指定端口
firewall-cmd --service=<service> --get-ports #查看服务所有端口
firewall-cmd --service=<service> --add-protocol=<protocol> --permanent #服务添加协议
firewall-cmd --service=<service> --remove-protocol=<protocol> --permanent #服务移除协议
firewall-cmd --service=<service> --query-protocol=<protocol> --permanent #查看服务指定协议
firewall-cmd --service=<service> --get-protocols --permanent #查看服务所有协议
firewall-cmd --service=<service> --add-source-port=<portid>[-<portid>]/<protocol> --permanent #服务添加源端口
firewall-cmd --service=<service> --remove-source-port=<portid>[-<portid>]/<protocol> --permanent #服务移除源端口
firewall-cmd --service=<service> --query-source-port=<portid>[-<portid>]/<protocol> --permanent #服务查看指定源端口
firewall-cmd --service=<service> --get-source-ports --permanent #服务查看所有源端口
firewall-cmd --service=<service> --set-destination=<ipv>:<address>[/<mask>] --permanent #服务添加访问的目标ip
firewall-cmd --service=<service> --remove-destination=<ipv> --permanent #服务移除访问的目标ip
firewall-cmd --service=<service> --query-destination=<ipv>:<address>[/<mask>] --permanent #服务查看指定的目标ip
firewall-cmd --service=<service> --get-destinations --permanent #服务查看所有目标ip

3、Port端口相关指令

firewall-cmd --list-ports        #查看默认区域所有端口
firewall-cmd --add-port=<portid>[-<portid>]/<protocol>  --permanent     #设置默认区域允许该端口
firewall-cmd --remove-port=<portid>[-<portid>]/<protocol>  --permanent  #移除默认区域允许该端口
firewall-cmd --query-port=<portid>[-<portid>]/<protocol> --permanent    #查看默认区域指定端口

4、Interface网卡相关指令

firewall-cmd --list-interfaces #查看默认区域网卡接口
firewall-cmd --add-interface=<interface> --permanent #将某个网卡绑定到某个指定区域
firewall-cmd --change-interface=<interface> #将某个网卡与区域进行关联
firewall-cmd --query-interface=<interface>
firewall-cmd --remove-interface=<interface>

5、其他相关指令

firewall-cmd --list-all  #显示当前区域的网卡配置参数、资源、端口以及服务等信息
firewall-cmd --reload   #让“永久生效”的配置规则立即生效,并覆盖当前的配置规则

二、firewalld区域配置策略

使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是192.168.1.0/24网段则允许。

1、查看默认使用区域及配置规则

1、通过--get-default-zone获取当前默认使用的区域
[root@snat zones]# firewall-cmd --get-default-zone
public2、.通过--list-all查看当前默认区域public配置了哪些规则
[root@snat zones]# firewall-cmd --zone=public --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens33 ens38sources: services: ssh dhcpv6-clientports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules:

2、使用firewalld各个区域规则结合配置,调整默认public区域拒绝所有流量,但如果来源IP是192.168.1.0/24网段则允许

1、临时移除默认区域的规则策略
[root@snat zones]# firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client
success2、添加来源是192.168.1.0/24网段,临时将其加入白名单(更精细化控制使用富规则)
[root@snat zones]# firewall-cmd --add-source=192.168.1.0/24 --zone=trusted
success3、检查当前活动的区域
[root@snat zones]# firewall-cmd --get-active-zone
publicinterfaces: ens33 ens38
trustedsources: 192.168.1.0/24

3、查询public区域是否允许请求ssh、dhcpv6-client服务的流量

[root@snat zones]# firewall-cmd --zone=public --query-service=ssh
no
[root@snat zones]# firewall-cmd --zone=public --query-service=dhcpv6-client
no

4、上述配置均为临时配置,使用firewall-cmd --reload临时配置会被清空

[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --get-active-zone
publicinterfaces: ens33 ens38

三、firewalld服务配置策略

为了方便管理,firewalld预先定义了很多服务,存放在/usr/lib/firewalld/services/目录中,服务通过单个的XML配置文件来指定。这些配置文件则按以下格式命名:service-name.xml,每个文件对应一项具体的网络服务,如ssh服务等。与之对应的配置文件中记录了各项服务所使用的tcp/udp端口,在最新版本的firewalld中默认已经定义了126多种服务供我们使用,对于每个网络区域,均可以配置允许访问的服务。

当默认提供的服务不适用或者需要自定义某项服务的端口时,我们需要将service配置文件放置在/etc/firewalld/services/目录中。

service配置具有以下优点:

1、通过服务名字来管理规则更加人性化
2、通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。

service文件中的标签解释:

1、version:version是service节点的一个可选属性,用于表示service的版本。
2、short:short在zone、icmptype等配置文件中也存在,其作用是简介,主要是让我们对所配置的内容有所了解,类似于注释的作用。
3、description:作用跟short相同,不过描述信息更加详细。
4、port:服务所对应的端口,这项是service中非常重要的一个配置项,大部分service主要就是对port进行绑定的,当一个service绑定了指定端口之后,该端口接收到的连接就会当成这个service,然后到所对应的zone中去查询规则,从而判断是否可以放行。port节点有两可个配置的属性:port和protocol
5、port属性:port用来配置所使用的端口号,可以是单个端口也可以是一个端口段,比如port=100-105表示100到105之间的端口号,另外,port属性是个可选属性,可以不进行设置。
6、protocol属性:protocol属性用于指定所对应的协议,如果port属性不为空,那么protocol应该设置为tcp或者udp,如果port属性为空(没设置),那么protocol可以设置为/etc/protocols中所包含的任意协议。
7、destination:destination非常简单,它就表示目标地址,也就是根据目标地址来绑定服务,他有两个属性:ipv4和ipv6,分别用于绑定ipv4和ipv6的地址,可以使用单个地址也可以使用掩码。另外,在一个service中destination最多只能出现一次。

这里就以Mysql服务为例,如下所示我这边使用docker部署了mysql服务,因为firewalld的防火墙规则默认是拒绝的,启动firewalld防火墙使用客户端工具无法连接,现在对mysql服务进行配置防火墙规则,允许客户端用户可以连接Mysql服务。

操作步骤如下:

1、编辑配置mysql服务

[root@snat firewalld]# cp /usr/lib/firewalld/services/mysql.xml /etc/firewalld/services/
[root@snat services]# vim /etc/firewalld/services/mysql.xml
<?xml version="1.0" encoding="utf-8"?>
<service><short>MySQL</short><description>MySQL Database Server</description><port protocol="tcp" port="53000"/> #修改端口
</service>

2、配置前查看public区域内允许访问的服务

[root@snat services]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client

3、为public区域设置允许访问的mysql服务

[root@snat services]# firewall-cmd --zone=public --add-service=mysql --permanent

4、重新加载配置

[root@snat services]# firewall-cmd --reload
success

5、配置后查看public区域内允许访问的服务

[root@snat zones]# firewall-cmd --zone=public --list-services
ssh mysql dhcpv6-client

6、移除mysql服务防火墙规则

[root@snat services]# firewall-cmd --zone=public --remove-service=mysql --permanent
success
[root@snat services]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --zone=public --list-services
ssh dhcpv6-client

四、firewalld端口配置策略

在进行服务配置时,预定义的网络服务可以使用服务名配置,服务所涉及的端口就会自动打开。但是,对于非预定义的服务只能手动为指定的区域添加端口。

使用firewalld允许客户请求的服务器的80/tcp端口,仅临时生效,如添加–permanent重启后则永久生效

1、临时添加允许放行单个端口

[root@snat zones]# firewall-cmd --add-port=80/tcp
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp

2、临时添加放行多个端口

[root@snat zones]# firewall-cmd --add-port={80/tcp,8080/tcp}
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp 8080/tcp

3、.永久添加多个端口,需要添加–permanent,并且需要重载firewalld

[root@snat zones]# firewall-cmd --add-port={80/tcp,8080/tcp} --permanent
success
[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-ports
80/tcp 8080/tcp

4、移除临时添加的端口规则

[root@snat zones]# firewall-cmd --remove-port={80/tcp,8080/tcp}
success
[root@snat zones]# firewall-cmd --list-ports

5、移除永久添加的端口规则

[root@snat zones]# firewall-cmd --remove-port={80/tcp,8080/tcp} --permanent
success
[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-ports

五、firewalld富规则配置策略

firewalld中的富规则可以配置更细致、更详细的防火墙策略,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的。

富规则相关命令

man firewall-cmd                #帮助手册
man firewalld.richlanguage      #获取富规则手册rule[source][destination]service|port|protocol|icmp-block|masquerade|forward-port[log][audit][accept|reject|drop]rule [family="ipv4|ipv6"]
source address="address[/mask]" [invert="True"]
service name="service name"
port port="port value" protocol="tcp|udp"
forward-port port="port value" protocol="tcp|udp" to-port="port value" to-addr="address"
accept | reject [type="reject type"] | drop富规则相关命令
--add-rich-rule='<RULE>'        #在指定的区添加一条富规则
--remove-rich-rule='<RULE>'     #在指定的区删除一条富规则
--query-rich-rule='<RULE>'      #找到规则返回0 ,找不到返回1
--list-rich-rules               #列出指定区里的所有富规则

这里就以consul服务为例,因为firewalld的防火墙规则默认是拒绝的,启动firewalld防火墙使用客户端用户无法连接,现在对consul服务进行配置防火墙规则,允许客户端用户可以连接consul服务。

操作步骤如下:

1、添加防火墙规则前在192.168.1.48主机上访问consul服务端口

2、在192.168.1.34主机上添加防火墙规则(对指定ip开放指定端口)

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8300" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8301" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8302" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8500" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8600" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8301" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8302" accept"
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8600" accept"
firewall-cmd --reload

进入/etc/firewalld/zones/public.xml文件查看配置的规则,如下图所示:

总结:也可以手动编辑public.xml文件进行规则添加。

3、查看配置结果,如下图所示:

4、添加防火墙规则后在192.168.1.48主机上访问consul服务端口

5、删除防火墙规则

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8300" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8301" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8302" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8500" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="tcp" port="8600" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8301" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8302" accept"
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.48" port protocol="udp" port="8600" accept"
firewall-cmd --reload

总结:也可以在public.xml文件中将之前添加的规则进行手动删除。


六、firewalld实现路由器功能

6.1、firewalld实现SNAT

实例:实现内部主机访问外部服务

步骤如下:

1、开启路由转发

#临时开启
[root@snat zones]# echo 1 > /proc/sys/net/ipv4/ip_forward#永久开启
[root@snat zones]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@snat zones]# sysctl -p

2、firewalld防火墙开启masquerade, 实现地址转换

设置默认区域的SNAT的IP伪装
[root@snat zones]# firewall-cmd --add-masquerade --permanent
[root@snat zones]# firewall-cmd --reload
#################################下面部分不用执行#################################
查看默认区域的SNAT是否允许
[root@snat zones]# firewall-cmd --query-masquerade --permanent删除默认区域的SNAT功能
[root@snat zones]# firewall-cmd --remove-masquerade --permanent

3、客户端将网关指向firewalld服务器,将所有网络请求交给firewalld

[root@web ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.149.100

4、客户端主机192.168.149.101上测试访问http://192.168.1.48:80

[root@host-48 ~]# tail -1000f /var/log/nginx/access.log
192.168.1.34 - - [19/Nov/2021:15:14:41 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
192.168.1.34 - - [19/Nov/2021:15:14:42 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
192.168.1.34 - - [19/Nov/2021:15:14:42 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"

通过日志会发现,客户端是先伪装成了192.168.1.34这个ip后再访问的web服务器!


6.2、firewalld实现DNAT

端口转发:将发往本机的特定端口的流量转发到本机或不同机器的另一个端口,通常要配合地址伪装才能实现.

实例:实现外部主机访问内部服务

步骤如下:

1、开启路由转发

#临时开启
[root@snat zones]# echo 1 > /proc/sys/net/ipv4/ip_forward#永久开启
[root@snat zones]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@snat zones]# sysctl -p

2、添加提供访问的端口

[root@snat zones]# firewall-cmd --add-port=8091/tcp --permanent
success

3、添加转发的端口和ip地址

格式:firewall-cmd --permanet --zone=<区域> --add-forward-port=port=源端口号:proto=<协议>:toport=<目标端口>:toaddr=<目标IP地址>

[root@snat zones]# firewall-cmd --permanent --add-forward-port=port=8091:proto=tcp:toport=80:toaddr=192.168.1.48
success

4、开启FirewallD的ip地址伪装

[root@snat zones]# firewall-cmd --add-masquerade --permanent

5、配置生效

[root@snat zones]# firewall-cmd --reload
success
[root@snat zones]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens33 ens38sources: services: ssh dhcpv6-clientports: 8091/tcpprotocols: masquerade: yesforward-ports: port=8091:proto=tcp:toport=80:toaddr=192.168.1.48source-ports: icmp-blocks: rich rules:

6、中转服务器上的8091端口实际是没有打开的

[root@snat zones]# ss -tnulp | grep 8091

7、客户端主机测试访问http://192.168.1.34:8091,实际访问的是192.168.1.48主机上的nginx 80端口服务,但是nginx日志记录的源ip地址为中转服务器的ip地址,这样就实现了地址伪装


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

《Linux运维总结:firewalld防火墙使用教程》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. Android中获取手机的IMEI
  2. 华硕无线网卡测试软件,家用无线网卡王者 华硕PCE-AC88 双频3100网卡测试
  3. 大庆师范学院计算机系徐媛老师,大庆师范学院课程表(未添加英语课).xls
  4. 零基础学习Java开发,这些学习笔记送给你
  5. ERROR: SampleCB() - buffer sizes do not match 解决方法
  6. LPI 认证考试介绍
  7. 镜像体积减小_docker镜像从1.16G优化到22M
  8. 开源已经 20 年,改变世界的承诺有兑现吗?
  9. 利用http-server测试vue-cli打包后的项目
  10. IDL实现植被覆盖度计算
  11. 计算机仿真技术物流,基于计算机仿真技术的物流实验室建设
  12. 如何用HTML+CSS实现淘宝页面效果
  13. vue中打印多一页空白页
  14. python实现随机森林
  15. web 上传文件到ftp服务器,web 上传文件到ftp服务器上
  16. imagebutton图片缩放
  17. Linux知识点整理(五)—— Linux 磁盘与文件系统管理
  18. OpenGauss数据库的详细安装过程
  19. Java编程思想读书笔记(七)
  20. 宝塔 cloudfare 523错误解决

热门文章

  1. 函数式编程、面向对象编程、面向过程编程
  2. 如何使用免费的服务器
  3. 【20201218期AI简报】内存256KB设备也能人脸检测!
  4. 虹科分享 | 如何确保工作场所的网络安全?给您保持企业安全的44个提示
  5. 有1,2,3,4个数,能组成多少个不相同无重复的三位数,分别是多少?
  6. log4j格局具体格式ConversionPattern中参数的含义
  7. OpenJDK和JDK区别
  8. [附源码]计算机毕业设计JAVA创意众筹网站
  9. 六大银行结算账户的区别
  10. 微软史上最惨程序员——一句话错失$20,000,000美元