核心在于身份可信、通道加密、访问可控、行为可溯,需网络层、传输层、应用层协同设防:强制静态节点发现、启用双向tls或共享密钥认证、主机防火墙ip白名单、开启ssl/tls握手日志与异常连接监控。

限制高可用节点间的非法通信,核心在于“身份可信、通道加密、访问可控、行为可溯”。不能只靠单一手段,而要从网络层、传输层、应用层协同设防。
强制使用静态节点发现,禁用泛洪式接入
多播或自动发现机制(如Ignite默认的TcpDiscoveryMulticastIpFinder、Redis早期的gossip广播)极易被同网段恶意节点利用。必须显式声明合法节点列表:
- Apache Ignite:改用TcpDiscoveryStaticIpFinder,配置中只写入受信节点IP+端口(如
10.10.20.1:42500),所有节点配置完全一致; - Redis Cluster:在
redis.conf中设置cluster-announce-ip和cluster-announce-port,配合bind绑定集群子网地址(如bind 10.10.20.5),禁用0.0.0.0监听; - Corosync:关闭multicast,仅启用
knet传输模式,并确保interface绑定到专用集群网卡。
实施双向TLS或共享密钥认证
仅靠IP白名单无法防止内网仿冒——攻击者一旦进入同一子网,即可伪造合法节点身份。必须叠加强身份验证:
- 数据库集群(MySQL Group Replication、etcd、PostgreSQL流复制):启用
mTLS,为每个节点签发独立证书,服务端配置requireSSL=TRUE或sslmode=verify-full; - Corosync:运行
corosync-keygen生成/etc/corosync/authkey,并在totem段启用crypto_cipher:aes256与crypto_hash:sha256; - Redis 6.0+:启用
tls-cluster yes,配置tls-cert-file、tls-key-file及tls-ca-cert-file,拒绝未提供有效证书的节点握手。
主机防火墙按源IP严格白名单放行
网络设备ACL可能被绕过,主机防火墙是最后一道防线。每台节点只允许来自其他集群节点的指定端口通信:
- 开放端口最小化:例如etcd仅放行
2379(client)和2380(peer),Corosync只开5404/5405(UDP)、2224(TCP); - iptables规则示例:
iptables -A INPUT -p tcp --dport 2380 -s 10.10.20.1 -j ACCEPTiptables -A INPUT -p tcp --dport 2380 -s 10.10.20.2 -j ACCEPTiptables -A INPUT -p tcp --dport 2380 -j DROP - 禁止
icmp重定向、源路由等辅助协议,防止防火墙策略被旁路。
开启通信审计并监控异常连接行为
防护措施是否生效,必须通过日志与流量验证:
- 启用组件级SSL/TLS握手日志:如MySQL设
log_error_verbosity=3,PostgreSQL开log_ssl = on; - 定期检查集群日志中的高频失败事件:如
unknown node trying to connect(Ignite)、Authentication failed(Redis TLS)、crypto verification failed(Corosync); - 用eBPF工具(如
bpftrace)捕获非预期端口上的明文数据库协议流量,发现即告警; - 对集群子网做镜像流量分析,用Suricata检测异常TLS指纹或大量重协商请求。











