firewalld不存在lockdown命令,因其设计不内置锁定功能,权限控制完全依赖linux系统层机制;防止篡改需严格管控root权限、保护配置文件、限制d-bus访问并启用审计日志。

Firewalld 本身没有名为 “Lockdown” 的命令,也不提供“强行锁定规则防止本地篡改”的功能。这是常见误解,源于对 firewalld 设计目标和 Linux 权限模型的混淆。
为什么不存在 Lockdown 命令?
firewalld 是一个运行在用户空间的服务(firewalld.service),它通过 D-Bus 接口接收配置请求,并将规则下发给内核 netfilter。它的权限控制完全依赖于 Linux 系统本身的访问控制机制:
- 默认情况下,只有 root 用户或具有 sudo 权限的用户 才能执行
firewall-cmd命令; - 普通用户无法调用 D-Bus 方法修改防火墙策略;
- firewalld 不内置密码、角色、审计锁或防覆盖保护等安全加固模块。
真正能限制本地篡改的手段
若需防止非授权人员修改防火墙规则,应从系统层入手,而非依赖不存在的 firewalld 功能:
-
严格管控 root 权限:禁用 root 密码登录,限制 sudoers 文件中可执行
firewall-cmd的用户和命令范围(例如只允许sudo firewall-cmd --list-all,禁止--add-port); -
保护配置文件权限:确保
/etc/firewalld/下所有 XML 文件属主为 root:root,权限设为600或640,防止非 root 用户篡改永久规则; -
禁用 firewalld D-Bus 接口的非 root 访问:检查
/usr/share/dbus-1/system.d/org.fedoraproject.FirewallD1.conf,确认<policy context="default"></policy>下未开放send_destination给 non-root 用户; -
启用审计日志:配合
auditd监控对/etc/firewalld/的写操作及firewall-cmd的执行行为,便于事后追溯。
注意:reload 不等于锁定
有人误将 firewall-cmd --reload 理解为“锁定”。实际上它只是重新加载磁盘上的永久配置(/etc/firewalld/zones/*.xml),并丢弃当前运行时临时规则。这无法阻止有权限者再次执行 --add-port 或 --remove-service。
替代思路:只读运行时 + 强制永久策略
虽不能“锁定”,但可降低误操作风险:
- 避免使用无
--permanent的临时命令,全部配置走永久模式; - 配置完成后执行
firewall-cmd --reload,使运行时状态与磁盘一致; - 定期校验:
firewall-cmd --list-all --permanent与firewall-cmd --list-all输出应相同; - 结合配置管理工具(如 Ansible、Puppet)统一推送和固化规则,人工干预被定义为异常事件。










