自建MongoDB实践:MongoDB 安全加密

46363a1ed8c16ef762f2943a61cf8a26.gif

新钛云服已累计为您分享736篇技术干货

6256f4b924378fbe3e0d526fe29a975c.gif

接下来的一些列文章会为大家介绍日常工作中常用的 NoSQL 产品 MongoDB。

主要涉及到:

MongoDB 的安装及基本使用

MongoDB 文档查询

MongoDB 复制集

MongoDB 分片集群的介绍及搭建

MongoDB 安全加密

MongoDB 诊断‍‍‍‍

MongoDB Change Stream 备份及恢复‍‍

MongoDB 其他

我们会用八篇文章近五万字来阐述 MongoDB 运维相关的日常实战事宜。您当前看到的是系列文章的第五篇:《MongoDB 安全加密》

网络及配置加固

为了减少整个 MongoDB 系统的风险,请确保只有受信任的主机才能访问 MongoDB。

01

配置加固

IP 绑定

从 MongoDB 3.6 开始,MongoDB 二进制文件、mongod 和 mongos 默认绑定到本地主机。从 MongoDB 版本 2.6 到 3.4,默认情况下,只有官方 MongoDB RPM(RedHat、CentOS、Fedora Linux 和衍生品)和 DEB(Debian、Ubuntu 和衍生品)软件包中的二进制文件才会绑定到本地主机。要了解有关此更改的更多信息,请参阅 Localhost 绑定 IP Binding 兼容性更改。

需要注意的:

在绑定到非本地主机(例如可公开访问的)IP 地址之前,请确保我们的集群免受未经授权的访问。有关安全建议的完整列表,请参阅安全清单。至少考虑启用身份验证和强化网络基础设施。

需要注意的:

确保我们的 mongod 和 mongos 实例只能在受信任的网络上访问。如果我们的系统有多个网络接口,请将 MongoDB 程序绑定到私有或内部网络接口。

HTTP 状态接口及 REST API

在 MongoDB 3.6+ 版本中,已经将不建议使用的 HTTP 接口和 REST API 删除了。如果还在使用 3.6 以下的版本,可以使用以下配置进行禁用:

net:
  http:
    enabled: false
    JSONPEnabled: false
    RESTInterfaceEnabled: false

02

网络加固

4908e3d454753eb2d102c3079def933a.png

我们还可以在网络层面来加强 MongoDB 的安全防护,具体内容如下。

防火墙

防火墙允许管理员通过提供对网络通信的精细控制来过滤和控制对系统的访问。对于 MongoDB 的管理员来说,以下功能很重要:将特定端口上的入栈流量限制到特定系统,并限制来自不受信任主机的入栈流量。

在 Linux 系统上,iptables 接口提供对底层 netfilter 防火墙的访问。在 Windows 系统上,netsh 命令行界面提供对底层 Windows 防火墙的访问。有关防火墙配置的更多信息,请参阅:

  • Configure Linux iptables Firewall for MongoDB 与

  • Configure Windows netsh Firewall for MongoDB.

为了获得最佳效果并最大限度地减少整体服务暴露,请确保只有来自受信任来源的流量才能到达 mongod 和 mongos 实例,并且 mongod 和 mongos 实例只能连接到受信任的输出。

虚拟专用网络

虚拟专用网络(VPN)可以通过加密和有限访问的受信任网络连接两个网络。通常使用 VPN 的 MongoDB 用户使用 TLS/SSL 而不是 IPSEC VPN 来解决性能问题。

根据配置和实现,VPN 提供证书验证和加密协议的选择,这需要对所有客户端进行严格程度的身份验证和识别。此外,由于 VPN 提供了一个安全的隧道,通过使用 VPN 连接来控制对 MongoDB 实例的访问,可以防止篡改和“中间人”攻击。

TLS

生产环境推荐使用 TLS/SSL 进行集群节点的通信加密。

(venv37) ➜  mongodb openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key


(venv37) ➜  mongodb cat mongodb-cert.key mongodb-cert.crt > mongodb.pem

然后,启动 mongod 服务器,使用 --sslPEMKeyFile 和 --sslMode 两个参数:

$ mongod --sslMode requireSSL -sslPEMKeyFile mongodb.pem

现在,使用shell SSL连接数据库,进行相同的操作:

mongo --ssl

单机模式:

mongod --clusterAuthMode x509 --sslMode requireSSL --sslPEMKeyFile server.pem --sslCAFile ca.pem 


mongo --ssl --sslPEMKeyFile client.pem

复制集模式:

mongod --replSet myReplSet --sslMode requireSSL --clusterAuthMode x509 --sslClusterFil e --sslPEMKeyFile server.pem --sslCAFile ca.pem


# 命令行参数模式
mongod \
    --shardsvr \
    --replSet myShard  \
    --dbpath /var/lib/mongodb \
    --bind_ip localhost,My-Example-Hostname \
    --fork \
    --logpath /var/log/mongodb/mongod.log \
    --clusterAuthMode x509 \
    --tlsMode requireTLS  \
    --tlsCAFile /path/to/my/CA/file  \
    --tlsCertificateKeyFile /path/to/my/certificate/file \
    --tlsClusterFile /path/to/my/cluster/membership/file


# 可以使用 --outputConfig 选项,生成 yaml 文件
mongod \
    --shardsvr \
    --replSet myShard  \
    --dbpath /var/lib/mongodb \
    --bind_ip localhost,My-Example-Hostname \
    --fork \
    --logpath /var/log/mongodb/mongod.log \
    --clusterAuthMode x509 \
    --tlsMode requireTLS  \
    --tlsCAFile /path/to/my/CA/file  \
    --tlsCertificateKey
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值