1. 启用身份认证(核心安全机制)
在/etc/mongod.conf配置文件中添加security.authorization: enabled,强制所有客户端连接需通过用户名和密码认证。修改后重启MongoDB服务:sudo systemctl restart mongod。创建管理员账户(需切换至admin数据库):
use admin
db.createUser({
user: "admin",
pwd: "StrongPassword@123", # 使用强密码(包含大小写字母、数字、特殊字符)
roles: ["root"] # 分配root角色(拥有所有数据库管理权限)
})
后续为用户分配最小必要权限(如仅允许某用户访问特定数据库并具备readWrite权限)。
2. 限制网络访问范围
在/etc/mongod.conf中配置net.bindIp,仅允许受信任的IP地址或网段访问MongoDB服务。例如:
bindIp: 127.0.0.1bindIp: 127.0.0.1,192.168.1.1003. 强制使用TLS/SSL加密通信
生成SSL证书(可使用OpenSSL生成自签名证书,生产环境建议使用CA签发的证书):
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout /etc/ssl/mongodb-key.pem -out /etc/ssl/mongodb-cert.pem
在/etc/mongod.conf中配置SSL参数:
net:
ssl:
mode: requireSSL # 强制使用SSL
PEMKeyFile: /etc/ssl/mongodb-key.pem # 私钥文件路径
CAFile: /etc/ssl/mongodb-cert.pem # 证书文件路径
重启服务使配置生效:sudo systemctl restart mongod。
4. 配置防火墙规则
使用Linux防火墙(如firewalld或ufw)限制对MongoDB默认端口(27017)的访问:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept'
sudo firewall-cmd --reload
sudo ufw allow from 192.168.1.0/24 to any port 27017 proto tcp
sudo ufw enable
仅允许可信IP段访问MongoDB端口。
5. 使用非特权用户运行MongoDB
创建专用系统用户(如mongodb)用于运行MongoDB服务,避免以root权限运行:
sudo useradd -r -s /bin/false mongodb # 创建专用用户(无登录权限)
sudo chown -R mongodb:mongodb /var/lib/mongodb # 修改数据目录归属
sudo chown -R mongodb:mongodb /var/log/mongodb # 修改日志目录归属
修改/etc/mongod.conf中的processManagement.fork为true(后台运行),并以专用用户启动服务:
sudo -u mongodb mongod --config /etc/mongod.conf
设置开机自启:sudo systemctl enable mongod。
6. 禁用不必要的接口与功能
在/etc/mongod.conf中禁用HTTP接口、REST接口和JSONP,减少攻击面:
net:
http:
enabled: false # 禁用HTTP接口
RESTInterfaceEnabled: false # 禁用REST接口
JSONPEnabled: false # 禁用JSONP
重启服务使配置生效。
7. 配置审计日志(Enterprise版功能)
若使用MongoDB Enterprise版,可在/etc/mongod.conf中启用审计日志,记录用户操作(如查询、插入、删除):
security:
auditLog:
destination: file # 日志输出到文件
format: JSON # 日志格式为JSON(便于解析)
path: /var/log/mongodb/audit.json # 日志文件路径
重启服务后,审计日志将记录所有用户操作,便于后续安全审计和事件追溯。
8. 定期更新与补丁管理
定期检查MongoDB官方安全公告(如通过MongoDB Security Advisories页面),及时升级到最新稳定版本,修复已知漏洞。使用包管理器(如apt或yum)升级:
sudo apt update && sudo apt upgrade mongodb-org
sudo yum update mongodb-org
升级前备份数据,避免升级失败导致数据丢失。
9. 定期备份数据
使用mongodump工具定期备份数据(如每日凌晨2点),并将备份文件存储至安全位置(如异地服务器或云存储):
# 备份所有数据库
mongodump --host 127.0.0.1 --port 27017 --username admin --password StrongPassword@123 --authenticationDatabase admin --out /backup/mongodb_$(date +%F)
# 备份特定数据库(如test_db)
mongodump --host 127.0.0.1 --port 27017 --username admin --password StrongPassword@123 --authenticationDatabase admin --db test_db --out /backup/mongodb_$(date +%F)
定期测试备份文件的恢复流程,确保备份有效性。
10. 监控与日志分析
配置MongoDB日志记录(systemLog.destination: file、logAppend: true),并使用监控工具(如Prometheus+Granafa、Zabbix)监控数据库性能指标(如连接数、查询延迟、磁盘空间)。设置告警规则(如连接数超过阈值、磁盘空间不足),及时发现异常行为。