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

Linux之彻底掌握防火墙-----安全管理详解

  

                                       ——    程

目录

一、防火墙作用

二、防火墙分类

1、逻辑上划分:大体分为 主机防火墙 和 网络防火墙

2、物理上划分: 硬件防火墙 和 软件防火墙

三、硬件防火墙

 四、软件防火墙

五、iptables

1、iptables的介绍

2、netfilter/iptables功能

3、iptables中链的概念

4、iptables中表的概念

5、iptables中表链之间的关系

6、iptables中表的优先级 

7、iptables基础语法结构 

 8、显式匹配使用选项及功能

9、iptables应用

设置服务开启

设置开机自启动

查看配置文件

保存规则

重载

基本配置

        案例:白名单

        案例:黑名单

        案例:通过lo访问本机数据

        案例:允许连接态产生衍生态

iptables filter表应用案例

案例1:iptables标准流程

案例2:本机无法访问本机例如:ping 127.0.0.1

案例3:本机无法访问其它主机例如:ssh remote_host

案例4:FTP无法访问

案例5:扩展匹配

案例6:扩展动作

案例7:转发功能的实现

开启路由转发功能

实现转发(重点)

六、firewalld

1、FireWalld中zone

概念及作用

FireWalld中zone分类

FireWalld文件

2、Firewalld语法

3、Firewall的状态

4、FireWalld中动作

4.1、动作中查看操作

4.2、更改区域操作

4.3、新建规则,新建 --add

4.4、删除规则,删除 --remove

4.5、改变规则,改变 change

4.6、端口转发

4.7、Rich规则

4.7.1、Rich规则帮助

4.7.2、Rich规则选项

4.7.3、Rich规则案例


一、防火墙作用


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

  • 用于保护内网安全的一种设备
  • 依据规则进行防护
  • 用户定义规则
  • 允许或拒绝外部用户访问

二、防火墙分类

1、逻辑上划分:大体分为 主机防火墙 和 网络防火墙

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

2、物理上划分: 硬件防火墙 软件防火墙

  • 硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高
  • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火墙低,成本较低,对于Linux系统已自带,直接使用即可。


补充:防火墙性能——吞吐量、并发连接、新建连接、时延、抖动、硬件防火墙


三、硬件防火墙

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

 硬件防火墙作用:

  • 过滤网络流量:硬件防火墙可以监控网络流量,根据预先设定的规则过滤流经防火墙的数据包,阻止恶意流量进入网络。

  • 防止未经授权的访问:硬件防火墙可以设置访问控制规则,限制网络用户对特定资源的访问,防止未经授权的用户进入网络。

  • 提高网络安全性:硬件防火墙可以检测和阻止网络中的恶意软件、病毒、木马等恶意代码,保护网络和系统不受攻击。

  • 日志记录和审计:硬件防火墙可以记录网络流量和安全事件的日志,方便网络管理员进行安全审计和排查安全事件。

硬件防火墙品牌:Juniper、cisco 思科ASA、华为、天融信。

 四、软件防火墙

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

  • 扩展:Web应用防火墙(WAF)

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

  • 扩充:硬件防火墙与软件防火墙比较

硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。
软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用于单机系统或个人计算机中,不直接用于计算机网络中。

五、iptables

1、iptables的介绍

        netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的企业级硬件防火墙。即使在如今的Linux操作系统中已经引入了firewalld,但是在企业中目前主流的还是应用的iptables比较多。

        iptables工作依据------规则(rules),iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为 “ 如果数据包头符合这样的条件,就这样处理这个数据包 ” 。规则存储在内核空间的 数据包过滤表 中,这些规则分别指定了源地址目的地址传输协议(TCP、UDP、ICMP) 和 服务类型(HTTP、FTP) 等。当数据包与规则匹配时,iptables 就 根据规则所定义的方法来处理这些数据包,比如 放行(ACCEPT)、拒绝(REJECT)、丢弃(DROP) 等。配置防火墙 主要工作就是对iptables规则进行添加、修改、删除等。

  • iptables不是防火墙,是防火墙用户代理。
  • 用于把用户的安全设置添加到“安全框架”中。
  • “安全框架”是防火墙,即就是netfilter。netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块。
  • iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具

2、netfilter/iptables功能

  • 数据包过滤,即防火墙
  • 数据包重定向,即转发
  • 网络地址转换,即可NAT

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

3、iptables中链的概念

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


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

      通过上图可以看出,当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,各报文经过的“链”可能不同,如果报文目标地址是本机,则会经常input链发往本机用户空间,如果报文目标不是本机,则会直接在内核空间中经常forward链和postrouting链转发出去。
        有的时候我们也经常听到人们在称呼input为“规则链”,这又是怎么回事呢?我们知道,防火墙的作用在于对经过的数据报文进行规则匹配,然后执行对应的“动作”,所以数据包经过这些关口时,必须匹配这个关口规则,但是关口规则可能不止一条,可能会有很多,当我们把众多规则放在一个关口上时,所有的数据包经常都要进行匹配,那么就形成了一个要匹配的规则链条,因此我们也把“链”称作“规则链”

  • INPUT:处理入站数据包。
  • OUTPUT:处理出站数据包。
  • FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目的主机。
  • PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机。
  • POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往下一跳。

