MongoDB无诱因被全量删除 排查代码配置及未授权访问问题
排查结论
- 这类无征兆重复全量删库,绝大多数情况是MongoDB未开启认证、端口暴露公网导致的恶意入侵,基本可以排除代码错误、常规数据库配置问题。
- 代码错误可直接排除:如果是业务代码逻辑bug触发删库,故障会和特定业务操作强关联,不会毫无征兆突发两次,且你已经确认代码中没有集合删除相关逻辑,不存在误写入口。
- 常规数据库配置错误也不会触发自动删库:MongoDB本身没有内置自动删除全量数据的逻辑,除非你自己写了错误的运维定时脚本,这点直接核对服务器crontab、MongoDB自定义调度任务就能排除。
- 未授权入侵的特征完全匹配你的场景:全网有大量自动化扫描脚本持续探测公网开放的27017端口,遇到无密码的MongoDB会直接遍历所有库集合执行删除,部分还会留下勒索备注。你之前服务稳定运行一周只是没被扫描器命中,首次被攻击后如果没补安全漏洞,后续会被反复入侵,和你两次出故障的表现完全一致。
快速验证方法
- 直接查MongoDB运行日志,默认路径为
/var/log/mongodb/mongod.log,搜索drop、dropDatabase关键字,定位执行删库操作的客户端源IP,如果是陌生公网地址即可确认是非法接入。 - 核对MongoDB配置文件
/etc/mongod.conf:如果bindIp配置为0.0.0.0,代表服务绑定了所有网卡、公网可直接访问;如果security段没有开启authorization: enabled,代表服务无认证,任何人连上就能操作所有数据。 - 执行
ufw status(Ubuntu默认防火墙)或iptables -L -n查看防火墙规则,确认27017端口是否对公网开放。
紧急修复方案
- 立即开启MongoDB身份认证,创建复杂度足够的管理员密码,给业务使用的账号只分配读写对应业务库的最小权限,绝对不能授予删库、删集合的高危权限。
- 修改
mongod.conf中的bindIp配置,仅绑定127.0.0.1或业务内网IP,禁止MongoDB端口直接暴露公网;如果确实需要公网访问,必须配置IP白名单,或通过SSH隧道、VPN方式接入,不要直接把端口对公网开放。 - 全盘排查服务器SSH登录日志、定时任务列表,清理攻击者可能留下的后门账号、恶意脚本,SSH服务禁用密码登录、改用密钥认证,避免服务器被反复入侵。
- 现有备份文件先做离线隔离留存,确认备份无篡改后再执行恢复,恢复完成后第一时间做全量数据快照。
内容的提问来源于stack exchange,提问作者Alexandr T
相关产品推荐
相关产品推荐

