温馨提示×

MongoDB在Linux中的安全配置怎么做

小樊
40
2025-12-18 12:17:26
栏目: 云计算

MongoDB 在 Linux 的安全配置清单

一 基础防护

  • 绑定地址最小化:在配置文件 /etc/mongod.conf 中仅监听必要接口,优先使用本地回环;需要内网访问时仅绑定内网 IP 或白名单网段,避免 0.0.0.0。示例:net.bindIp: 127.0.0.1,192.168.1.10。从 MongoDB 3.6 起官方包默认仅绑定 localhost,但旧版本或自定义安装可能仍为 0.0.0.0,务必核查。
  • 启用访问控制:在 security 段开启授权,强制所有客户端登录后操作。
  • 禁用危险接口:关闭 HTTP 接口REST 接口,减少攻击面。
  • 以最小权限运行:创建专用系统用户(如 mongod),数据/日志目录仅该用户可读写,服务以该用户启动。
  • 日志与审计:开启文件日志与可选的审计日志,便于追踪与合规。
  • 备份与监控:定期 mongodump 备份,结合监控告警观察异常连接与慢操作。

二 身份与授权

  • 启用认证:在 /etc/mongod.conf 中设置
    security:
    authorization: enabled
    重启后所有连接需提供凭据。
  • 创建管理员:在 admin 库创建高权限账户(如 root),用于后续用户与权限管理。
  • 最小权限原则:按库/按应用创建用户,仅授予所需角色;避免使用 root 进行日常业务连接。
  • 常用内置角色:
    • 数据库级:readreadWritedbAdmindbOwneruserAdmin
    • 全局级:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
    • 集群管理:clusterAdmin
    • 超级用户:root(仅在 admin 库可用)

三 网络与防火墙

  • 默认端口:27017/TCP。仅在内网可达时开放,严禁直接暴露在公网。
  • firewalld(CentOS/RHEL 7+):
    • 开放端口:sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp && sudo firewall-cmd --reload
    • 仅允许指定来源:sudo firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“192.168.1.100” port protocol=“tcp” port=“27017” accept’ && sudo firewall-cmd --reload
  • ufw(Ubuntu):
    • 仅本地:sudo ufw allow from 127.0.0.1 to any port 27017
    • 指定来源:sudo ufw allow from 192.168.1.100 to any port 27017
  • iptables:
    • 仅本地:sudo iptables -A INPUT -p tcp --dport 27017 -s 127.0.0.1 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 27017 -j DROP
  • 变更 bindIp 后务必重启服务并验证监听地址。

四 加密与审计

  • TLS/SSL 加密传输:
    • 生成证书(示例):
      openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout mongodb-key.pem -out mongodb-cert.pem
    • 配置:
      net:
      ssl:
      mode: requireSSL
      PEMKeyFile: /path/to/mongodb-key.pem
      CAFile: /path/to/mongodb-cert.pem
  • 审计日志(可选,企业/合规场景建议):
    security:
    auditLog:
    destination: file
    format: JSON
    path: /var/log/mongodb/audit.json
  • 注意:启用 TLS 后,客户端连接需使用 mongodb://tls=true 等参数。

五 快速配置示例

  • /etc/mongod.conf 关键片段
    storage:
    dbPath: /var/lib/mongodb
    journal:
    enabled: true
    systemLog:
    destination: file
    path: /var/log/mongodb/mongod.log
    logAppend: true
    processManagement:
    fork: true
    net:
    port: 27017
    bindIp: 127.0.0.1,192.168.1.10
    ssl:
    mode: requireSSL
    PEMKeyFile: /etc/mongodb/ssl/mongodb-key.pem
    CAFile: /etc/mongodb/ssl/mongodb-cert.pem
    http:
    enabled: false
    RESTInterfaceEnabled: false
    JSONPEnabled: false
    security:
    authorization: enabled
    auditLog:
    destination: file
    format: JSON
    path: /var/log/mongodb/audit.json
  • 操作要点
    • 重启服务:sudo systemctl restart mongod
    • 创建管理员(本地先连入):
      use admin
      db.createUser({ user: “admin”, pwd: “StrongPass!”, roles: [“root”] })
    • 业务库最小权限用户:
      use mydb
      db.createUser({ user: “app”, pwd: “AppPass!”, roles: [“readWrite”, “dbOwner”] })
    • 远程连接测试(应仅允许白名单):mongo --host 192.168.1.10 --port 27017 -u app -p AppPass! --authenticationDatabase mydb --tls

0