4、iptables中表的概念

        每个“规则链”上都设置了一串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某一特定功能集合分类,而这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明白每种表的作用。

  • filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter
  • nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat
  • mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle
  • raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw
  • security:是否定义强制访问控制规则;后加上的

5、iptables中表链之间的关系


我们在应用防火墙时是以表为操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能。那么我们就应该知道哪张表包括哪些规则链,然后在规则链上操作即可。

  • filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT
  • nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
  • mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
  • raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT
  • security 表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT

6、iptables中表的优先级 

security-raw-mangle-nat-filter(由高至低)

数据包流经iptables流程

7、iptables基础语法结构 

  • iptables规则匹配及动作

规则:根据指定的匹配条件来尝试匹配每个流经此处的数据包,匹配成功,则由规则指定的处理动作进行处理。规则是由匹配条件和动作组成的,那么动作是什么呢?
举例说明:
两个同学,一个白头发,一个黑头发,同时进教室,而进教室的条件是只有黑头发可以进入,白头发拒绝进入,黑头发和白头发就是匹配条件,在这里可以进入和拒绝进入就是动作。

  • iptables规则匹配条件分类
  • 基本匹配条件:

源地址,目标地址,源端口,目标端口等

  • 基本匹配使用选项及功能

        基本匹配的特点:无需加载扩展模块,匹配规则生效。
扩展匹配条件:
                *  扩展匹配又分为显示匹配隐式匹配
                *  扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效
                显示匹配的特点:必须使用 -m选项 指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。

                隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块。

                隐式匹配选项及功能:
                        -p指定规则协议,tcp udp icmp all;
                        -s指定数据包的源地址,ip hostname;
                        -d指定目的地址;
                        -i 输入接口;
                        -o输出接口;
                         ! 取反。

  • -p tcp

        --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
        --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围
        --tcp-flags mask comp 匹配报文中的tcp协议的标志位

  • -p udp

        --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围
        --dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

  • --icmp-type

        0/0: echo reply 允许其他主机ping
        8/0:echo request 允许ping其他主机

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

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

  • iptables链管理方法 

                -N, --new-chain chain:新建一个自定义的规则链;
                -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
                -F, --flush [chain]:清空指定的规则链上的规则;
                -E, --rename-chain old-chain new-chain:重命名链;

                -P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
                -Z, --zero [chain [rulenum]]:置零计数器;
                       注意:每个规则都有两个计数器
                                packets:被本规则所匹配到的所有报文的个数;
                                bytes:被本规则所匹配到的所有报文的大小之和;
        

  • iptables规则管理

                -A, --append chain rule-specification:追加新规则于指定链的尾部;
                -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
                -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
                -D, --delete chain rulenum:根据规则编号删除规则;
                -D, --delete chain rule-specification:根据规则本身删除规则;

  • iptables规则显示

                -L, --list [chain]:列出规则;
                -v, --verbose:详细信息;
                -vv 更详细的信息
                -n, --numeric:数字格式显示主机地址和端口号;
                -x, --exact:显示计数器的精确值,而非圆整后的数据;
                --line-numbers:列出规则时,显示其在链上的相应的编号;
                -S, --list-rules [chain]:显示指定链的所有规则;

 8、显式匹配使用选项及功能

  • multiport 多端口
iptables -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
#在INPUT链中开放本机tcp 22,tcp80端口
  • iprange 多ip地址
iptables -A INPUT -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
  • time 指定访问时间范围
iptables -A INPUT  -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
  •  string 字符串,对报文中的应用层数据做字符串模式匹配检测(通过算法实现)。
--algo {bm|kmp}:字符匹配查找时使用算法
--string "STRING": 要查找的字符串
--hex-string “HEX-STRING”: 要查找的字符,先编码成16进制格式
  •  connlimit 连接限制,根据每个客户端IP作并发连接数量限制。
--connlimit-upto n 连接数小于等于n时匹配
--connlimit-above n 连接数大于n时匹配
  • limit 报文速率限制

limit模块对"报文到达速率"进行限制,我们可以以秒为单位进行限制,也可以以分钟、小时、天作 为单位进行限 制。 --limit限制比较有意思,主要用来限制单位时间内可以流入的数据包的数量

iptables -t filter -I INPUT -m limit --limit 10/min -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT
  • state 追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED,UNTRACKED.
--state state
NEW 新连接请求
ESTABLISHED 已建立的连接
INVALID 无法识别的连接
RELATED 相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接
UNTRACKED 未追踪的连接

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

  •  ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包,不给任何回应信息
  • REJECT:拒绝数据包通过,发送回应信息给客户端
  • SNAT:源地址转换

              1、 解释1:数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,接收方认为数据包的来源是被替换的那个IP主机,返回响应时,也以被替换的IP地址进行。

               2、解释2:修改数据包源地址,当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址(目的IP地址不变),使网络内部主机能够与网络外部主机通信。

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

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

               1、 解释1:数据包从网卡发出时,修改数据包中的目的IP,表现为你想访问A,但因网关做了DNAT,把所有访问A的数据包中的目的IP地址全部修改为B,实际最终访问的是B。
               2、 解释2:改变数据包目的地址,当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换(源IP地址不变),重新转发到内网的主机。
 

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

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

  • REDIRECT:在本机做端口映射
  • LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则。


补充:

  • 黑名单:没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。
  • 白名单:没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策略,推荐。

制定iptables规则思路

  1. 选择一张表,此表决定了数据报文处理的方式
  2. 选择一条链,此链决定了数据报文流经哪些位置
  3. 选择合适的条件,此条件决定了对数据报文做何种条件匹配
  4. 选择处理数据报文的动作,制定相应的防火墙规则

9、iptables应用

注:本文章中的环境 centos7

  • iptables-services安装

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

 yum -y install iptables-services
  • 设置服务开启

systemctl start iptables.service
  • 设置开机自启动

systemctl enable iptables.services
  • 查看配置文件

rpm -ql iptables-services
  • 保存规则

方法一:service iptables save
方法二人:iptables-save > /etc/sysconfig/iptables
  • 重载

iptables-restore < /etc/sysconfig/iptables
  • 基本配置

iptables -F
#删除现有规则
iptables -P OUTPUT DROP
#配置默认链策略
        案例:白名单
iptables -t filter -F
iptables -P INPUT DROP
iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
        案例:黑名单
iptables -P INPUT ACCEPT
iptables -F
iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
        案例:通过lo访问本机数据
iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
#允许通过本地回环网卡访问本机
        案例:允许连接态产生衍生态
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • iptables filter表应用案例

