firewalld保护后端存储集群的核心是按通信角色划分信任边界并实施源–端口级控制:通过public、internal、trusted区域绑定不同网络平面,结合富规则精确限制节点间访问关系,禁用无关服务,显式开放最小必要端口段,并永久配置后重载生效。

用 firewalld 保护后端存储集群,核心不是“开几个端口”,而是按通信角色划分信任边界,再对关键链路做源–端口级控制。存储集群(如 Ceph、MinIO、etcd 后端)流量敏感、协议固定、节点关系明确,适合用区域绑定 + 富规则组合加固。
按网络平面绑定不同区域
存储集群通常存在三类隔离需求:对外提供服务的前端、节点间同步的后端数据面、运维管理通道。不能全放在 public 区域。
- 将连接客户端或负载均衡器的网卡(如 eth0)绑定到 public 区域,仅放行实际暴露的服务(如 s3、nfs、iscsi-target),禁用 dhcpv6-client、mdns 等无关服务
- 将集群内部通信网卡(如 eth1,专用于 OSD/mon/MDS 间通信)绑定到 internal 区域,并设为默认区域:firewall-cmd --set-default-zone=internal
- 若存在专用管理网段(如 10.20.30.0/24),可新建 zone 或直接用 trusted 区域绑定源地址:firewall-cmd --permanent --zone=trusted --add-source=10.20.30.0/24
为存储服务定制最小化端口策略
避免使用 --add-service 放行整套预定义服务(如 ceph 可能含不必要端口),推荐显式开放必需端口段。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- Ceph 集群:internal 区域只开放 mon(6789)、osd(6800–7300)、mgr(8765)、mds(6801)等实际启用的端口范围,而非整个 ceph 服务
- etcd 后端:限制仅允许 peer 节点访问 2380(peer),client 访问 2379(client),且分别指定源地址段:firewall-cmd --permanent --zone=internal --add-port=2379/tcp,再配合富规则进一步约束
- MinIO 分布式模式:开放 9000(API)和 9001(控制台),但仅限 internal 区域,public 区域禁止 9001
用富规则锁定节点间通信关系
存储组件之间是强身份绑定的(例如某 mon 只应被特定 osd 连接),必须用 rich rule 实现“谁–能–连–谁–的–哪–个–端–口”。
- 只允许 mon 节点 10.10.1.10 访问 osd 节点的 6800–7300 端口:firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.10.1.10" port port="6800-7300" protocol="tcp" accept'
- 拒绝非存储子网访问所有存储端口(防横向扫描):firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" reject'
- 对 etcd client 端口加白名单:只允许 API server(10.10.5.5)和监控 agent(10.10.5.100)访问 2379:firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="10.10.5.5" port port="2379" protocol="tcp" accept'(重复执行添加第二条)
配置生效与验证要点
所有 --permanent 操作后必须重载,且建议在非高峰时段批量操作。
- 执行 firewall-cmd --reload 生效;用 firewall-cmd --list-all --zone=internal 核对 ports 和 rich rules 是否完整写入
- 从节点 A 手动 telnet B 的存储端口,确认通断;再从非授权 IP 尝试连接,验证是否被拒(rich rule 拒绝会返回 connection refused,drop 则超时)
- 检查日志:journalctl -u firewalld -n 50 --no-pager | grep REJECT,确认异常访问被拦截

















