Rocky Linux 9(firewalld + nftables 后端) 在生产环境中最常见、最实用的操作整理,涵盖安装、启停、查看、规则管理、白名单、端口控制等核心命令。
🧱 一、基础操作
| 操作 | 命令 |
|---|---|
| 安装 firewalld | dnf install -y firewalld |
| 启动并设为开机自启 | systemctl enable --now firewalld |
| 查看状态 | systemctl status firewalld |
| 查看后端(Rocky9 默认 nftables) | firewall-cmd --info-backend |
| 临时关闭防火墙(慎用) | systemctl stop firewalld |
| 永久禁用(慎用) | systemctl disable firewalld |
🧰 二、查看规则状态
firewall-cmd --state firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --zone=public --list-all firewall-cmd --list-services firewall-cmd --list-ports
⚙️ 三、常见端口与服务管理
➕ 开放端口
# 临时(重启失效) firewall-cmd --add-port=8080/tcp # 永久(需 reload) firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload
➖ 关闭端口
firewall-cmd --permanent --remove-port=8080/tcp firewall-cmd --reload
➕ 开放服务(基于 /usr/lib/firewalld/services/*.xml)
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
🔒 四、白名单/黑名单控制
✅ 允许特定 IP
firewall-cmd --permanent --add-source=192.168.1.10 firewall-cmd --reload
🚫 拒绝某个 IP(使用 rich rule)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.5" reject' firewall-cmd --reload
🧩 五、自定义区域(Zone)
创建新区域
firewall-cmd --permanent --new-zone=webzone firewall-cmd --permanent --zone=webzone --add-source=192.168.10.0/24 firewall-cmd --permanent --zone=webzone --add-service=http firewall-cmd --permanent --zone=webzone --add-service=https firewall-cmd --reload
查看所有区域
firewall-cmd --get-zones firewall-cmd --list-all-zones
设置默认区域
firewall-cmd --set-default-zone=public
🧱 六、NAT / 转发配置(容器或代理常用)
启用转发
firewall-cmd --permanent --add-masquerade firewall-cmd --reload
端口转发
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload
🔍 七、调试与验证
查看实时规则(nftables)
nft list ruleset
查看 firewalld 生成的 nft 表
nft list table inet firewalld
测试端口可达性
ss -lntup nc -vz <host_ip> 80
🧯 八、生产环境常见策略模板
🚦 默认安全模板(常用)
# 启动 firewalld systemctl enable --now firewalld # 仅开放 22, 80, 443 firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # 禁用其他 firewall-cmd --set-default-zone=drop firewall-cmd --reload
效果: 仅允许 22/80/443,其余流量全部丢弃。
🧩 白名单全通模板
firewall-cmd --permanent --new-zone=whitelist firewall-cmd --permanent --zone=whitelist --add-source=1.2.3.4 firewall-cmd --permanent --zone=whitelist --add-source=5.6.7.8 firewall-cmd --permanent --zone=whitelist --set-target=ACCEPT firewall-cmd --set-default-zone=drop firewall-cmd --reload
效果: 仅 1.2.3.4 与 5.6.7.8 可访问所有端口。
📘 九、日志与持久化
开启日志记录(拒绝时)
firewall-cmd --set-log-denied=all
查看日志:
journalctl -xeu firewalld tail -f /var/log/messages
✅ 十、快速恢复默认配置
firewall-cmd --complete-reload firewall-cmd --permanent --reload
或彻底重置:
rm -rf /etc/firewalld/zones/* systemctl restart firewalld

