总体结论
在CentOS上,MongoDB能否安全取决于版本与配置。自MongoDB 3.6起,官方二进制默认仅绑定localhost,降低了误暴露风险;但旧版本或不当配置(如绑定0.0.0.0、无认证、无防火墙)仍易被入侵。结合CentOS的firewalld、最小权限与加密等加固措施,可以达到生产可用的安全级别。
关键风险与自检清单
- 版本与绑定地址:确认版本≥3.6;检查/etc/mongod.conf中net.bindIp是否为127.0.0.1或内网地址,避免0.0.0.0。旧版本(≤3.4)的某些安装包默认监听所有地址,风险更高。
- 认证与授权:确认已启用security.authorization: enabled;是否创建了管理员账户与最小权限的业务账户(如仅授予目标库的readWrite)。
- 网络暴露:用firewalld仅放行必要来源IP到27017/tcp;云环境同步收紧安全组,杜绝公网直连数据库。
- 传输加密:是否启用TLS/SSL(如net.ssl.mode: requireSSL与证书),避免明文传输凭证与数据。
- 审计与监控:是否开启审计日志并定期审查;是否对异常连接、失败登录等进行告警。
- 系统加固:保持系统与MongoDB及时更新;如启用SELinux,确保策略与MongoDB运行兼容。
CentOS上的安全加固步骤
- 启用认证与授权
- 编辑/etc/mongod.conf:
security:
authorization: enabled
- 重启服务:systemctl restart mongod
- 连接Mongo Shell创建管理员:
use admin
db.createUser({user:“admin”, pwd:“StrongPass!23”, roles:[{role:“userAdminAnyDatabase”, db:“admin”}]})
- 业务库按需创建最小权限用户(如仅readWrite)。
- 限制网络访问
- 绑定内网IP:net.bindIp: 127.0.0.1,192.168.x.x(或逗号分隔多IP)
- firewalld仅放行白名单:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.0/24” port port=“27017” protocol=“tcp” accept’ && firewall-cmd --reload
- 加密通信
- 生成或获取证书,配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /path/to/mongo.pem
CAFile: /path/to/ca.pem
- 重启生效。
- 审计与监控
- 在配置中启用审计(auditLog),记录关键操作;
- 结合系统日志与监控平台对异常行为进行告警。
- 持续维护
- 定期yum update升级MongoDB与系统组件;
- 定期备份(如mongodump)并验证可恢复性。
常见误区
- 直接把bindIp设为0.0.0.0并依赖应用服务器“安全”,等同于公网开放数据库端口。
- 未启用authorization就创建业务用户,导致权限过大或越权。
- 只依赖系统防火墙而忽视云安全组、VPC网络ACL等多层防护。
- 使用弱口令或长期不轮换,增加被爆破风险。
- 忽视TLS/SSL,在不可信网络中传输凭证与数据。
合规与进阶建议
- 等保2.0(三级)场景建议:开启身份鉴别与传输加密(SSL),完善登录失败处理与审计日志,并对管理员实施更强的鉴别策略(如双因素思想落地);对账户实施最小权限与分权分域管理。
- 结合企业制度落实定期补丁、备份恢复演练、变更审计与安全基线巡检,形成闭环治理。