firewall-cmd --direct 可绕过 firewalld 抽象层直接操作 netfilter,实现秒级生效的临时规则,运行时有效、重启即失,适用于应急封禁、限速和调试等场景。

直接用 firewall-cmd --direct 可以绕过 firewalld 的区域和服务抽象层,直接向底层 netfilter(iptables/ip6tables)链中插入临时规则,实现秒级生效的应急阻断,且不触发 --reload,不会清空现有连接或影响其他 firewalld 规则。
确认 firewalld 正在运行并支持 direct 操作
Direct 接口依赖 dbus 通信和 firewalld 服务活跃状态,需先验证:
- 执行
firewall-cmd --state确保输出为running - 运行
systemctl status firewalld查看服务无报错 - Direct 规则仅对当前运行时有效,无需加
--permanent,也不写入 XML 配置
常用应急阻断场景与命令示例
所有以下命令均为运行时生效,重启 firewalld 或系统后自动消失,适合快速封禁、测试或临时处置:
-
封禁单个恶意 IP(IPv4):
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 203.0.113.45 -j DROP
(0表示插入到 INPUT 链最顶端,优先匹配) -
封禁整个网段(如扫描源):
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 198.51.100.0/24 -j REJECT --reject-with icmp-host-prohibited -
限制某端口访问频次(防暴力破解):
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPTfirewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -m state --state NEW -j DROP
(注意:第二条序号用1,确保在限速 ACCEPT 后执行 DROP) -
临时屏蔽某协议出向流量(如阻断外连 C2):
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -p tcp -d 192.0.2.100 --dport 443 -j DROP
查看、管理与清理 direct 规则
Direct 规则独立于 zone/service 规则,需用专用子命令操作:
- 列出所有已添加的 direct 规则:
firewall-cmd --direct --get-all-rules - 删除某条规则(需完整复述原命令,把
--add-rule换成--remove-rule):firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -s 203.0.113.45 -j DROP - 清空全部 direct 规则(慎用):
firewall-cmd --direct --remove-rules ipv4 filter INPUT
注意事项与避坑提醒
Direct 是强大但低阶的操作方式,使用时需格外注意:
- 规则链名必须准确:常用为
INPUT(入站)、OUTPUT(出站)、FORWARD(转发),拼错将报错 - 序号(priority)决定匹配顺序:
0最先,数值越小越靠前;重复序号会覆盖,建议用0或明确递增 - 不能混用 iptables 命令与 firewall-cmd direct:二者都操作同一内核链,手动用
iptables -L可看到 direct 插入的规则,但不要用iptables -D删除,应统一用firewall-cmd --direct --remove-rule - 富规则(rich rule)更适合带源地址+端口+日志的组合策略;direct 更适合纯阻断、限速、调试等底层控制场景

















