如何保障MongoDB安全?刚部署完成即被入侵求加固方案
MongoDB安全加固实操指南
入侵现场参考截图:
紧急处置(已被入侵的实例优先操作)
- 立即关闭MongoDB对公网的端口暴露,阻断黑客后续操作,优先备份现有未被加密的可用数据,排查数据是否存在被窃取、加密的情况
- 重装全新的干净MongoDB实例,避免黑客留下后门进程、定时任务等持久化入侵手段,不要直接在被入侵的实例上修改配置直接复用
基础安全配置(必做,90%以上的新部署MongoDB被入侵都是因为遗漏以下配置)
1. 强制开启身份认证
MongoDB默认安装完成后未开启身份校验,所有能访问端口的用户都可以直接读写全量数据,是最常见的入侵原因。
- 先在无认证模式下切换到
admin库,创建超级管理员账号:
use admin db.createUser( { user: "自定义管理员账号名", pwd: "强密码(要求8位以上,包含大小写字母、数字、特殊字符)", roles: [ { role: "root", db: "admin" } ] } )
- 编辑MongoDB配置文件(一般路径为
/etc/mongod.conf),开启身份校验:
security: authorization: enabled
- 重启MongoDB服务生效,后续所有连接必须携带合法账号密码才可访问
2. 限制端口暴露范围
- 默认MongoDB监听
0.0.0.0所有网卡地址,极易被公网扫描工具探测到,修改配置绑定仅需要访问的内网地址段:
net: port: 27017 # 建议修改默认27017端口,降低被批量扫描的概率 bindIp: 127.0.0.1,192.168.1.0/24 # 仅绑定本地回环和业务服务器所在的内网IP段,禁止填0.0.0.0
- 配置服务器防火墙/云服务商安全组,仅允许业务服务器的IP访问MongoDB服务端口,禁止将MongoDB端口放开到全公网
3. 关闭不必要的公开接口
禁用默认开启的HTTP状态页、REST API等高风险公开接口,修改配置文件:
net: http: enabled: false RESTInterfaceEnabled: false
进阶安全配置
- 按最小权限原则创建业务账号,禁止使用超级管理员账号跑业务,每个业务库单独创建仅拥有对应库读写权限的账号,示例如下:
use 业务库名 db.createUser( { user: "自定义业务账号名", pwd: "业务专属强密码", roles: [ { role: "readWrite", db: "业务库名" } ] } )
- 开启操作审计日志,记录所有账号登录、用户变更、数据删除等高危操作,方便异常排查,配置参考:
systemLog: destination: file path: "/var/log/mongodb/mongod.log" logAppend: true auditLog: destination: file path: "/var/log/mongodb/audit.log" filter: '{ atype: { $in: [ "authenticate", "createUser", "dropUser", "updateUser", "removeUser", "dropDatabase" ] } }'
- 开启TLS传输加密,配置MongoDB使用SSL证书加密连接链路,避免数据传输过程中被窃听、篡改
- 定期将MongoDB更新到官方最新稳定版本,及时修补已公布的安全漏洞,避免使用已停止维护的老旧版本
内容的提问来源于stack exchange,提问作者Jamviet.com
相关产品推荐
相关产品推荐


