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

11.Linux 防火墙管理

Linux 防火墙管理

防火墙介绍

防火墙( FireWall ),工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件。基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略,将希望外网访问的主机放在 DMZ(demilitarized zone)网络中。

Firewalld 区域

firewalld 防火墙为了简化管理,将所有网络流量分为多个区域(zone),每个 zone 就是一套过滤规则集。

Firewalld 提供的区域

firewalld 防火墙提供了如下zone:

  • trusted(信任区域):允许所有的传入流量。
  • public(公共区域):允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域。
  • external(外部区域):允许与ssh预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为路由器启用了伪装功能的外部网络。
  • home(家庭区域):允许与ssh、mdn3、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
  • internal(内部区域):默认值时与homel区域相同。
  • work(工作区域):允许与 ssh、dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。
  • dmz(隔离区域也称为非军事区域):允许与ssh 预定义服务匹配的传入流量,其余均拒绝。
  • block(限制区域):拒绝所有传入流量。
  • drop(丢弃区域):丢弃所有传入流量,并且不产生包含ICMP的错误响应。
数据包与区域匹配规则

数据包与zone匹配规则如下:

  1. firewalld将数据包分配给与传入网络接口关联的区域,并应用该区域的规则。

  2. 如果接口未关联zone,该源地址被分配给特定区域, 则应用该区域的规则。

  3. 如果源地址未被分配给特定区域,0

  4. 如果以上都未匹配,firewalld将数据包分配给默认区域

注意事项:

  • firewalld默认指定public区域为默认区域,并将lo 回环接口映射至 trusted 区域
  • 如果流量不与允许的端口或协议或服务匹配,则通常会被拒绝
Firewalld 规则

对于所有区域,区域内规则的优先级是相同的。

区域内规则匹配优先级如下:

  1. 首先匹配为该区域设置的任何端口转发伪装原则。
  2. 其次匹配该区域设置的任何允许规则。
  3. 最后匹配该区域设置的任何拒绝规则。
  4. 还可以同时为以上3个规则设置记录和审计规则,可以同时生效。
  5. 富规则中的规则优先级高于区域中其他规则。
  6. 如果区域中所有规则都不匹配,那么通常会拒绝该包,trusted 例外。

zone 管理

如果把 Linux 防火墙比作一个 “智能小区的安保系统”,那 zone(区域) 就是小区里划分的不同 “功能区”—— 每个区域有自己的 “安保规则”,你可以根据需求把 “人”(IP 地址)或 “门”(网络接口)分到不同区域,让他们自动遵守该区域的规矩。

用 “小区分区” 类比 zone 管理

想象一个大型小区,里面分了好几个区域,每个区域的安保严格程度完全不同:

  • public 区(公共区):相当于小区的 “大门口广场”,任何人都能进,但只能做些基础活动(比如查个路),想进楼里必须额外申请权限;
  • trusted 区(信任区):相当于 “业主专属活动区”,里面的人随便逛,所有设施都能直接用,几乎没有限制;
  • block 区(阻断区):相当于 “黑名单区”,只要被分到这里,不管想做什么都直接拦在外面,连小区门都进不来;
  • dmz 区(隔离区):相当于 “快递柜区域”,允许外部人员(比如快递员)有限访问,但不能进居民楼,保障内部安全;
  • home/work:相当于 “小区内部生活区”,比 public 宽松,比 trusted 稍严格,适合熟人之间的互动。

具体操作(小区物业视角)

1. 查看所有区域:“查分区表”
# 列出所有区域及各自的规则
firewall-cmd --list-all-zones# 只看某个区域的详情(比如 public 区)
firewall-cmd --zone=public --list-all

→ 相当于物业翻 “小区分区手册”,看看每个区域有哪些门禁规则(开放哪些端口、允许哪些服务)、当前有哪些 “人”(source)或 “门”(interface)属于这个区。

2. 创建自定义区域:“新增一个功能区”
# 新建一个叫“game”的区域(比如给游戏服务器专用)
sudo firewall-cmd --new-zone=game --permanent# 新建后要重启防火墙让它生效
sudo firewall-cmd --reload

→ 相当于小区新划了一块 “电竞区”,专门给玩家用,之后可以给这个区单独定规则(比如开放 8080 游戏端口)。

3. 给区域加规则:“制定区域规矩”
# 允许 public 区访问 80 端口(网页服务)
sudo firewall-cmd --zone=public --add-port=80/tcp# 允许 trusted 区访问所有 SSH 服务(22 端口)
sudo firewall-cmd --zone=trusted --add-service=ssh

→ 相当于给 “大门口广场”(public 区)开了个 “问询窗口”(80 端口),给 “业主区”(trusted 区)配了 “专属通道”(SSH 服务)。

4. 设置默认区域:“定个小区主规则”
# 把 public 设为默认区域
sudo firewall-cmd --set-default-zone=public

→ 相当于小区规定:如果一个人(IP)或一个门(接口)没被分到任何区域,就默认进入 “大门口广场”(public 区),按这里的规矩来。

5. 删除区域:“撤销某个功能区”
# 删除之前创建的“game”区(先确保没人或门属于这个区)
sudo firewall-cmd --delete-zone=game --permanent
sudo firewall-cmd --reload

→ 相当于小区取消了 “电竞区”,之前属于这里的人或门,会自动回到默认区域。

核心逻辑(一句话总结)

zone 是防火墙规则的 “打包容器”—— 你不用零散地给每个 IP 或接口写规则,而是先给不同区域制定好 “套餐规则”,再把对象分到对应的区,实现 “一次配置,批量生效”。就像小区分好区后,只要知道某人在哪个区,就知道他能做什么、不能做什么,管理起来既清晰又高效。

#查看zone清单
[root@server ~ 14:18:45]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
# 查看激活的zone清单,也就是分配了interface和source的zone
[root@server ~ 14:45:10]# firewall-cmd --get-active-zones
publicinterfaces: ens33# 查看默认zone
[root@server ~ 14:45:54]# firewall-cmd --get-default-zone
public# 设置默认zone,例如设置为trusted,该操作同时设置永久态默认zone
[root@server ~ 14:47:38]# firewall-cmd --set-default-zone=trust
success
[root@server ~ 14:48:07]# firewall-cmd --set-default-zone=publi
success

source 管理

可以把 firewalldsource 管理,想象成 给服务器 “雇保镖,分门禁” 的过程,用生活化场景类比:

1. 区域(zone)= 不同 “门禁区域”

把服务器比作一栋大楼,firewalld区域(zone) 就是大楼里的不同 “门禁区域”:

  • public(公共区):像大楼的 “大堂”,默认对外部开放,但规矩多(规则严格);
  • trusted(信任区):像大楼的 “内部办公区”,对自己人完全开放,随便进;
  • block(阻断区):像大楼的 “黑名单区”,进来就赶出去,谁都别想停留。

2. source(IP / 网段)= “访客身份”

source 就是 访客的 “身份证”(IP 地址)

  • 单个 IP(如 192.168.1.100):像具体某个人的身份证,能精准识别;
  • 网段(如 10.0.0.0/24):像 “公司工牌”,同一公司(网段)的人共用一个身份规则。

3. 操作类比(生动版)

(1)查看 source:“查门禁记录”
firewall-cmd --list-all-zones | grep -E "zone|source"

→ 相当于保安查 “门禁登记本” :看看哪些 IP / 网段被分到了哪个 “门禁区域”,谁能进大堂、谁能进办公区。

(2)添加 source:“给访客办门禁”
# 单个 IP 进 public 区(大堂)
sudo firewall-cmd --zone=public --add-source=192.168.1.100

→ 相当于给 192.168.1.100 这个 “访客” 办一张 “大堂门禁卡” ,以后他来服务器大楼,默认走 “大堂” 的规矩(public 区域规则)。

# 网段进 trusted 区(办公区)
sudo firewall-cmd --zone=trusted --add-source=10.0.0.0/24

→ 相当于给 10.0.0.0/24 这个 “公司网段” 的人发 “内部办公区工牌” ,他们来服务器大楼,直接进 “办公区”,随便访问(trusted 区域规则宽松)。

(3)永久生效:“把门禁卡焊死”
sudo firewall-cmd --runtime-to-permanent

→ 服务器重启后,临时办的 “门禁卡” 会失效,所以要 “把门禁卡信息刻在登记本上” ,永久保存,重启后也认这些访客。

(4)移除 source:“收回门禁卡”
sudo firewall-cmd --zone=public --remove-source=192.168.1.100

→ 相当于访客 192.168.1.100 被列入 “黑名单”,保安 “收回他的大堂门禁卡” ,以后再来服务器大楼,按默认规矩(没特殊权限)处理,可能直接被拦在门外。

4. 总结(打工人视角)

  • 你是服务器大楼的 “保安队长”firewalld 是你的 “门禁系统”;
  • zone 是不同 “门禁区域”(大堂、办公区、黑名单区);
  • source 是访客的 “身份证 / 工牌”;
  • 你通过 firewall-cmd 给不同 “身份证” 分配 “门禁区域”,决定谁能进、进哪里、怎么进。
#来源于特定source的数据包交给特定zone处理
[root@server ~ 14:51:46]# firewall-cmd --add-source=10.1.8.0/24 --zone=home
success
# 查看source清单
[root@server ~ 15:04:40]# firewall-cmd --list-sources --zone=home
10.1.8.0/24
# 查看source属于哪个zone
[root@server ~ 15:05:07]# firewall-cmd --get-zone-of-source=10.1.8.0/24
home
# 查看source是否添加
[root@server ~ 15:05:47]# firewall-cmd --query-source=10.1.8.0/24 --zone=home
yes
# 变更source到其他zone
[root@server ~ 15:06:54]# firewall-cmd --change-source=10.1.8.0/24 --zone=public
success
# 删除zone中source
[root@server ~ 15:07:35]# firewall-cmd --remove-source=10.1.8.0/24 --zone=public
success

interface 管理

如果说 source 管理是给 “访客发门禁卡”,那 Linux 防火墙里的 interface(网络接口)管理 就像是给服务器大楼的 “大门挂牌匾”—— 给不同的物理 / 虚拟网卡(比如网线接口、无线网卡)分配 “专属区域”,让从这个门进来的流量自动遵守该区域的规矩。

用 “大楼大门” 类比 interface 管理

把服务器想象成一栋有多个大门的大楼:

  • interface(网络接口) 就是大楼的各个 “大门”(比如正门、侧门、后门),对应服务器上的网卡(如 eth0wlan0ens33 等);
  • zone(区域) 还是之前的 “门禁区域”(大堂、办公区、黑名单区)。

interface 管理的核心就是:给某个大门挂个牌子,写明 “从这个门进来的人,默认进 XX 区域”,所有从该接口流入的流量,自动套用对应区域的规则。

具体操作(生动版)

1. 查看接口绑定:“查大门挂牌”
# 看所有大门挂了哪些区域的牌子
firewall-cmd --list-all-zones | grep -E "zone|interface"# 看指定大门(如 eth0)挂的牌子
firewall-cmd --get-zone-of-interface=eth0

→ 相当于保安查 “大门挂牌表”:正门(eth0)挂着 “public 区” 的牌子,侧门(wlan0)挂着 “trusted 区” 的牌子。

2. 绑定接口到区域:“给大门挂牌”
# 给正门(eth0)挂“public 区”的牌子
sudo firewall-cmd --zone=public --add-interface=eth0# 给侧门(wlan0)挂“trusted 区”的牌子
sudo firewall-cmd --zone=trusted --add-interface=wlan0

