在 Linux 中,firewalld 是一个动态防火墙管理工具,默认用于 RHEL / CentOS / Rocky / Alma / Fedora 等发行版。下面从基础概念 → 常用操作 → 实战示例系统讲解如何使用 firewalld。
firewalld 是 iptables / nftables 的前端管理工具决定默认信任级别,例如:
| Zone | 说明 |
|---|---|
| public | 默认区域,外部网络 |
| trusted | 完全信任 |
| drop | 丢弃所有包 |
| block | 拒绝连接 |
| internal | 内网 |
一组预定义的端口 + 协议,例如:
yum install firewalld -y
# 或
apt install firewalld -y
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --get-default-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
firewall-cmd --add-port=53/udp --permanent
firewall-cmd --reload
⚠️ 永久规则必须 reload 才生效
firewall-cmd --list-all
firewall-cmd --list-all-zones
firewall-cmd --list-services
firewall-cmd --list-ports
# 删除服务
firewall-cmd --remove-service=http --permanent
# 删除端口
firewall-cmd --remove-port=8080/tcp --permanent
firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="10.0.0.5" drop'
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
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --permanent \
--add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port=3306 protocol=tcp accept'
systemctl stop firewalld
systemctl disable firewalld
--permanentfirewall-cmd --reload# 确保 SSH 不被误删
firewall-cmd --add-service=ssh --permanent
firewalld = 区域 + 服务/端口 + 永久/临时规则 + reload
如果你需要,我可以: