1. 安装最新稳定版本的MongoDB并应用安全补丁
使用Linux发行版的包管理器(如Ubuntu的apt、CentOS的yum)从官方仓库安装MongoDB,避免从第三方源下载。安装后定期运行sudo apt update && sudo apt upgrade mongodb-org(Ubuntu/Debian)或sudo yum update mongodb-org(CentOS/RHEL)更新到最新版本,及时修复已知安全漏洞。
2. 启用身份验证强制访问控制
编辑MongoDB配置文件(通常位于/etc/mongod.conf),在security字段下添加authorization: enabled,启用基于角色的访问控制(RBAC)。重启服务使配置生效:sudo systemctl restart mongod。随后创建管理员用户(需切换至admin数据库):
mongo
use admin
db.createUser({
user: "adminUser",
pwd: "StrongPassword123!",
roles: [{ role: "root", db: "admin" }]
})
后续所有数据库操作需通过该用户或具有相应权限的角色进行。
3. 限制网络访问范围
在mongod.conf的net字段下,将bindIp设置为仅允许必要的IP地址访问(如本地127.0.0.1或特定服务器IP),避免使用0.0.0.0(允许所有IP):
net:
bindIp: 127.0.0.1,192.168.1.100 # 允许本地和内网IP
port: 27017 # 可选:修改默认端口增加猜测难度
重启服务后,MongoDB仅接受来自指定IP的连接。同时,使用Linux防火墙(如ufw或iptables)进一步限制端口访问:
# 使用ufw允许特定IP访问27017端口(Ubuntu)
sudo ufw allow from 192.168.1.50 to any port 27017
sudo ufw enable
4. 使用非特权用户运行MongoDB服务
避免以root用户运行MongoDB,降低系统权限泄露风险。创建专用用户和组:
sudo useradd -r -s /bin/false mongodb # 创建系统用户(无登录权限)
sudo chown -R mongodb:mongodb /var/lib/mongodb # 修改数据目录所有者
sudo chown -R mongodb:mongodb /var/log/mongodb # 修改日志目录所有者
编辑MongoDB服务文件(如/etc/systemd/system/mongod.service),确保User和Group设置为mongodb,然后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart mongod
5. 配置TLS/SSL加密通信
生成SSL证书(可使用openssl或从CA机构获取),编辑mongod.conf的net.ssl字段,启用强制SSL加密:
net:
ssl:
mode: requireSSL # 强制所有连接使用SSL
PEMKeyFile: /etc/ssl/mongodb.pem # 证书文件路径(包含私钥和公钥)
CAFile: /etc/ssl/ca.pem # CA证书路径(验证客户端证书,可选)
重启服务后,MongoDB客户端需通过--ssl参数连接(如mongo --ssl --host 127.0.0.1 --sslCAFile /etc/ssl/ca.pem)。
6. 启用审计日志追踪操作
若使用MongoDB Enterprise版本,编辑mongod.conf的security.auditLog字段,开启审计日志记录所有用户操作(如查询、插入、删除):
security:
auditLog:
destination: file # 日志输出到文件
format: JSON # 日志格式为JSON(便于解析)
path: /var/log/mongodb/audit.json # 日志文件路径
重启服务后,审计日志将记录操作时间、用户、数据库、命令等详细信息,便于事后追溯安全事件。
7. 禁用不必要的接口和功能
MongoDB默认开启的HTTP接口和REST API可能暴露敏感信息,需在mongod.conf中禁用:
net:
http:
enabled: false # 关闭HTTP接口
RESTInterfaceEnabled: false # 关闭REST API
JSONPEnabled: false # 关闭JSONP(防止跨站脚本攻击)
重启服务后,这些功能将不可用,减少攻击面。
8. 定期备份与监控
使用mongodump命令定期备份数据(如每日凌晨),并将备份文件存储在安全位置(如异地服务器或云存储):
# 备份所有数据库到指定目录
mongodump --out /backup/mongodb-$(date +%F)
# 删除7天前的备份(可选)
find /backup -type d -name "mongodb-*" -mtime +7 -exec rm -rf {} \;
同时,配置监控工具(如MongoDB自带的mongostat、mongotop或第三方工具如Prometheus+Granafa),监控数据库性能指标(如连接数、查询延迟、磁盘空间),及时发现异常活动(如大量失败登录尝试)。