→ 从此,所有从 eth0 接口(正门)进来的流量,自动进入 “public 区”(大堂),遵守大堂的规矩;从 wlan0(侧门)进来的,直接进 “trusted 区”(办公区),随便访问。

3. 更换接口绑定:“换牌子”
# 把正门(eth0)的牌子换成“block 区”
sudo firewall-cmd --zone=block --change-interface=eth0

→ 原本走正门的流量,现在被分到 “block 区”(黑名单区),进来就被拦,相当于 “正门暂时关闭,来人就赶”。

4. 移除接口绑定:“摘牌子”
# 摘掉正门(eth0)的牌子
sudo firewall-cmd --zone=public --remove-interface=eth0

→ 接口 eth0 不再属于任何区域,默认会归到 firewalld 的 “默认区域”(比如 public),相当于 “临时摘牌,暂时按大楼默认规矩走”。

5. 永久生效:“把牌子钉死”

source 管理一样,临时操作在服务器重启后会失效,需要:

sudo firewall-cmd --runtime-to-permanent

→ 相当于 “用钉子把牌子钉死在门上”,下次重启大楼,牌子还在,规矩不变。

总结(保安视角)

你作为服务器大楼的保安:

  • 每个 interface 是一个 “大门”,流量从哪个门进来,就先看这个门挂了哪个 “区域牌子”;
  • 你不用逐个检查每个访客,只要管好 “大门挂什么牌子”,就能让该门的所有流量自动遵守对应区域的规则;
  • 比如给连接公网的 eth0 挂 “public 区”(严格安检),给内部局域网的 eth1 挂 “trusted 区”(直接放行),省心又高效。
#看zone中interface
[root@server ~ 15:07:57]# firewall-cmd --list-interfaces
ens33 ens36
# 查看interface属于哪个zone
[root@server ~ 15:09:19]# firewall-cmd --get-zone-of-interface=ens33
public
[root@server ~ 15:09:58]# firewall-cmd --get-zone-of-interface=ens36
public
# 查看interface是否添加
[root@server ~ 15:10:02]# firewall-cmd --query-interface=ens33
yes
# 将interface变更到其他zone
[root@server ~ 15:10:28]# firewall-cmd --change-interface=ens32 --zone=home
success
# 删除zone中interface
[root@server ~ 15:11:02]# firewall-cmd --remove-interface=ens32 --zone=home
success

service 管理

# 查看放行服务列表
[root@server ~ 15:29:46]# firewall-cmd --list-services 
dhcpv6-client ssh
# 添加放行服务
[root@server ~ 15:30:00]# firewall-cmd --add-service=http
success
# 删除服务
[root@server ~ 15:30:27]# firewall-cmd --remove-service=http
success

port 管理

#添加服务
[root@server ~ 15:30:49]# firewall-cmd --add-service=http
success
#将配置文件移走,导致不能正常访问
[root@server ~ 15:31:47]# mv /usr/lib/firewalld/services/http.xml ~
[root@server ~ 15:32:38]# systemctl reload firewalld.service 
# 添加放行端口
[root@server ~ 15:33:55]# firewall-cmd --add-port=80/tcp
success
#能用端口正常访问
#删除端口
[root@server ~ 15:34:21]# firewall-cmd --remove-port=80/tcp
success

masquerade 管理

如果把服务器当成一个 “带多个门的房子”,那 masquerade(地址伪装)就像是给房子装了个 “智能快递柜”,专门帮屋里的人收发外面的包裹,还会悄悄 “换标签”。

举个生活场景:
你家(内网)有三口人(设备 A:192.168.1.2,设备 B:192.168.1.3,设备 C:192.168.1.4),但房子对外只有一个门牌号(服务器公网 IP:203.0.113.5)。

  • 当设备 A 想网购(访问外网),它写的收货地址是自己的房间号(192.168.1.2),但这个地址外面的快递员不认识(内网 IP 无法直接被外网识别)。
  • 这时 masquerade 这个 “智能快递柜” 就发挥作用了:它会把包裹上的 “房间号标签” 换成房子的 “大门牌号”(203.0.113.5),再寄出去。
  • 卖家发货(外网回信)时,包裹会寄到 “大门牌号”,快递柜收到后,会根据记录(类似快递柜的取件码),把包裹准确转交给设备 A。

整个过程中,外面的人永远只知道 “203.0.113.5” 这个门牌号,不知道屋里具体是谁在购物 —— 既让内网设备能正常上网,又藏起了它们的真实 “房间号”,这就是 masquerade 的核心作用。

开启它,就像给房子激活了 “共用门牌号” 功能;关闭它,内网设备就没法通过这个门对外寄东西了~

# 启动 masquerade
[root@server ~ 15:35:54]# firewall-cmd --add-masquerade 
success

forward-port 管理

使用 port forward前,确保对应zone启用masquerade功能。

# 访问本机端口1022转发到本机22
[root@server ~ 16:01:00]# firewall-cmd --add-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.8.11
success
#移除
[root@server ~ 16:07:27]# firewall-cmd --remove-forward-port=port=1022:proto=tcp:toport=22:toaddr=10.1.8.11
success

登录root@10.1.8.10:1022自动转到10.1.8.11:22上

实例:

[root@server ~ 16:19:40]# firewall-cmd --add-forward-port=port=1080:proto=tcp:toport=80:toaddr=10.1.8.11
success
[root@server ~ 16:21:55]# firewall-cmd --remove-forward-port=port=1080:proto=tcp:toport=80:toaddr=10.1.8.11
#在10.1.8.11客户机上写入
[root@client ~ 16:20:35]# echo hello world from client > /var/www/html/index.html
#访问10.1.8.10:1080自动跳转到10.1.8.11:80上出现 ‘hello world from client’字样
http://www.dtcms.com/a/316020.html

相关文章:

  • selenium自动化收集资料
  • MLP-Mixer: An all-MLP Architecture for Vision
  • 计算机基础:操作系统学习的基石
  • 【前端】Node.js 简易服务器搭建全指南:从基础到实践
  • 调试|谷歌浏览器调试长连接|调试SSE和websocket
  • Redis内存耗尽时的应对策略
  • Day115 SpringBoot整合Redis,RedisTemplate和注解两种方式的使用
  • SQL164 删除表
  • 输入12-21V输出5V 10A电源转换芯片方案
  • 什么是模型并行?
  • C语言基础_随机数、数组、函数、指针
  • 注意点:如何使用conda创建虚拟环境并使用虚拟环境以及当安装相关库时,如何指定安装到那个环境里面 ---待看
  • Java中公用字符串工具类拿走、直接用
  • 山东省天地图API申请并加载到QGIS和ArcGIS Pro中
  • 什么是mysql的垂直分表,理论依据是什么,如何使用?
  • 无人机光伏识别误检率↓83%!陌讯多模态融合算法实战解析
  • PHP获取淘宝商品详情返回参数详解
  • K8S 性能瓶颈排查
  • 路由的类型
  • Linux驱动学习(八)设备树
  • 无人机 × 巡检 × AI识别:一套可复制的超低延迟低空视频感知系统搭建实践
  • BloodHound 8.0 首次亮相,在攻击路径管理方面进行了重大升级
  • 03-顺序表
  • Spring之【详解FactoryBean】
  • 小程序实时保存优化
  • WWDC 25 极地冰原撸码危机:InlineArray 与 Span 的绝地反击
  • Dell电脑Windows系统更新后声卡驱动无法识别插线耳机问题
  • WebRTC音视频编码模块深度解析:从编解码器到自适应码率控制(2025技术实践)
  • 【安卓][Mac/Windows】永久理论免费 无限ip代理池 - 适合临时快速作战
  • Java+Redis+SpringBoot定时器-定时发布商品