CentOS Stream 8 的防火墙管理,核心工具就是 firewalld。这款动态防火墙守护进程最大的优势在于支持热更新规则,修改配置后无需重启服务即可立即生效,对生产环境非常友好。其核心玩法涵盖区域管理、端口与服务控制、富规则等高级功能。接下来,我们逐步讲解具体操作步骤。

1. 安装与启动 firewalld
如果系统中尚未安装 firewalld,执行以下命令即可完成部署:
sudo dnf install firewalld
安装完成后,启动服务并将其设置为开机自启动:
sudo systemctl start firewalld # 启动 firewalld 服务
sudo systemctl enable firewalld # 配置开机自动启动
2. 检查防火墙状态
首先确认服务是否正常运行。通过下面两条命令可以清晰查看:
- 查看 firewalld 运行状态(确认是否为
active (running)):sudo systemctl status firewalld - 查看当前防火墙整体状态(是否处于启用状态):
sudo firewall-cmd --state
3. 管理区域(Zone)
区域是 firewalld 中一个核心概念,简单来说就是为不同网络环境设置差异化的安全级别。例如 public(公共区域)、private(私有区域)、trusted(信任区域)等。常用操作包括:
- 查看当前默认区域:
sudo firewall-cmd --get-default-zone - 设置默认区域(例如更改为
public):sudo firewall-cmd --set-default-zone=public - 查看哪些区域处于活动状态,以及它们绑定了哪个网络接口:
sudo firewall-cmd --get-active-zones sudo firewall-cmd --get-zone-of-interface=eth0 # 查看 eth0 接口归属于哪个区域 - 将某个接口绑定到指定区域(例如将
eth0绑定到public区域):sudo firewall-cmd --zone=public --change-interface=eth0 --permanent sudo firewall-cmd --reload
4. 配置端口与服务规则
4.1 管理端口
- 查看当前所有已开放的端口:
sudo firewall-cmd --zone=public --list-ports - 临时开放某个端口(例如
8080/tcp),立即生效但重启后失效:sudo firewall-cmd --add-port=8080/tcp - 永久开放端口,需要重载配置后才能生效:
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload - 删除端口规则(例如关闭
8080/tcp端口):sudo firewall-cmd --permanent --remove-port=8080/tcp sudo firewall-cmd --reload
4.2 管理服务
firewalld 预置了许多常见服务的规则,例如 http、ssh、mysql 等,直接使用服务名进行管理比手动配置端口更加便捷:
- 查看当前允许的服务列表:
sudo firewall-cmd --list-services - 临时允许某个服务(例如
http服务):sudo firewall-cmd --add-service=http - 永久允许服务:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload - 移除服务规则:
sudo firewall-cmd --remove-service=http
5. 配置富规则(Rich Rules)
当基础规则无法满足精细化管控需求时,富规则便派上用场。它支持更灵活的策略,例如允许或拒绝特定 IP、端口或协议,语法相对灵活。以下为几个常用场景:
- 允许特定 IP 访问某端口(例如仅允许
192.168.1.100访问3306/tcp):sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' sudo firewall-cmd --reload - 拒绝特定 IP 访问所有端口(例如封禁
192.168.1.200):sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.200" reject' sudo firewall-cmd --reload - 允许某网段访问某服务(例如允许
192.168.1.0/24整个网段使用ssh服务):sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' sudo firewall-cmd --reload
6. 其他实用操作
- 查看所有防火墙规则(端口、服务、富规则一目了然):
sudo firewall-cmd --list-all - 重载防火墙配置,使永久规则生效,且不会中断现有连接:
sudo firewall-cmd --reload - 完全重载配置,此操作会中断现有连接,一般情况下请谨慎使用:
sudo firewall-cmd --complete-reload - 临时关闭防火墙(生产环境不建议执行此操作):
sudo systemctl stop firewalld
注意事项
- 备份规则:在进行修改之前,建议先备份当前配置,例如使用
sudo firewall-cmd --list-all > firewall-backup.txt。 - 测试规则:尤其是在生产环境中,规则修改后应先通过测试环境验证,确认无误后再正式上线。
- 安全性:遵循最小权限原则——仅开放必要的端口,每少开一个端口就降低一分风险。
以上操作基本覆盖了 CentOS Stream 8 防火墙的核心配置需求,具体如何应用可根据实际场景灵活调整。
