温馨提示×

Linux防火墙如何使用firewalld服务

小樊
33
2026-06-30 17:44:33
栏目: 智能运维

在 Linux 中,firewalld 是一个动态防火墙管理工具,默认用于 RHEL / CentOS / Rocky / Alma / Fedora 等发行版。下面从基础概念 → 常用操作 → 实战示例系统讲解如何使用 firewalld


一、firewalld 基本概念

1️⃣ firewalld 与 iptables 的关系

  • firewalldiptables / nftables 的前端管理工具
  • 支持 动态规则更新(无需重启服务)
  • 使用 zone(区域)service(服务) 的概念

2️⃣ 重要概念

✅ Zone(区域)

决定默认信任级别,例如:

Zone 说明
public 默认区域,外部网络
trusted 完全信任
drop 丢弃所有包
block 拒绝连接
internal 内网

✅ Service(服务)

一组预定义的端口 + 协议,例如:

  • ssh
  • http
  • https
  • mysql

二、安装与启动 firewalld

1️⃣ 安装

yum install firewalld -y
# 或
apt install firewalld -y

2️⃣ 启动并设置开机自启

systemctl start firewalld
systemctl enable firewalld

3️⃣ 查看状态

systemctl status firewalld
firewall-cmd --state

三、firewalld 基础操作

1️⃣ 查看当前活动 zone

firewall-cmd --get-active-zones

2️⃣ 查看默认 zone

firewall-cmd --get-default-zone

3️⃣ 修改默认 zone

firewall-cmd --set-default-zone=public

四、端口与服务管理(最常用)

✅ 放行服务(推荐)

# 临时生效
firewall-cmd --add-service=http

# 永久生效
firewall-cmd --add-service=http --permanent

✅ 放行端口

# 放行 TCP 8080
firewall-cmd --add-port=8080/tcp

# 永久生效
firewall-cmd --add-port=8080/tcp --permanent

✅ 放行 UDP 端口

firewall-cmd --add-port=53/udp --permanent

五、重新加载规则

firewall-cmd --reload

⚠️ 永久规则必须 reload 才生效


六、查看防火墙规则

1️⃣ 查看当前 zone 规则

firewall-cmd --list-all

2️⃣ 查看所有 zone

firewall-cmd --list-all-zones

3️⃣ 查看已放行服务

firewall-cmd --list-services

4️⃣ 查看端口

firewall-cmd --list-ports

七、删除规则

# 删除服务
firewall-cmd --remove-service=http --permanent

# 删除端口
firewall-cmd --remove-port=8080/tcp --permanent

八、富规则(Rich Rules,高级用法)

✅ 允许指定 IP 访问 SSH

firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'

✅ 拒绝某 IP

firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="10.0.0.5" drop'

九、端口转发(实战)

示例:80 → 8080

firewall-cmd --permanent \
--add-forward-port=port=80:proto=tcp:toport=8080

firewall-cmd --reload

⚠️ 需要开启 IP 转发:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

十、常用实战示例

✅ 放行 Web 服务

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

✅ 仅允许公司 IP 访问 MySQL

firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port=3306 protocol=tcp accept'

十一、关闭 / 禁用 firewalld(不推荐)

systemctl stop firewalld
systemctl disable firewalld

十二、常见错误排查

❌ 规则不生效?

  • 是否加了 --permanent
  • 是否执行 firewall-cmd --reload

❌ SSH 被锁住?

# 确保 SSH 不被误删
firewall-cmd --add-service=ssh --permanent

总结一句话

firewalld = 区域 + 服务/端口 + 永久/临时规则 + reload

如果你需要,我可以:

  • ✅ 帮你写一套 生产服务器防火墙模板
  • ✅ 对比 iptables vs firewalld
  • ✅ 根据 你的系统版本 给出精确命令

0