案例1:iptables标准流程
iptables -F
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #允许内网任何访问
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT
iptables -A INPUT -j REJECT
modprobe nf_conntrack_ftp
iptables-save > /etc/sysconfig/iptables
vim /etc/sysconfig/iptables-configIPTABLES_MODULES="nf_conntrack_ftp"
案例2:本机无法访问本机
例如:ping 127.0.0.1
iptables -I INPUT -i lo -j ACCEPT
案例3:本机无法访问其它主机
例如:ssh remote_host
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
案例4:FTP无法访问
解决方法1:
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT解决方法2:使用连接追踪模块
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
modprobe nf_conntrack_ftp #临时方法,添加连接追踪模块#永久方法
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp"
#启动服务时加载
#针对数据端口连接时,将三次握手第一次状态由NEW识别为RELATED
案例5:扩展匹配
#-m icmp
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply
-j ACCEPT #允许ping回应
[root@localhost ~]# iptables -A INPUT -j REJECT
#-m iprange
[root@localhost ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.10-
192.168.2.100 -j REJECT
#-m multiport
[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports
20,21,22,25,80,110 -j ACCEPT
#-m tos 根据ip协议头部 type of service进行过滤
[root@localhost ~]# iptables -F
[root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv
#抓取远程主机访问本机的ssh数据包,观察TOS值
#ssh: tos 0x0 0x10
#scp: tos 0x0 0x8
#rsync: tos 0x0 0x8
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j
ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j REJECT
#-m tcp 按TCP控制位进行匹配
Flags:SYN ACK FIN RST URG PSH ALL NONE
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags
SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT
#--tcp-flags SYN,ACK,FIN,RST SYN 检查四个标记位,只有SYN标记位才匹配,即只允许三次握手中的第一次握手,等价于--syn
#-m comment 对规则进行备注说明
[root@localhost ~]# iptables -A INPUT -s 192.168.2.250 -m comment --comment "cloud host" -j REJECT#-m mark 使用mangle表的标记方法,配合mangle表使用
[root@localhost ~]# iptables -t filter -A INPUT -m mark 2 -j REJECT
案例6:扩展动作
#-j LOG 记录至日志中
[root@localhost ~]# grep 'kern.*' /etc/rsyslog.conf
kern.* /var/log/kernel.log
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# iptables -j LOG -h
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --log-prefix " localhost_ssh "
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -j REJECT
#-j REJECT
当访问一个未开启的TCP端口时,应该返回一个带有RST标记的数据包
当访问一个未开启的UDP端口,结果返回port xxx unreachable
当访问一个开启的TCP端口,但被防火墙REJECT,结果返回port xxx unreachable
[root@localhost ~]# iptables -j REJECT -h
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset //返回一个自定义消息类型
#-j MARK 进行标记,可在LVS调度器中应用
[root@localhost ~]# iptables -t mangle -L
[root@localhost ~]# iptables -j MARK -h  #查看相关的帮助手册
[root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.110 -j MARK --set-mark 1
[root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.25 -j MARK --set-mark 2
[root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT //按照标记匹配
[root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT
案例7:转发功能的实现
  • 开启路由转发功能
[root@localhost ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
1
#以上为开启
#以下为关闭
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0#开启路由转发功能 --永久
[root@localhost ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
  • 实现转发(重点)
    #实现地址的转发(内部主机访问到外部主机,仅主机模式的虚拟机访问到外网)
    #注意:实现本功能之前除了nat模式的虚拟机需要开启路由转发的功能之外,仅主机模式的虚拟机还需要配置域名解析。
    iptables -t nat -I POSTROUTING -s 10.1.1.8 -o ens33 -j SNAT --to-source 192.168.17.156
    或
    iptables -t nat -I POSTROUTING -s 10.1.1.8 -o ens33 -j MASQUERADE#实现本机端口的转发
    iptables -t nat -I PREROUTING   -p tcp --dport 80 -j REDIRECT --to-port=8080
    iptables -t nat -I OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 80#实现跨主机的端口转发(外网访问内网服务器)
    iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.1.1.8:80

六、firewalld

首先我们来介绍一下Firewalld是什么?

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

1、FireWalld中zone

  • 概念及作用

区域(zone)firewalld预先准备好的防火墙策略集合即可策略模板,用于可以根据不同的应用场景进行切换。
例如: 你有一台笔记本电脑,每天都要在公司办公室、咖啡厅和家使用。 我们来对场所进行安全性由高到低排序:家、公司办公室、咖啡厅。我们希望为这台笔记本电脑指定如下防火墙策略规则: 在家中允许访问所有服务在公司办公室内仅允许访问文件共享服务在咖啡厅仅允许上网浏览。 在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合, 随时都可以自动切换了,从而极大地提升了防火墙策略的应用效率。

  • FireWalld中zone分类

FireWalld不同区域之间的差异主要是每个区域对待数据包的默认行为不同,Firewalld默认共9个zone,分别为:

block(拒绝)

dmz(非军事化)

drop(丢弃)

external(外部)

home(家庭)

internal(内部)

public(公开) Firewalld默认区域

trusted(信任)

work(工作区)

  • FireWalld文件

Firewalld文件分为两大类:

/usr/lib/firewalld/services :firewalld服务默认在此目录下定义了70多种服务,可以直接使用。
/usr/lib/firewalld/zones :区域配置文件
/etc/firewalld/zones :默认区域配置文件,配置文件中指定了编写完成的规则
firewalld文件作用 :人性化管理规则;通过服务组织端口分组更加高效,如果一个服务使用若干网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式。

2、Firewalld语法

命令语法结构:

firewall-cmd [--zone=zone] 动作 [--permanent]

        如果不指定--zone选项,则为当前所在的默认区域--permanent选项为是否将改动写入到区域配置文件中

3、Firewall的状态

[root@localhost ~]# firewall-cmd --state 
running
#查看状态
或
[root@localhost ~]# systemctl status firewalld[root@localhost ~]# firewall-cmd --reload
success
#重新加载防火墙,中断用户连接,临时配置清除掉,加载配置文件中的永久配置[root@localhost ~]# firewall-cmd --complete-reload
success
#重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)[root@localhost ~]# firewall-cmd --panic-on
#紧急模式,强制关闭所有网络连接[root@localhost ~]# firewall-cmd --panic-off
#关闭禁用的网络

4、FireWalld中动作

  • 4.1、动作中查看操作

[root@localhost ~]# firewall-cmd xxx
--get-icmptypes ##查看支持的所有ICMP类型
--get-zones ##查看所有区域
--get-default-zone ##查看当前的默认区域
--get-active-zones ##查看当前正在使用的区域
--get-services ##查看当前区域支持的服务
--list-services ##查看当前区域开放的服务列表
--list-services --zone=home ##查看指定域开放的服务列表
--list-all ##查看默认区域内的所有配置,类似与iptables -L -n
--list-all-zones ##查看所有区域所有配置
  • 4.2、更改区域操作

root@localhost ~]# firewall-cmd xxx
--set-default-zone=work ##更改默认的区域
  • 4.3、新建规则,新建 --add

[root@localhost ~]# firewall-cmd xxx
--add-interface=eth0 ##将网络接口添加到默认的区域内
--add-port=12222/tcp --permanent ##添加端口到区域开放列表中
--add-port=5000-10000/tcp --permanent ##将端口范围添加到开放列表中;
--add-service=ftp --permanent ##添加服务到区域开放列表中(注意服务的名称需要与此区域支持的服务列表中的名称一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定区域
--add-masquerade ##开启SNAT(源地址转换)
  • 4.4、删除规则,删除 --remove

[root@localhost ~]# firewall-cmd xxx
--remove-service=http ##在home区域内将http服务删除在开放列表中删除
--remove-interface=eth0 ##将网络接口在默认的区域内删除
--remove-source=192.168.1.1 ##删除源地址的流量到指定区域
  • 4.5、改变规则,改变 change

[root@localhost ~]# firewall-cmd xxx
--change-interface=eth1 ##改变指定的接口到其他区域
  • 4.6、端口转发

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定ip的话就默认为本机,如果指定了ip却没指定端口,则默认使用来源端口

#通过firewalld实现SNAT
[root@localhost ~]# firewall-cmd --add-masquerade --permanent
[root@localhost ~]# firewall-cmd --reload
# 将80端口的流量转发至8080
#firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 将80端口的流量转发至
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20
#删除
[root@localhost ~]#firewall-cmd --remove-forward port=port=80:proto=tcp:toaddr=192.168.2.20 --permanent
# 将80端口的流量转发至192.168.2.20的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20:toport=8080

如果配置好端口转发之后不能用,可以检查下面两个问题:

  1. 比如将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
  2. 其次检查是否允许伪装IP,没允许的话要开启伪装IP
  • 4.7、Rich规则

当基本firewalld语法规则不能满足配置要求时,可以使用rich规则来完成更加复杂的功能。

  • 4.7.1、Rich规则帮助
root@localhost ~]# man 5 firewalld.richlanguage1
  • 4.7.2、Rich规则选项
--add-rich-rule=’rule’ ##新建rich规则
--remove-rich-rule=’rule’ ##删除rich规则
--query-rich-rule=’rule’ ##查看单条rich规则
--list-rich-rules ##查看rich规则列表
  • 4.7.3、Rich规则案例

拒绝某一主机访问

[root@localhost ~]#firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.2.20/32 reject'
[root@localhost ~]# firewall-cmd --reload

抛弃icmp协议所有数据包

[root@localhost ~]#firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
success
[root@localhost ~]# firewall-cmd --reload
success
#删除
[root@localhost ~]#firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop'

允许某一网段一段端口通过

[root@localhost ~]#firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 port port=7900-7905 protocol=tcp accept'
success

开启SNAT

[root@localhost ~]#firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'

端口转发

[root@localhost ~]# firewall-cmd --add-masquerade --permanent
[root@localhost ~]#firewall-cmd --add-rich-rule='rule family=ipv4 forward-port port=8080 protocol=tcp to-port=80 to-addr=192.168.17.6'
[root@localhost ~]# firewall-cmd --reload

 本   篇   完   结   …  …


持     续     更     新     中   …    … 

相关文章:

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录&#xff1a; 一、防火墙作用 二、防火墙分类 1、逻辑上划分&#xff1a;大体分为 主机防火墙 和 网络防火墙 2、物理上划分&#xff1a; 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…...

Linux安装ffmpeg7.1操作说明

安装yasm Index of /projects/yasm/releases/ 下载最新版 wget https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 解压 tar -zxvf yasm-1.3.0.tar.gz 编译及安装 ./configure make && make install 安装ffmpeg https://download.csdn.net/down…...

Java 加密与解密:从算法到应用的全面解析

Java 加密与解密&#xff1a;从算法到应用的全面解析 一、加密与解密技术概述 在当今数字化时代&#xff0c;数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段&#xff0c;被广泛应用于各个领域。 加密是将明文数据通过特定算法转换为密文&#xff0c;使得…...

海思SDK的sensor驱动框架

对于海思的SDK之前一直对驱动的框架不清楚&#xff0c;只知道mpp的目录下的一些简单的业务demo&#xff0c;归根结底对这个SDK的框架还是不够了解&#xff0c;研究了一段时间才对该框架有一点认识。SDK是通过Makefile来管理和编译的所以对于Makefile文件需要有一定的理解&#…...

MyBatis-Plus 使用 Wrapper 构建动态 SQL 有哪些优劣势?

MyBatis-Plus (MP) 提供的 Wrapper (如 QueryWrapper, LambdaQueryWrapper, UpdateWrapper, LambdaUpdateWrapper) 是其核心特性之一&#xff0c;它允许我们在开发时以面向对象的方式构建 SQL 的 WHERE 条件、ORDER BY、SELECT 字段列表等部分。与传统的 MyBatis 在 XML 文件中…...

【PGCCC】Postgres 故障排除:修复重复的主键行

如何从表中删除不需要的重复行。这些重复行之所以“不需要”&#xff0c;是因为同一个值在指定为主键的列中出现多次。自从 glibc 好心地改变了排序方式后&#xff0c;我们发现这个问题有所增加。当用户升级操作系统并修改底层 glibc 库时&#xff0c;这可能会导致无效索引。 唯…...

Java多线程的暗号密码:5分钟掌握wait/notify

wait和join的区别 wait和join在使用上都是等待。 但是join是等待其他线程结束&#xff0c;而wait是等待其他线程的notify通知再运行。 当拿到锁的线程&#xff0c;发现要执行的任务时机不成熟的时候&#xff0c;使用wait进行阻塞等待&#xff0c;然后等时机成熟了再notify通…...

【重学Android】03.高版本 Android Studio 不能使用引用库资源ID的问题

问题背景 由于直接下载的最新版本Android Studio&#xff0c;然后直接创建的新项目&#xff0c;因此默认的工程配置相比以前的老版本有了不少的变化&#xff0c;Gradle的新版本使用&#xff0c;导致一些配置项也发生了变化&#xff0c;加上谷歌针对gradle.properties文件的一些…...

8. kubernetes的service原理

Kubernetes 的 Service 是集群内部和外部访问 Pod 的核心抽象层&#xff0c;解决了 Pod 动态 IP 变化及负载均衡问题。以下是其核心概念、原理及使用方法&#xff1a; 一、Service 的核心概念 概念说明服务发现通过标签选择器&#xff08;selector&#xff09;动态关联一组 Po…...

杭电oj(1087、1203、1003)题解

DP 即动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;是一种通过把原问题分解为相对简单的子问题&#xff0c;并保存子问题的解来避免重复计算&#xff0c;从而解决复杂问题的算法策略。以下从几个方面简述动态规划&#xff1a; 基本思想 动态规划的核心在…...

解锁安防新境界:XS9933四通道多合一同轴高清解码芯片方案

在安防监控领域&#xff0c;高清、高效、便捷一直是行业追求的目标。今天&#xff0c;我们要为大家介绍一款具有突破性的产品——XS9933四通道多合一同轴高清解码芯片方案&#xff0c;它将为安防监控带来全新的体验。 一、强大性能&#xff0c;高清呈现 XS9933是一款4通道模拟复…...

Mysql之存储过程

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。 目录 1.存储过程概述 2.存储过程的基本语法 2.1创建存储过程 2.2调用存储过…...

2.第二章:政策法规与标准体系

文章目录 2.1 全球数据治理政策概览2.1.1 欧盟GDPR2.1.2 美国数据法规2.1.3 亚太地区数据法规 2.2 国际标准体系2.2.1 ISO/IEC 270012.2.2 NIST框架2.2.3 DAMA DMBOK2.2.4 其他国际标准 2.3 中国数据治理法规体系2.3.1 《网络安全法》2.3.2 《数据安全法》2.3.3 《个人信息保护…...

Kubernetes (k8s) 日常运维命令总结

一、资源查看 查看所有命名空间的 Pod kubectl get pod --all-namespaces查看指定命名空间的 Pod kubectl get pod --namespace <命名空间>查看所有部署&#xff08;Deployments&#xff09; kubectl get deployments.apps --all-namespaces查看所有守护进程集&#xff0…...

NLP高频面试题(五十三)——LLM中激活函数详解

引言 在现代大型语言模型架构中,激活函数是贯穿神经网络各层的关键组件。它们通过为线性变换结果引入非线性,从而赋予模型表达复杂语言模式的能力。选择合适的激活函数,不仅影响训练的稳定性与收敛速度,还在推理阶段决定了计算效率与模型性能。本文将系统梳理常见激活函数…...

跨平台软件开发探讨

一、跨平台开发核心思路 1. 代码复用最大化 通过抽象平台差异实现核心逻辑复用&#xff0c;理想情况下70%代码可复用&#xff0c;仅30%处理平台特性。 2. 分层架构设计 业务逻辑层&#xff1a;完全平台无关&#xff08;C/Rust&#xff09; 平台适配层&#xff1a;封装系统AP…...

网络原理————HTTP

1&#xff0c;HTTP简介 我们上一期谈到了网络编程尤其是TCP和UDP&#xff0c;使用网络套接字来实现网络编程&#xff0c;上一期忘记说了&#xff0c;我们使用TCP的时候&#xff0c;我们用了线程池&#xff0c;这样就可以处理很多客户端而不会阻塞&#xff0c;那么如果客户端一…...

安装Jupyter Notebook 之不断报错 差点放弃版

error: subprocess-exited-with-error Preparing metadata (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [6 lines of output] Cargo, the Rust package manager, is not installed or is not on PATH. This package requires Rust and Cargo to com…...

w~大模型~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/13864163 #TextRCNN、TextCNN、RNN 小小搬运工周末也要学习一下~~虽然和世界没关 但还是地铁上看书吧, 大老勿怪 今天来说一下 文本分类必备经典模型 模型 SOTA&#xff01;模型资源站收录情况 模型来源论文 RAE ​…...

【华为】防火墙双击热备-之-主备模式-单外网线路

FW1和FW2的业务接口都工作在三层&#xff0c;上行连接二层交换机。上行交换机连接运营商的接入点&#xff0c;运营商为企业分配的IP地址为100.100.100.2。现在希望FW1和FW2以主备备份方式工作。正常情况下&#xff0c;流量通过FW1转发&#xff1b;当FW1出现故障时&#xff0c;流…...

学习记录:DAY16

Maven 进阶与前端实战 前言 二轮考核的内容下来了&#xff0c;由整体项目构建转为实现特定模块的功能。对细节的要求更高了&#xff0c;而且有手搓线程池、手搓依赖注入等进阶要求&#xff0c;又有得学力。嘻嘻&#xff0c;太简单了&#xff0c;只要我手搓 Spring Boot 框架……...

基于 Spring Boot 瑞吉外卖系统开发(六)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;六&#xff09; 菜品列表 在系统管理端首页&#xff0c;单击左侧菜单栏中的“菜品管理”&#xff0c;会在右侧打开菜品管理页面。 请求URL/dish/page&#xff0c;请求方法GET,请求参数page&#xff0c;pageSize。 该菜品列表…...

香港服务器租用需要哪些性能要求

在如今数字化的时代&#xff0c;租用香港服务器成为了许多企业和个人的选择。但你知道租用香港服务器需要哪些性能要求吗&#xff1f;香港服务器租用需满足硬件性能、网络质量、安全合规、扩展能力四大核心要求&#xff0c;旨在支撑业务高并发、低延迟、稳定安全的运行环境。其…...

LLama Factory从入门到放弃

目录 简介 安装 LLama Factory界面介绍 数据格式要求 微调训练 今天在这里介绍一种常用的大模型微调框架——LLama Factory。 简介 LLama Factory 是一个高效的界面化大语言模型微调工具库&#xff0c;支持多种参数高效微调技术&#xff0c;提供简洁接口和丰富示例&#…...

钧瓷产业原始创新的许昌共识:技术破壁·产业再造·生态重构(一)

大禹智库 第 9期〔总第463期〕2025-4-23 钧瓷产业许昌共识&#xff1a;技术破壁产业再造生态重构&#xff08;一&#xff09; ——基于钧瓷产业一体化与数字化原始创新的双轮驱动实践 在当今快速发展的科技领域&#xff0c;创新已成为推动进步的核心动力&#xff0c;企业生存和…...

思科路由器密码绕过+重置

思科路由器密码忘记&#xff0c;重新设置密码不重置配置 1、路由器在初始化过程中会询问是否进行初始化配置&#xff0c;输入no&#xff0c;将直接进入路由器&#xff0c;不会出现用户设置、密码设置等操作。 Would you like to enter the initial configuration dialog? [ye…...

OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…...

为什么圆形在GeoJSON中被表示为多边形(Polygon)而不是圆形类型

GeoJSON规范中没有"圆形"类型 GeoJSON是一种用于表示地理空间数据的标准格式&#xff0c;它的规范中只定义了以下几种基本几何类型&#xff1a; Point (点) LineString (线) Polygon (多边形) MultiPoint (多点) MultiLineString (多线) MultiPolygon (多多边形) Ge…...

【解读】Chrome 浏览器实验性功能全景

Chrome 浏览器提供了大量可配置的实验性或功能性设置&#xff0c;主要涉及安全、性能、多媒体、Web API、隐私等多个方面&#xff0c;这些设置可在 Chrome 浏览器的 flags 页面进行调整。 安全相关设置 不安全源设置&#xff1a;可通过#unsafely-treat-insecure-origin-as-sec…...

LInux平均负载

Linux平均负载是**指在一定时间内&#xff0c;系统中处于可运行状态或正在等待资源的进程数的平均值。**它是衡量系统整体工作负载的重要指标&#xff0c;反映了系统的繁忙程度。平均负载通常分为过去1分钟、5分钟和15分钟的平均值。 理解平均负载的关键点 与CPU核心数的关系 *…...

【人工智能】Ollama 负载均衡革命:多用户大模型服务的高效调度与优化

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在 多用户大模型推理 场景下,负载均衡 是确保高并发、低延迟的关键挑战。本文以 Ollama(一个流行的本地大模型运行框架)为例,深入探讨 …...

deepseek-php-client开源程序是强力维护的 PHP API 客户端,允许您与 deepseek API 交互

一、软件介绍 文末提供程序和源码下载学习 deepseek-php-client开源程序是强力维护的 PHP API 客户端&#xff0c;允许您与 deepseek API 交互。 二、Features 特点 无缝 API 集成&#xff1a;DeepSeek 人工智能功能的 PHP 优先接口。流畅构建器模式&#xff1a;可链式调用的…...

ThinkPHP快速使用手册

目录 介绍 安装&#xff08;windows环境&#xff09; 安装Composer 安装ThinkPHP 目录结构 配置文件 第一个接口&#xff08;Controller层&#xff09; Hello World 自定义Controller 请求参数 获取查询参数&#xff08;Get请求&#xff09; 获取指定请求参数 获取…...

文档构建:Sphinx全面使用指南 — 强化篇

文档构建&#xff1a;Sphinx全面使用指南 — 强化篇 Sphinx 是一款强大的文档生成工具&#xff0c;使用 reStructuredText 作为标记语言&#xff0c;通过扩展兼容 Markdown&#xff0c;支持 HTML、PDF、EPUB 等多种输出格式。它具备自动索引、代码高亮、跨语言支持等功能&#…...

Laravel 自定义 Artisan 命令行

1.什么是Artisan 命令行 Artisan 是 Laravel 中自带的命令行接口。Artisan 以 artisan 脚本的方式存在于应用的根目录中&#xff0c;提供了许多有用的命令。 查看所有命令行 php artisan list系统自带我很多的命令&#xff0c;大家可以自己去试一下&#xff0c;例如&#xf…...

node.js 实战——(fs模块 知识点学习)

fs 模块 也可以称之为文件系统模块&#xff0c;是node中的内置模块&#xff0c;可以实现与硬盘的交互。比如文件的创建、删除、重命名、移动&#xff0c;还有文件内容的写入、读取&#xff0c;以及文件夹的相关操作 #mermaid-svg-NAByzqTngZUOyQcY {font-family:"trebuch…...

openharmony5.0.0中C++公共基础类测试-线程相关(一)

C公共基础类测试及源码剖析 延续传统&#xff0c;show me the code&#xff0c;除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库&#xff0c;为标准系统提供了一些常用的C开发工具类&#xff0c;本文分析其实现&#xff0c;并给…...

前缀和相似题共赏

P3131 [USACO16JAN] Subsequences Summing to Sevens S P3131 [USACO16JAN] Subsequences Summing to Sevens S 思路: 一看到区间和我们应该就能马上想到把这个区间拆分成两个前缀相减的形式 式子为:(Pre[r] - Pre[l-1]) % 7 0 Pre[r] % 7 Pre[l-1] % 7 Pre[r] Pre[l-1] 所…...

一文读懂https

http和https的关系 http&#xff0c;应用层协议&#xff0c;由于采用明文传输&#xff0c;不安全&#xff0c;还有很多其他安全问题&#xff0c;为此就衍生出了同为应用层协议的https。https在http的基础上引入了SSL&#xff08;Secure Socket Layer 安全套接层&#xff09;和…...

为什么 requests 不是 python 标准库?

为什么 requests 不是 python 标准库&#xff1f; requests开发者Kenneth之前还严肃地征求过这个意见&#xff0c;感兴趣的可以看看 https://github.com/psf/requests/issues/2424 我大致瞅了下&#xff0c;基本都不赞成requests加入python标准库&#xff0c;主要有以下两个原…...

[STM32] 4-1 UART与串口通信

文章目录 前言4-1 UART与串口通信串口简介串口接线 数据帧串口的数据帧格式空闲位起始位数据位校验位&#xff08;位于数据位内部&#xff09;奇偶校验 停止位 异步通信和波特率同步通信异步通信波特率 流控的概念串口流控的工作原理 随堂测试问题1:说出Tx、Rx、CTS、RTS、VCC、…...

7-1 三种语言的单词转换

编写程序实现&#xff1a;首先从键盘输入若干个中文与英文单词的偶对&#xff0c;以空行作结束标记&#xff1b;再输入若干个英文与丹麦文单词的偶对&#xff0c;以空行作结束标记。然后输入一个中文单词&#xff0c;输出对应的丹麦文单词&#xff1b;若不存在该单词&#xff0…...

高防IP是什么

"高防IP"是指"高防护IP"&#xff0c;是一种防御DDoS&#xff08;分布式拒绝服务攻击&#xff09;的网络安全服务。在分布式拒绝服务攻击中&#xff0c;攻击者会利用许多不同的计算机或者其他设备&#xff0c;通过向目标发送大量的网络请求来尝试使目标服务…...

基于javaweb的SSM宠物商城设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

《TCP/IP详解 卷1:协议》之第六章:ICMP:Internet控制报文协议

目录 一、ICMP协议 二、ICMP 报文格式 三、ICMP询问报文 四、ICMP 差错报告报文 五、ICMP端口不可达差错 一、ICMP协议 ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;是网络层的一个核心协议&#xff0c;用于在IP主机、…...

SpringBoot项目,密码加密之“BCrypt加密”

前言 这种方法&#xff0c;是当前推荐的密码加密方式。&#xff08;现在不推荐使用MD5加密了&#xff09;。 如何在springboot项目中&#xff0c;使用bcrypt加密&#xff1f;请分步骤详细介绍一下 一.在Spring Boot项目中使用BCrypt加密的详细步骤 BCrypt是当前推荐用于密码存…...

外贸获客新革命:基于AI的搜索引擎排名攻防战——48小时抢占谷歌TOP3的技术逻辑与实战路径

一、传统SEO的三大死亡陷阱&#xff08;为什么你的客户正在被AI截流&#xff1f;&#xff09; 关键词荒漠化 人工筛选关键词效率不足1%&#xff0c;95%的B2B采购商使用长尾词搜索&#xff08;如"IP68 waterproof LED strip for outdoor projects"&#xff09;而非通…...

0101基础知识-区块链-web3

文章目录 1 web3学习路线2 区块链简史2.1 区块链2.2 公共账本2.3 区块链的设计哲学2.3.1 去中心化2.3.2 共识2.3.2.1 上链2.3.2.2 共识算法 3 web3面向资产的互联网3.1 安全性和去中心化的权衡 4 智能合约4.1 以太坊智能合约4.2 去中心化应用 5 小结结语 1 web3学习路线 参考下…...

SpringMVC从入门到上手-全面讲解SpringMVC的使用.

一、springmvc介绍 MVC全称Model View Controller&#xff0c;是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中&…...

解锁现代生活健康密码,开启养生新方式

在科技飞速发展的当下&#xff0c;我们享受着便捷生活&#xff0c;却也面临诸多健康隐患。想要维持良好状态&#xff0c;不妨从这些细节入手&#xff0c;解锁科学养生之道。​ 肠道是人体重要的消化器官&#xff0c;也是最大的免疫器官&#xff0c;养护肠道至关重要。日常可多…...