1. AnolisOS防火墙基础认知
作为一款源自龙蜥社区的企业级Linux发行版,AnolisOS继承了RHEL生态的技术优势,其防火墙系统采用与CentOS/RHEL相同的firewalld架构。但许多从Ubuntu或Debian迁移过来的开发者,初次接触时往往会被其动态规则管理机制所困惑。这里需要明确的是:firewalld并非简单的iptables前端,而是通过zone-service机制实现了网络环境的情景化配置。
我在实际运维中发现,AnolisOS默认预装了firewalld但未启用,这与CentOS的默认行为不同。启动前建议先确认服务状态:
bash复制systemctl status firewalld
若需要启用并设置开机自启:
bash复制systemctl enable --now firewalld
重要提示:AnolisOS 8/9版本中,若同时安装了iptables-services,务必禁用该服务以避免规则冲突:
bash复制systemctl mask iptables systemctl mask ip6tables
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心区域(Zones)策略配置实战
firewalld的zone概念是其精髓所在。AnolisOS默认包含9个预定义zone(如public、dmz、home等),每个zone本质上是预配置的规则集合。通过以下命令查看所有zone定义:
bash复制firewall-cmd --list-all-zones
2.1 网络接口zone绑定
将ens192网卡绑定到internal zone的实操命令:
bash复制firewall-cmd --zone=internal --change-interface=ens192 --permanent
这里有个易错点:--permanent参数仅写入持久化配置,必须配合以下命令立即生效:
bash复制firewall-cmd --reload
2.2 自定义zone创建
对于需要精细化控制的场景,建议创建自定义zone。例如为Kubernetes节点创建专属zone:
bash复制firewall-cmd --new-zone=k8s-nodes --permanent
firewall-cmd --reload
firewall-cmd --zone=k8s-nodes --add-source=10.244.0.0/16 --permanent
3. 服务(Service)与端口管理技巧
3.1 预定义服务的使用
firewalld内置了300+服务定义(如http、ssh、mysql),查看全部服务:
bash复制firewall-cmd --get-services
添加HTTP服务到public zone的规范操作:
bash复制firewall-cmd --zone=public --add-service=http --permanent
3.2 自定义服务创建
当需要开放非标准端口时,建议创建自定义服务而非直接开放端口。例如为自定义监控服务创建定义:
xml复制<!-- /etc/firewalld/services/my-monitor.xml -->
<service>
<short>My Monitor</short>
<description>Custom monitoring service</description>
<port protocol="tcp" port="9095"/>
<port protocol="udp" port="9096"/>
</service>
加载并应用新服务:
bash复制firewall-cmd --reload
firewall-cmd --zone=public --add-service=my-monitor --permanent
4. 高级规则与故障排查
4.1 富规则(Rich Rules)应用
对于复杂ACL需求,比如允许192.168.1.100访问3306端口但拒绝其他IP:
bash复制firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" port port="3306" protocol="tcp" reject' --permanent
4.2 规则调试与日志
启用防火墙调试日志(临时生效):
bash复制firewall-cmd --set-log-denied=all
查看被拒绝的连接记录:
bash复制journalctl -u firewalld -g "DENIED"
4.3 常见故障处理
当遇到规则不生效时,按以下顺序排查:
- 确认当前生效的zone:
firewall-cmd --get-active-zones - 检查运行时配置与持久化配置差异:
firewall-cmd --list-allvsfirewall-cmd --list-all --permanent - 验证iptables底层规则:
iptables-save | grep <相关链>
5. 生产环境最佳实践
经过多个AnolisOS生产集群的实践验证,我总结出以下黄金准则:
-
最小权限原则:默认zone应设置为drop或block,仅对必要服务开放
bash复制
firewall-cmd --set-default-zone=block -
变更管理流程:
- 测试环境先使用
--timeout=300参数临时添加规则 - 验证无误后再添加
--permanent参数 - 最后统一执行
firewall-cmd --reload
- 测试环境先使用
-
批量部署方案:
使用ansible批量配置防火墙:yaml复制- name: Configure firewalld ansible.posix.firewalld: zone: public service: "{{ item }}" permanent: yes state: enabled loop: - http - https - ssh -
审计与备份:
定期导出当前配置:bash复制firewall-cmd --list-all-zones > firewall_backup_$(date +%F).txt
对于需要处理大量动态IP的场景,建议结合ipset提升性能:
bash复制firewall-cmd --new-ipset=trusted-ips --type=hash:ip --permanent
firewall-cmd --ipset=trusted-ips --add-entry=192.168.1.100 --permanent
firewall-cmd --zone=public --add-source=ipset:trusted-ips --permanent
