在Rocky Linux中使用firewalld配置特定服务的防火墙规则时,我的实践经验可分为以下步骤和关键挑战:
-
基础环境确认
- 确保firewalld已安装且运行:
systemctl status firewalld
- 检查预定义服务列表:
firewall-cmd --get-services
,例如http、ssh、samba等内置服务名称可能因版本差异存在变化
- 确保firewalld已安装且运行:
-
核心配置流程
- 添加服务规则:
firewall-cmd --zone=public --add-service=http --permanent
注意--permanent
参数必须与--reload
配合生效,但直接操作生产环境时建议先测试非持久化规则:
firewall-cmd --zone=public --add-service=http && firewall-cmd --reload
- 添加服务规则:
- 自定义端口映射:
当服务未预定义时(如自定义TCP 8080端口):
firewall-cmd --permanent --zone=public --add-port=8080/tcp
需特别注意协议类型(tcp/udp)的精确匹配
- 实践挑战与解决方案
- 服务定义缺失:
在Kubernetes等场景中,自定义服务需创建XML文件至/usr/lib/firewalld/services/
,我曾遇到Calico网络插件需要手动创建bird.xml服务定义的案例
- 服务定义缺失:
-
规则冲突检测:
使用firewall-cmd --list-all-zones
交叉验证时,发现过同一端口在不同zone重复开放导致业务异常。此时需要--remove-port
清理冲突规则 -
动态端口服务:
处理FTP等需要动态端口范围的服务时,必须同时加载内核模块:
modprobe nf_conntrack_ftp
并在firewalld配置中启用helper
:
firewall-cmd --permanent --zone=public --add-rich-rule='rule service name="ftp" audit limit value="1/m" accept'
-
生产环境验证
- 规则生效后立即使用
telnet <IP> <PORT>
或nc -vz
验证连通性 - 曾遇到因SELinux未正确配置导致规则生效但服务仍被拦截的情况,需配合
ausearch
审查日志
- 规则生效后立即使用
-
灾备策略
- 定期导出配置:
firewall-cmd --runtime-to-permanent
- 备份
/etc/firewalld/
目录,在误操作导致服务中断时可快速回滚
- 定期导出配置:
特殊案例:在为GlusterFS配置时,发现需要同时开放111(TCP/UDP)、24007-24008/TCP等多端口,此时采用--add-port=24007-24008/tcp
范围语法比单独声明更高效。最终通过创建自定义service XML文件实现规则集中管理,大幅降低维护成本。