1. 启用身份验证(核心安全机制)
在Debian系统上,启用MongoDB身份验证是防止未授权访问的第一道防线。需编辑MongoDB配置文件/etc/mongod.conf,在security section添加或修改authorization: enabled,强制所有客户端连接提供有效凭证。修改后重启服务:sudo systemctl restart mongod。创建管理员账户时,使用强密码并分配root角色(管理所有数据库)或userAdminAnyDatabase角色(管理用户权限),例如:
mongo -u admin -p --authenticationDatabase admin
use admin
db.createUser({ user: "secureAdmin", pwd: "ComplexPass123!", roles: ["root"] })
此步骤确保只有认证用户能访问数据库资源。
2. 配置网络访问控制(缩小攻击面)
通过bindIp参数限制MongoDB仅监听特定网络接口,避免暴露在公网。编辑/etc/mongod.conf,将bindIp设置为本地回环(127.0.0.1,仅本地访问)或局域网IP(如192.168.1.100,允许内网访问):
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.100 # 示例:允许本地和内网IP
重启服务生效。同时,使用ufw(Uncomplicated Firewall)或iptables限制端口访问,仅允许可信IP连接27017端口(MongoDB默认端口):
# 使用ufw(推荐)
sudo ufw allow from 192.168.1.0/24 to any port 27017 # 允许内网段访问
sudo ufw enable
此配置大幅降低远程攻击风险。
3. 强化用户权限管理(最小权限原则)
避免使用默认账户,为每个应用或用户创建专用账户并分配最小必要权限。例如,为mydb数据库创建仅读写权限的用户:
mongo -u secureAdmin -p --authenticationDatabase admin
use mydb
db.createUser({ user: "appUser", pwd: "AppPass456!", roles: ["readWrite", "dbAdmin"] })
其中readWrite允许数据读写,dbAdmin允许数据库维护(如索引创建)。定期审计用户权限,删除闲置账户,防止权限滥用。
4. 启用SSL/TLS加密(保护数据传输)
为防止数据在传输中被窃取或篡改,配置MongoDB使用SSL/TLS加密。首先生成自签名证书(或使用CA签发):
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
然后编辑/etc/mongod.conf,配置SSL:
net:
ssl:
mode: requireSSL # 强制使用SSL
PEMKeyFile: /etc/ssl/mongodb.pem # 证书路径
重启服务后,客户端连接需指定SSL参数(如mongo --ssl --sslCAFile /etc/ssl/mongodb.pem)。
5. 配置安全审计(监控异常行为)
启用MongoDB审计功能,记录用户操作(如登录、查询、修改数据),便于事后追溯。编辑/etc/mongod.conf,添加auditLog配置:
security:
auditLog:
destination: file # 日志输出到文件
format: JSON # 日志格式为JSON
path: /var/log/mongodb/audit.json # 日志路径
重启服务后,审计日志将记录所有敏感操作。定期检查日志,识别异常行为(如频繁的失败登录尝试)。
6. 定期更新与补丁管理(修复已知漏洞)
保持MongoDB及Debian系统为最新版本,及时安装安全补丁。使用以下命令更新系统:
sudo apt update && sudo apt upgrade -y
MongoDB官方会发布安全公告(如CVE修复),需定期检查并升级到最新稳定版(如通过apt升级mongodb-org包)。避免使用过时版本,降低被已知漏洞攻击的风险。
7. 禁用不必要的接口与功能(减少攻击向量)
若无需通过HTTP接口管理MongoDB,禁用HTTP和REST API,降低暴露风险。编辑/etc/mongod.conf,设置:
net:
http:
enabled: false # 禁用HTTP接口
RESTInterfaceEnabled: false # 禁用REST API
重启服务生效。此外,避免使用默认端口(27017),修改为非标准端口(如27018),增加攻击难度。
8. 备份与灾难恢复(保障数据安全)
定期备份MongoDB数据,防止数据丢失或篡改。使用mongodump工具备份指定数据库:
mongodump --host 127.0.0.1 --port 27017 --username appUser --password --authenticationDatabase mydb --db mydb --out /backup/mongodb
将备份文件存储在安全位置(如异地服务器或云存储),定期测试恢复流程,确保备份有效性。