找回密码
立即注册
搜索
发回帖 发新帖

6783

积分

0

好友

859

主题
发表于 10 小时前 | 查看: 1| 回复: 0

从 CentOS 7 开始,Firewalld 已经取代 iptables 成为默认的防火墙管理服务。与 iptables 相比,Firewalld 的规则变更不需要清空旧规则再整体重载,而是支持动态更新策略。同时它还引入了网络防火墙中 区域(zone)的概念,你可以根据家庭、公共、受信任等不同场景快速切换合适的策略。

Firewalld 服务的主配置文件是 firewalld.conf,策略配置文件以 XML 格式为主,分布在两个目录:/etc/firewalld 存放用户配置,/usr/lib/firewalld 存放系统预定义配置。

[root@yyzcdb81 firewalld]# pwd
/etc/firewalld
[root@yyzcdb81 firewalld]# ll
总用量 8
-rw-r--r--. 1 root root 2706 10月  1 2020 firewalld.conf
drwxr-x---. 2 root root    6 10月  1 2020 helpers
drwxr-x---. 2 root root    6 10月  1 2020 icmptypes
drwxr-x---. 2 root root    6 10月  1 2020 ipsets
-rw-r--r--. 1 root root  272 10月  1 2020 lockdown-whitelist.xml
drwxr-x---. 2 root root    6 10月  1 2020 services
drwxr-x---. 2 root root   46 10月 14 2025 zones
[root@yyzcdb81 firewalld]# 
# ---- 上方为用户配置目录,下方为系统预置目录 ----
[root@yyzcdb81 firewalld]# pwd
/usr/lib/firewalld
[root@yyzcdb81 firewalld]# ll
总用量 16
drwxr-xr-x. 2 root root  224 10月 14 2025 helpers
drwxr-xr-x. 2 root root 4096 10月 14 2025 icmptypes
drwxr-xr-x. 2 root root   20 10月 14 2025 ipsets
drwxr-xr-x. 2 root root 8192 10月 14 2025 services
drwxr-xr-x. 2 root root  163 10月 14 2025 zones
[root@yyzcdb81 firewalld]# 

1. Firewalld 防火墙基本概念

区域的概念

“区域”是针对给定位置或场景(如家庭、公共、受信任区域等)预设的信任级别规则集。不同区域允许不同的网络服务和入站流量类型,同时拒绝其他流量。Firewalld 预先准备了几种常用区域,默认使用 public 区域。

网络区域名称 默认配置
trusted(信任区域) 可以接收所有的网络连接
home(家庭区域) 用于家庭网络,仅接收 SSH、MDNS、ipp-client、samba-client 与 dhcpv6-client 服务连接
internal(内部区域) 同上,用于内部区域
work(工作区域) 用于工作区域,仅接收 SSH、ipp-client 与 dhcpv6-client 服务连接
public(公共区域) 用于公共区域,仅接收 SSH 或 dhcpv6-client 服务连接
external(外部区域) 拒绝进入的流量,除非与出去的流量相关;如果流量与 SSH 服务相关,则允许进入
dmz(非军事区域) 仅接收 SSH 服务
block(限制) 拒绝所有网络连接
drop(丢弃) 任何接收的网络数据包都被丢弃,没有任何回复

2. Firewalld 防火墙的使用方法

Firewalld 提供两种管理方式:

  • 命令行配置
  • 图形界面配置

图形界面配置在终端执行:

[root@yyzcdb81 firewalld]# firewall-config

即可打开图形配置界面:

Firewalld 图形配置界面 firewall-config 区域与服务设置截图

下面主要说明命令行配置。命令行配置,使用 firewall-cmd 命令,它的常用参数如下表:

参数 作用
--get-default-zone 获取默认区域名称
--set-default-zone=<区域名称> 设置默认区域(永久生效)
--get-zones 获得所有可用区域名称
--get-services 获得预先定义的服务
--get-active-zones 获得当前正在使用的区域与网卡名称
--add-source= 将源自此 IP 或子网的流量导向指定的区域
--remove-source= 不再将源自此 IP 或子网的流量导向这个区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启应急状态模式
--panic-off 关闭应急状态模式

