MongoDB分片集群公网访问必须经CLB中转且仅支持绑定LB地址,禁用需同步停用CLB监听器、收紧CLB安全组规则、确保mongos仅绑定内网IP,并验证三者闭环。

MongoDB 分片集群默认不开放公网访问,一旦开通,必须通过 CLB(负载均衡)中转,且仅允许绑定 LB 地址 —— 这意味着你无法为单个 mongos 或 shard 节点单独配置公网 IP。限制公网访问的核心不是“关掉某个开关”,而是切断从公网到 CLB 的路径,并确保所有中间环节(CLB、安全组、MongoDB 实例配置)协同生效。
关闭 CLB 的公网监听器是唯一可靠方式
控制台里“关闭外网访问”按钮看似直接,但底层逻辑是:它只删除 MongoDB 自动创建的 CLB 监听规则,不会动你手动加的其他监听器。如果你曾手动在 CLB 上添加过 MongoDB 端口(如 27017)的 TCP 监听,这个监听会继续转发流量,导致“已关闭外网”却仍能连上。
- 登录 CLB 控制台,定位到绑定的实例,检查监听器列表,确认
27017(或自定义端口)的监听器状态为“已停止”或已删除 - 特别注意:共享型 CLB 实例默认开启“HTTP/HTTPS 重定向”,但 MongoDB 是纯 TCP 协议,这类重定向不生效,别被界面误导
- 关闭后,用本地
telnet <clb-ip> 27017验证是否彻底不通;通了说明还有残留监听或安全组放行
安全组必须显式拒绝 0.0.0.0/0 对 27017 的入向
即使 CLB 监听器已停,如果 CLB 所在安全组仍允许全网访问 27017,攻击者可能通过 CLB 的 SNAT 或异常路由绕过监听器直连后端 —— 尤其当 CLB 和 MongoDB 实例同属一个安全组时,风险更高。
- 进安全组规则页,找到应用在 CLB 实例上的入方向规则,删掉所有
0.0.0.0/0→27017的条目 - 只保留必要来源 IP 段,例如运维跳板机的固定出口 IP:
203.0.113.42/32 - 注意:安全组对 CLB 本身生效,和 MongoDB 实例的安全组是两套策略,别混淆
副本集节点不能开公网,分片集群更不能绕过 CLB
有人试图给某个 mongos 节点单独绑定弹性公网 IP,这是无效操作。云厂商明确限制:分片集群只支持将默认 LB 地址绑定到 CLB,不支持绑定单独开通的 mongos 地址。强行操作会失败,控制台报错 OperationNotSupported: Sharded cluster does not support binding individual mongos address。
- 检查所有
mongos节点的net.bindIp配置,确保没有写成0.0.0.0或公网 IP —— 应该只绑内网地址,例如10.0.1.5 - 如果使用自建分片集群(非云托管),
mongos进程启动参数里不能带--bind_ip=0.0.0.0,否则 CLB 失效后仍可能被扫出 - 云数据库 MongoDB 控制台里“外网地址”列显示为空,不代表绝对安全;得看 CLB + 安全组 + 实例 bindIp 三者是否真正闭环
最容易被忽略的是时间同步和证书校验——它们不直接影响公网开关,但一旦启用 TLS(比如强制 requireSSL),而节点间时钟偏差超 30 秒,mongos 就连不上 config server,整个集群卡在 STARTUP2 状态,此时你可能误判为“外网没关好”,实际是内网通信已断裂。

















