firewalld 快速入门:五分钟上手
基本概念
firewalld 是 CentOS 7+/RHEL 7+ 默认防火墙,基于 zone 管理。每个 zone 是一套规则集,网卡绑定 zone 后应用对应规则。

常用 zone:
– public:默认,对外部网络
– internal:内部网络,信任度较高
– trusted:完全信任,放行所有
– drop:丢弃所有入站(不回复)
– block:拒绝所有入站(回复拒绝)
核心命令
状态管理
# 查看状态
systemctl status firewalld
firewall-cmd --state
# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 开机自启
systemctl enable firewalld
查看配置
# 默认 zone
firewall-cmd --get-default-zone
# 所有 zone
firewall-cmd --get-zones
# 当前 zone 详情
firewall-cmd --list-all
# 指定 zone 详情
firewall-cmd --zone=public --list-all
# 所有 zone 全部规则
firewall-cmd --list-all-zones
# 查看开放端口
firewall-cmd --list-ports
# 查看开放服务
firewall-cmd --list-services
端口管理
# 开放端口(立即生效)
firewall-cmd --add-port=8080/tcp
# 开放端口(永久生效)
firewall-cmd --permanent --add-port=8080/tcp
# 移除端口
firewall-cmd --remove-port=8080/tcp
firewall-cmd --permanent --remove-port=8080/tcp
# 端口范围
firewall-cmd --add-port=3000-4000/tcp
# 批量添加(脚本常用)
for port in 80 443 8080; do
firewall-cmd --permanent --add-port=${port}/tcp
done
服务管理
# 查看预定义服务
firewall-cmd --get-services
# 开放服务
firewall-cmd --add-service=http
firewall-cmd --permanent --add-service=https
# 移除服务
firewall-cmd --remove-service=http
Zone 操作
# 修改默认 zone
firewall-cmd --set-default-zone=internal
# 查看网卡绑定 zone
firewall-cmd --get-active-zones
# 修改网卡 zone
firewall-cmd --zone=internal --change-interface=eth0
firewall-cmd --permanent --zone=internal --change-interface=eth0
实战场景
场景1:Web 服务器
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --permanent --add-port=8443/tcp
firewall-cmd --reload
场景2:内网服务隔离
# 内网网卡用 internal zone
firewall-cmd --permanent --zone=internal --change-interface=eth1
# 内网放通 MySQL
firewall-cmd --permanent --zone=internal --add-service=mysql
# 外网只开 SSH
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload
场景3:紧急封禁 IP
# 临时封禁
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
# 永久封禁
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
# 封禁 IP 段
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" drop'
场景4:端口转发
# 将本机 80 转发到 8080
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
# 转发到其他机器
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10:toport=80
# 需要开启 masquerade
firewall-cmd --permanent --add-masquerade
避坑指南
- 永远先加 –permanent 再加 –reload,否则重启失效
- –reload 不会中断现有连接,安全放心
- 不要直接用 iptables,firewalld 重启会覆盖
- 检查规则顺序:rich-rule 优先级最高
- 生产环境慎用 –complete-reload,会断所有连接
常用技巧
# 查看规则编号(方便插入/删除)
firewall-cmd --zone=public --list-rich-rules
# 调试模式(看详细日志)
firewall-cmd --log-denied=all
journalctl -u firewalld -f
# 导出/导入规则
firewall-cmd --list-all-zones > firewall-backup.txt
# 恢复时逐行执行 --add 命令
以上就是 firewalld 日常够用的全部操作。遇到复杂场景直接上 rich-rule,比搞一堆 zone 省事。记住,改完规则记得 reload。
💻 安全运维 / Linux运维 / 渗透测试 技术支持
业务需求可联系博客作者