Firewalld 配置的防火墙策略存在两种模式:运行时(Runtime)模式和永久(Permanent)模式。

Firewalld 配置策略:运行时模式与永久模式思维导图

具体对比如下:

对比维度 运行时模式 (Runtime) 永久模式 (Permanent)
是否为默认模式 是(Firewalld 默认) 否
命令行标识 无特殊参数 需添加 --permanent 参数
生效速度 立即生效 默认需重启系统;或执行 firewall-cmd --reload 立即生效
持久性 重启系统失效 永久有效(保存至配置文件中)
适用场景 临时测试、临时调整策略 正式配置、需长期保持的规则

3. Firewalld 防火墙配置举例

(1)查询当前主机区域

[root@yyzcdb81 ~]# firewall-cmd --get-default-zone
public
[root@yyzcdb81 ~]# 

(2)查看当前主机的 ens33 网卡所属区域

[root@yyzcdb81 ~]# firewall-cmd --get-zone-of-interface=ens33
public
[root@yyzcdb81 ~]# 

(3)查看 public 区域中是否允许 SSH 和 HTTP 服务

[root@yyzcdb81 ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@yyzcdb81 ~]# firewall-cmd --zone=public --query-service=http
yes
[root@yyzcdb81 ~]# 

(4)设置默认区域为 dmz,并重载防火墙

[root@yyzcdb81 ~]# firewall-cmd --set-default-zone=dmz
success
[root@yyzcdb81 ~]# firewall-cmd --reload
success
[root@yyzcdb81 ~]# 

(5)端口转发

端口转发功能可以将原本到某端口的数据包转发到其他端口。SSH 服务默认的启动端口是 22,将默认端口转发到该主机的其他端口用于连接,修改服务的默认端口有助于提升服务的安全性。

Firewalld 端口转发语法如下:

firewall-cmd --permanent --zone=区域 --add-forward-port=源端口:proto=协议:toport=目的端口:toaddr=目的ip

比如,将访问主机 172.16.250.81 的 888 端口请求转发到 22 端口,建立 SSH 连接:

[root@yyzcdb81 ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=172.16.250.81
success
[root@yyzcdb81 ~]# 

然后重新加载 firewall 生效:

[root@yyzcdb81 ~]# firewall-cmd --reload
success
[root@yyzcdb81 ~]# 

(6)允许 HTTPS 服务流量通过 public 区域,要求永久生效

[root@yyzcdb81 ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@yyzcdb81 ~]# firewall-cmd --reload
success
[root@yyzcdb81 ~]# 

(7)不允许 HTTP 服务流量通过 public 区域,要求永久生效

[root@yyzcdb81 ~]# firewall-cmd --permanent --zone=public --remove-service=http
success
[root@yyzcdb81 ~]# firewall-cmd --reload
success
[root@yyzcdb81 ~]# 

(8)允许 8080 与 8081 端口流量通过 public 区域,要求永久生效

[root@yyzcdb81 ~]# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
success

# 接着查看开放的端口
[root@yyzcdb81 ~]# firewall-cmd --permanent --zone=public --list-ports
8080-8081/tcp
[root@yyzcdb81 ~]# firewall-cmd --reload
success

(9)不允许 HTTP 服务流量通过 public 区域,要求立即生效

[root@yyzcdb81 ~]# firewall-cmd --zone=public --remove-service=http
success
[root@yyzcdb81 ~]# 

以上就是在 Linux 中管理 Firewalld 防火墙的基础操作。更多 Linux 运维与安全配置实战,可以到 云栈社区 继续交流。




上一篇:中小学知识图谱开源项目 7k Star,自适应诊断帮你追根因
下一篇:LLM-as-a-Judge 可信发布门禁:从校准实验到审计闭环
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-11-13 18:01 , Processed in 0.083388 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表