firewall-cmd --lockdown-on 是启用 firewalld 的 D-Bus 访问控制机制,仅限制白名单外的非 root 进程通过 D-Bus 修改规则,不防 root 提权、不保护配置文件、不阻止直接编辑 XML 或 iptables 操作,需配合最小权限、SELinux、文件权限等纵深防御措施才有效。

firewall-cmd --lockdown-on 并不是用来“强行锁定防火墙运行配置防止本地提权进程恶意修改规则”的安全加固手段,而是一个启用 lockdown 模式的开关——它的作用是限制哪些进程可以通过 D-Bus 接口修改 firewalld 规则,本质是访问控制机制,而非防篡改或防提权的底层防护。
真正起效的前提是:firewalld 必须以非 root 用户(如 firewalld 系统用户)运行,且系统启用了 D-Bus 的策略限制。但现实中,firewalld 默认由 root 启动并监听系统总线,普通用户无法调用其 D-Bus 接口;而具备 root 权限的进程(包括已提权的恶意进程)完全绕过 lockdown 机制——它不阻止 root 进程执行 firewall-cmd 命令,也不加密或校验配置文件。
? lockdown 模式的真实作用与配置方式
--lockdown-on 启用后,firewalld 会读取 /etc/firewalld/firewalld.conf 中的 Lockdown 配置,并强制加载 /etc/firewalld/lockdown-whitelist.xml 白名单,只允许白名单中指定的二进制路径、D-Bus 名称、用户或上下文发起规则变更。
-
✅ 它能阻止:
- 普通用户(如
alice)通过firewall-cmd --add-port=8080/tcp修改规则 - 未签名或路径不在白名单中的脚本(如
/tmp/exploit.sh)调用 D-Bus 接口 - 第三方 GUI 工具(如
firewall-config)在无显式授权时操作
- 普通用户(如
-
❌ 它不能阻止:
- root 用户或
sudo执行的任何firewall-cmd命令(默认 bypass) - 直接编辑
/etc/firewalld/zones/public.xml后--reload - 攻击者获得 root 权限后删除白名单、关闭 firewalld、换用
iptables直接操作
- root 用户或
✅ 正确启用 lockdown 的步骤(需配合最小权限设计)
-
确认 firewalld 已启用并运行
sudo systemctl is-active firewalld # 应返回 "active"
-
启用 lockdown 模式
sudo firewall-cmd --lockdown-on
⚠️ 注意:该命令立即生效,但若白名单为空,所有非 root D-Bus 调用将被拒绝(包括部分 systemd 服务),建议先配置白名单。
-
配置白名单
/etc/firewalld/lockdown-whitelist.xml示例(允许firewall-cmd和systemd调用):<?xml version="1.0" encoding="utf-8"?><whitelist><command name="/usr/bin/firewall-cmd"></command><dbus name="org.fedoraproject.FirewallD1"></dbus><user name="root"></user><user name="systemd"></user></whitelist>
-
重载 firewalld 让白名单生效
sudo firewall-cmd --reload
-
验证 lockdown 状态
sudo firewall-cmd --lockdown-state # 返回 "enabled"
?️ 真正防提权篡改的补充措施(必须做)
| 措施 | 说明 |
|---|---|
| 严格限制 root 访问 | 禁用密码登录、启用 SSH 密钥+证书认证、审计 sudo 使用(/var/log/auth.log) |
| 保护配置文件权限 |
sudo chmod 600 /etc/firewalld/*.xml,sudo chown root:root /etc/firewalld/
|
| 禁用不需要的服务 | 如无需图形界面,卸载 firewall-config、firewall-applet,减少攻击面 |
| 启用 SELinux/AppArmor | 限制进程对 /etc/firewalld/ 和 D-Bus 接口的写入能力(例如 SELinux firewalld_t 域策略) |
| 监控配置变更 | 用 auditd 监控 /etc/firewalld/ 目录:-w /etc/firewalld/ -p wa -k firewalld_conf
|
❗关键提醒
-
--lockdown-on不等于“防 root”,它只是 D-Bus 层的细粒度访问控制,不是内核级防护。 - 若系统已被提权,攻击者可直接
systemctl stop firewalld && iptables -P INPUT ACCEPT彻底绕过。 - 生产环境应遵循最小权限原则:避免长期使用 root shell,用
sudo -l审查权限,启用多因素认证(MFA)和集中日志审计。
不复杂但容易忽略:lockdown 是纵深防御的一环,单独启用意义有限,必须嵌入整体权限管控体系中。











