在Rocky Linux 9中通过firewalld创建自定义规则的核心流程可分为规则定义、区域管理、规则持久化三阶段。以下是实践方法论及经验总结:
-
直接规则注入 使用
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
实现精准协议控制。曾遇到多网卡环境下规则未绑定特定zone导致流量逃逸,需通过--zone=dmz
明确作用域。 -
富规则分层架构
firewall-cmd --add-rich-rule='rule family=ipv4 source address=203.0.113.5/32 port port=3306 protocol=tcp reject'
可构建复杂访问矩阵。生产环境中发现富规则优先级高于基础规则,需通过--priority=32765
参数调整执行顺序。 -
服务对象化封装 创建/etc/firewalld/services/mycustom.xml定义复合端口协议,配合
--add-service=mycustom
实现规则复用。在Kubernetes节点部署时遭遇服务定义冲突,需检查/usr/lib/firewalld/services目录的默认模板。 -
运行时调试技巧 通过
nft list ruleset
验证底层nftables实现,曾发现firewalld规则转换错误导致TCP MSS值异常,需使用--direct --passthrough
注入原生nft命令。 -
持久化陷阱 非
--permanent
模式规则在reload时丢失,开发环境中建议采用firewall-cmd --runtime-to-permanent
自动同步。但需注意该命令会覆盖手动修改的永久配置。
典型故障案例:在双栈环境中添加IPv6规则时,未显式指定family=ipv6
导致规则仅作用于IPv4。通过journalctl -u firewalld -f
观察到规则解析错误日志后修正。
最终规则部署应遵循:测试环境验证→分阶段rollout→nftables规则审计三层保障机制。建议将复杂规则拆分为独立zone,通过firewall-cmd --zone=trusted --change-interface=eth1
实现物理隔离。