mongodb ip白名单由三层机制共同构成:网络层bindip(限定监听地址)、云平台network access(如atlas项目级cidr规则)、用户级authenticationrestrictions(clientsource绑定ip);生产环境必须三者组合使用,缺一不可。

MongoDB 的 IP 白名单不是单一配置项,而是由三类机制共同决定的:网络层绑定(bindIp)、云平台网络规则(如 Atlas 的 Network Access)、以及用户级访问限制(authenticationRestrictions)。生产环境必须组合使用,只配其中一项等于没配。
本地部署时用 bindIp 控制监听地址
这是最基础、最有效的第一道防线。MongoDB 不会主动监听所有网卡,必须显式指定允许连接的 IP 或网段。
-
bindIp只接受 IP 地址或 CIDR,不支持域名;填127.0.0.1表示仅本机可连,填0.0.0.0则监听全部接口(危险) - 多个地址用逗号分隔,例如:
bindIp: 127.0.0.1,192.168.1.100,10.0.0.5/32—— 注意末尾不能有空格 - 修改
/etc/mongod.conf后必须重启服务:sudo systemctl restart mongod,否则配置不生效 - 如果启用了防火墙(如
ufw或iptables),还需额外放行27017端口,否则即使bindIp正确也连不上
MongoDB Atlas 上在 Network Access 页面配 CIDR 规则
Atlas 没有配置文件可改,白名单入口唯一且固定:项目级的 Network Access 页面,不是集群页、不是数据库页、也不是连接字符串里能改的。
- 填的必须是合法 CIDR,比如
203.0.113.42/32(单 IP)或203.0.113.0/24(整个子网);填example.com或203.0.113.42(无掩码)会被拒绝 - 常见连不上原因:你本地出口 IP 是动态的(比如家用宽带),或者走的是 NAT 网关但没配 EIP,结果实际请求来源 IP 和你填的不一致
- 规则按「项目」生效,同一个项目下所有集群共用这一组白名单 —— 别误以为给 A 集群加了,B 集群就自动继承
- 绝对不要填
0.0.0.0/0,它等价于“对全世界开放”,审计和安全合规基本过不了
用 authenticationRestrictions 绑定用户与 IP
这是细粒度控制,适合多租户或需区分访问来源的场景。它不替代 bindIp 或 Atlas 白名单,而是在认证阶段再校验一次客户端真实 IP。
- 创建用户时指定:
clientSource: ["192.168.1.100"],注意是数组,哪怕只写一个也要套方括号 - 该限制只对启用了
security.authorization: enabled的实例有效;没开权限认证,这条直接被忽略 - 它校验的是 TCP 连接的真实源 IP,不是 HTTP X-Forwarded-For 类头 —— 所以反向代理后必须透传真实 IP,否则用户永远连不上
- 不支持通配符或端口范围,只认 IPv4/IPv6 地址或 CIDR;写成
"192.168.1.*"会报错Invalid IP address format
真正起作用的白名单从来不是某一行配置,而是三层过滤的叠加:操作系统防火墙 → MongoDB bindIp → 用户级 clientSource。漏掉任意一层,都可能让攻击者绕过。尤其注意本地开发常把 bindIp 设成 0.0.0.0,上线前却忘了改回来。











