MongoDB被清空勒索主因是未启用认证、绑定公网IP且使用默认端口;必须开启security.authorization: enabled、限制bindIp为可信内网地址、加固mongo-express并实施定期带oplog的备份与恢复验证。

MongoDB 被清空、勒索、加 Readme 表,99% 是因为没开认证 + 绑定公网 IP + 用默认端口。这不是“可能被黑”,而是“正在裸奔”。
不启用 auth 就等于把数据库门敞开
只要 mongod 启动时没配 authorization: enabled(或旧版 auth=true),任何能连上服务的人,都不需要密码就能执行 db.dropDatabase()、db.collection.remove({}),甚至写入勒索文档。
- 检查当前是否开启认证:连接后运行
db.runCommand({connectionStatus: 1}),看返回中authInfo. authenticatedUsers是否为空数组 - 若未启用,必须先创建用户再开启认证:先以无认证方式启动,用
use admin→db.createUser({user:"root", pwd:"StrongPass2026!", roles:["root"]}),再修改配置文件 - YAML 格式配置中,确保
security.authorization: enabled(不是security.auth: true,后者无效) - 改完必须重启
mongod,否则配置不生效
bind_ip 配错 = 把攻击面直接暴露在互联网
MongoDB 3.6+ 默认只绑 127.0.0.1,但很多人手动改成 0.0.0.0 或删掉这一项,就又回到“全网可连”状态。尤其云服务器安全组放行了 27017,等于给黑客递刀。
- 确认实际监听地址:
netstat -tuln | grep :27017,如果看到*:27017,说明绑定了所有接口 - 正确做法:配置文件中明确写
net.bindIp: 127.0.0.1,10.10.20.5(仅允许多个可信内网 IP),不要留空、不要写0.0.0.0 - 若需跨机访问,优先走内网 VPC,禁用公网入口;实在要开,必须配合云厂商安全组 + IP 白名单(如
iptables -A INPUT -s 192.168.10.100 -p tcp --dport 27017 -j ACCEPT) - 注意 YAML 语法:多个 IP 用英文逗号分隔,前后不加空格,否则解析失败导致服务起不来
别让 mongo-express 成为后门入口
很多团队用 mongo-express 管理数据库,却忽略它本身也是攻击入口——默认关闭基础认证、硬编码弱密码、直连未加密的 MongoDB 实例,等于多开一扇没锁的窗。
- 必须启用基础认证:
ME_CONFIG_BASICAUTH_USERNAME和ME_CONFIG_BASICAUTH_PASSWORD设为强密码,且不能是admin/pass - 禁止跳过 TLS 验证:
ME_CONFIG_MONGODB_TLS_ALLOW_CERTS=false,否则中间人可劫持连接 -
mongo-express容器不应与 MongoDB 共享网络,更不能暴露到公网;建议反向代理 + 基础认证 + IP 限制三重防护 - 定期检查
mongo-express版本,已知v0.54.0及之前存在路径遍历漏洞(CVE-2022-36700)
删除操作无法靠权限完全拦截,得靠备份兜底
即使开了 RBAC、设了最小权限,只要用户有 dropCollection 或 dropDatabase 权限,仍能删数据。而运维账号往往必须带这些权限——这意味着“防不住删,只能快速恢复”。
- 备份不能只靠
mongodump手动跑:用cron每日定时 +--oplog支持增量,保留最近 7 天完整快照 - 备份文件权限必须设为
600,属主为非 root 用户(如mongodb),避免被提权后直接窃取 - 测试恢复流程:每月至少一次用备份还原到隔离环境,验证
mongorestore能否真正读取并重建数据 - 关键业务考虑开启 WiredTiger 加密(
storage.wiredTiger.engineConfig.encryptionKeyFile),防止磁盘被物理盗取
最常被忽略的点:认证开启后,所有客户端连接字符串必须显式加 ?authSource=admin,否则会报 not authorized on xxx to execute command 却误以为权限没配对——其实只是认证源错了。


















